Zedが何故mongrel2に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で実装した理由
テンプレート・メタプログラミング==黒死病
そんなZedがC++が嫌いになった原因は「2000年のテンプレート・メタプログラミングの大流行」。("Great Template Metaprogramming Plague of 2000") テンプレートの流行を黒死病に例えている。
C++はメモリ管理を簡単にはしてくれない
- ディストラクターの挙動はとても複雑。特に例外があると。
- 結局Cと同じようなチェックをしなけりゃいけない。balgrindを使ったり、、
- その上、例外やテンプレートがメモリ管理を複雑化している
- 結局、Cのメモリ管理の方が簡単
文字列サポートは「阿呆」
どんな言語にでもある、次のような簡単な文字列フォーマッティングをC++可能にしようとしたことある?
bstring test = bformat("I want %d ponies", count);
これをやろうとすると、ファイルもどきに書き込む継承だらけで泥のようにのろい<<の山、、になる。
bstring test = bformat("I want %d ponies", count);
これをやろうとすると、ファイルもどきに書き込む継承だらけで泥のようにのろい<<の山、、になる。
constに対する奇妙な思い入れ
「const *const char &」のようにconstをちりばめて、あれもこれもconstにして、地獄までconstして戻ってきても結局、(ポインタが)incrementできちゃう。こんなことなら「doesnotfuckingchange」というキーワードを導入した方がマシだ。
Zedのrant、健在なり。
さらに諸々の問題
- テンプレートなどによりコードがジワジワと.hに入ってくる
- ただPOSIXのC関数を使いたいだけなのに面倒なことをしなければならない
- ABIの問題
- エラーメッセージが酷い
「boostを使えばいいじゃない」に対して
(ここまでくるとちょっと意味不明のrantになっている)
Zedがboostを嫌う理由は: デカい、ビルトするのに時間がかかる、プラットフォーム間でバージョンの相違よくある、、などのようだ。