Zedが何故mongrel2にC++を使わなかったか

Linusに続いてZedもC++をボロクソにけなしている。

メーリングリストで「C++でstd::stringとか使ったらメモリ管理とかスッキりするよ」という意見に対してのZedの反論:

http://librelist.com/browser//mongrel2/2010/7/15/c-verses-c++/#770d94bcfc6ddf1d8510199996b607dd

まず、ZedはC++使った経験があり、Linusのよう全くC++を否定している理由ではない。現在でもMulletDBなどプロジェクトによっては使うようだ。Grace frameworkは良しとしている。ただ、mongrel2のように「簡単な」プログラムにはC++は大袈裟としている。

mongrel2をCで実装した理由

CはPosixに対して「最小摩擦のアクセス」を提供しているので、mongrel2のようなプロジェクトには最適。PosixプログラミングではC++は邪魔になるだけだ。ただソケットを使うにしても大変なことになる。こういう状況ではOOも役に立たないし。

以上がrantでない答。C++が好きな人は以下読まない方がいいとアドバイスしている。

テンプレート・メタプログラミング==黒死病

そんなZedがC++が嫌いになった原因は「2000年のテンプレート・メタプログラミングの大流行」。("Great Template Metaprogramming Plague of 2000") テンプレートの流行を黒死病に例えている。

C++はメモリ管理を簡単にはしてくれない

  • ディストラクターの挙動はとても複雑。特に例外があると。
  • 結局Cと同じようなチェックをしなけりゃいけない。balgrindを使ったり、、
  • その上、例外やテンプレートがメモリ管理を複雑化している
  • 結局、Cのメモリ管理の方が簡単

文字列サポートは「阿呆」

どんな言語にでもある、次のような簡単な文字列フォーマッティングをC++可能にしようとしたことある?
bstring test = bformat("I want %d ponies", count);
これをやろうとすると、ファイルもどきに書き込む継承だらけで泥のようにのろい<<の山、、になる。

C++の間違いは文字列のフォーマッティングを型で安全にしようとしたことだ。printfようような「format string」は簡単で安全なんでそれを使えばいいだろ。C++だとfloatをintにキャストするんでも変なテンプレートシンタックスを使わなきゃいけない、、

constに対する奇妙な思い入れ

「const *const char &」のようにconstをちりばめて、あれもこれもconstにして、地獄までconstして戻ってきても結局、(ポインタが)incrementできちゃう。こんなことなら「doesnotfuckingchange」というキーワードを導入した方がマシだ。
Zedのrant、健在なり。

さらに諸々の問題

  • テンプレートなどによりコードがジワジワと.hに入ってくる
  • ただPOSIXのC関数を使いたいだけなのに面倒なことをしなければならない
  • ABIの問題
  • エラーメッセージが酷い

「boostを使えばいいじゃない」に対して

(ここまでくるとちょっと意味不明のrantになっている)

2000年の黒死病(テンプレート流行)を忘れてはいけない。テンプレート使って二つの数字をたすのに脳味噌を焼いた。だったらまだLISPを使った方がマシだ、、
Zedがboostを嫌う理由は: デカい、ビルトするのに時間がかかる、プラットフォーム間でバージョンの相違よくある、、などのようだ。

どうぞC++でも何でも使ってください

俺はCをよく知っているのでmongrel2をCで書いた。貴方の好きな言語で書けばいい。
mongrel2は言語ニュートラルなのでウェブアプリケーションC++なりなん何なりで書いてくださいよ、ってことらしい。

お、もしかしてこのポストをホスティングしている「librelist.com」ってのは
Zedのメール処理フレームワーク「lamson」で彼自身が製作管理しているメーリングリストサーバじゃないか?