C++の絵本を読んだ

C++の絵本---C++が好きになる9つの扉」(アンク著、翔泳社)を読んだ。継承のところで、子クラスの参照を親クラスのポインタに代入してなんたらかんたらすると、どうたらなんだけど、こうたらするとどうたら、というあたりとか、ややこしそう。まあC++ってわかりやすさとかシンプルさとか関係ないのかな。でも、メモリ管理とポインタに関してはCより不如意のエラー混入が少なそうな気がしたりもした。deleteとかデストラクタとかあるだけで、ずいぶん違うような気がするけど、Cハカーだと、そんなもんちゃんとスタイルを決めて書けばいいだけとか言うんだろうか。

「Masterminds of Programming」(Federico Biancuzzi/Shane Warden、O'Reilly)でJavaのジェームス・ゴスリング、C++のビャーネ・ストロヴストルップ、C#のアンダース・ヘルスバーグへのインタビューを読んでいて、やっぱりC++を、もうちょっと知りたいと思った。C++は嫌いだとか、C同様にバグ・セキュリティ上の問題を抱えまくってるとか言われることが多くて、実際JavaC#もBetter C++として出発してるというのがぼくの理解だけど、そのへんの経緯ももう少し知りたい。

ストロヴストルップはC++は誤解されてるフシがあると主張してる。パフォーマンスが重要なシステム関連のソフトウェアを書くのに適するようにCを拡張しただけで、そもそもOOだって、C++がサポートするパラダイムの1つでしかなく、C++はいろいろなプログラミングパラダイムをサポートするのが強みなんだとか。もともとベル研でCの開発者に囲まれていて、Cを拡張するのが自然だからそうしただけだし、RubyのようにOOのためにクリーンな設計をするとか、人間に優しい言語を作るのなんて関係なかった、と。

最近プログラミングコンテストというものを覗き見てみたら、C++を使ってる人がJavaと同じぐらい多い。で、どんなコードなんだろうなと思って覗いてみたら、何やらSTLvector型とかが便利そうな予感。実はSTLを使ってアルゴリズミックな問題に当たると、Cより数割遅いなんていうオーバーヘッドもあるようだけど、地道にデータ構造を自前で実装するより合理的なトレードオフになるようなケースは多いんじゃないかしら。それを言えば、Javaでいいじゃんてことかもしれないけど、毎回クラスとか面倒なときもあるだろうに、とか。

C++の(絵)本を読んでいて、そもそもCがよく分かってないよなあと思って、「Cリファレンス・マニュアル第5版」という本を買ってみた。そもそもCの本ってまともに読んだことなかったかも。

そういえば、Luaを実装した2人がC89の移植性の高さが組み込み分野でのLuaの成功のカギだったというようなことを言っている。C89からC99に移行することによるパフォーマンス上のメリットは微々たるものだから、C99にすることで失うものの方が多いんだということを言っている。そんなに違うのか。