Diary?

2007-12-04
Tue

(20:51)

Linus odia C++ :s で大笑い。流石は Linus だ、返信の一行目から相手を最低のクソ野郎呼ばわりかよ。まあ確かに C++ は酷い言語で、 Bjarne Stroustrup みたいな超弩級に頭のいい人でないとまともに使えないだろう。実際のところ、大学時代に C++ でゲームを作るのは死ぬほど大変だった。コードの行数で 3,000 行前後の極めて小規模なプログラムでも死ねるというか、わけがわからん。どこがワケワカメか少し具体的に書くと

  • 文法が完膚なきまでに終わってる。これについてだけは反論を認めない
  • テンプレートを使うとコンパイラの出すエラーメッセージが酷い
  • メンバ関数がデフォルトで仮想関数にならない。効率化のためだというけど、もっと大事な物があるだろう (大体そこまで効率が重要なら C 使えよ)
  • virtual 継承なしでは菱形継承で死ねる。まあ、後に継承自体がリスキーということが広まっていくわけだがそれは別の話
  • 継承の種類が複数あって、 protected 継承と private 継承が他の OOP 言語に喧嘩を売るような代物 (継承を単なるコードの節約程度にしてしまう)
  • class と struct が実はデフォルトのアクセス指定子が違うだけで同じものという罠
  • 当たり前の話だけど GC がなく、オブジェクトをオンデマンドで作っていく OOP ではかなりの致命傷
  • マルチパラダイムなのはいいけど、いくらなんでも突っ走りすぎ。あ、これは C++ というよりも Boost のせいかも

表面的なところだけでもこんだけ出てくる。俺はもう C++ は二年近く触ってないし、今後も出来れば付き合いたくない言語だ。

追記: 本文とはあんま関係ないかもしれないけど補足。 GC で楽になるのはオブジェクトというかメモリの確保と開放だけで、依然としてオブジェクトのライフサイクルには気をつかう必要があるし、メモリ以外のリソースはやっぱりプログラマが手動でどうにかしないといけないケースがある。例えば枯渇寸前のリソース握ったまま GC されてないオブジェクトがあったとすると、任意のタイミングで GC が起動できない限りは手が付けられないよな (なのでそういうところに気をつけてプログラムを書く必要がある)。

Creative Commons
この怪文書はクリエイティブ・コモンズ・ライセンスの元でライセンスされています。引用した文章など Kuwata Chikara に著作権のないものについては、それらの著作権保持者に帰属します。