読者です 読者をやめる 読者になる 読者になる

S.F. Page

Programming,Music,etc...

オブジェクト指向とかCとかC++とか

Linus氏がC++嫌いなのを今日知ったのである。私はC++は好きだが深入りしたくはあまりない。つまりLinus氏のいう一般以下に位置する者である。私はLinus氏の意見は批判というよりはOSのカーネルを書くにはC言語以外にないと言っているだけのような気もする。まあその点はそうかもと思う。C++はいささか高級だからね。かと言ってC言語が低級というわけでもないが。

この一連の発言とは関係あるようなないようなことだが、ちょっと思ったのはオブジェクト指向というのは設計法で、その実装はC言語でもできるということ。オブジェクト指向はもうトレンドでなく一般化されていて、設計するにもこれを意識するのが当たり前のものだと思う。そのような設計に親和性が高い言語の1つとしてC++言語がある。設計を反映させやすいという点ではC++のほうが上だろう。でもC言語でも実装ができるのは確かである。例を挙げるとするとWin32 APIなんかもそうなんじゃないかなと思う。ウィンドウのハンドルがインスタンスでそれに対してメッセージをSendしたりPostしたりするというのが、昔SmallTalkが脚光を浴びていた時代のオブジェクト指向の考え方、つまりオブジェクトにメッセージを送るという考え方を忠実に実装しているように思うのは私がド素人だからだろうか。ほかに昔のMOD演奏ライブラリでも構造体+関数ポインタでオブジェクト指向風の実装を見かけたことがある。たしかMIKMODの古いバージョンがそうだったような気がする。

そういえばNginxもギンギンのC言語であったように思う。やっぱりゴリゴリにチューニングするような高速性を要求するコードはCで書くのがいいのだろう。その高速性というのは実行時のパフォーマンスのことだけれども、コンパイル時間の速さもC言語を使う理由の1つでもあると思う。C++のテンプレートゴリゴリのライブラリ使うとコンパイル時間が長いんだよね。コンパイル時にいろいろなことを行っているからね。ただBox2Dのライブラリみたくテンプレート使っていないライブラリをコンパイルするとC++でもめちゃ速いけれども。まあこう書くとC++を批判しているように見えるけれども冒頭にも書いたようにC++は好きである。特に混沌としたところが。テンプレート関連でコンパイルエラーが出たときのあの難解なエラーを追って行って解決できた時のあの充実感がたまらないのである。ただ汎用ライブラリを書くようなことはしたくないし、できないだろうね。私の性格だと。

C++ってテンプレート・メタプログラミングやオペレータ・オーバーロードを駆使して別の言語を実装したりとか(実用的にみると?な気がするのだけれども)、言語の限界を超えることに挑戦できること自体がこの言語の存在理由のようなそんな感じがするのである。他の言語では見られない特徴ではないかと思う。