世界 7 大不思議のひとつ: 人はなぜ C++ をまだ使っているのか?

by syoyo

(from steps to phantasien)

もう C++ なんて好きでもないし使いもしない理由。
http://www.hyuki.com/yukiwiki/wiki.cgi?WhyINoLongerLikeOrUseCPlusPlus

世の中やはり同じ境遇に陥っているひとはいるのですね.

何が起きたのか? 嫌気が差したんだ。C++ のどの面をとっても、その設計は性能と引き換えに私の生産性をうばった。もう一つうんざりなのは, リンカのエラー診断だ。ただライブラリをダウンロードして使うなんてことが決してできない。新しいライブラリを使うのに、自分でソースからビルドしないといけない。C++ にはコンパイル済コードをさっと使うための ABI がないからだ。コンパイラがアップグレードするたびに、私はアプリケーションとライブラリ全体を再コンパイルして、その中でいつも不可解なエラーを診断して数時間つぶした。ライブラリひとつのアップグレードでも更なるコンパイルと暗号的エラーに見舞われた。「より高い性能」という誓いが、私を冒しはじめた。誓い(コードの可読性は低いが)は守られ、C++ ABI 不在による保守の地獄には一切注意が払われなかった。私は気がついた。C++ の連中は性能に取り憑かれている。他の全てをなげうって。そして、私はもうそこで仕事をしないと決めたのだ。

個人的な経験から言わせてもらうと、C++ は性能も奪うし、生産性も奪う
生産性を奪うのは確かで、遥か昔私がまだ C++ のプログラムでグラフィックスのコードを書いていたとき、
今振り返ってみると, その 95% はベクトルクラスなどのどーでもいいのだけど、
無いと次に進めることができない基本クラスの作成と、
リンカエラーの対処(特に他ライブラリとの)に費やされ、
アルゴリズムのコード化はその残りの 5% くらいだったと思う。
それに C++ はデバッグもしずらしい。

「C++ は早い」というのはもはや幻想になりつつあると思う。
C++ で性能を引き出すには、よほどこう書くとこんなアセンブラコードが生成されると分かっていないといけない。
何も考えずにコーディングすると、ボトルネックな部分は仮想関数テーブル引きでした、ということもなきにしもあらず。
しかもどんなアセンブラコードになるかは、コンパイラ依存、ひえぇ〜〜〜。

大切なのはどうコードを書くか、ではなくて、いかに効率的にアルゴリズムをコードに変換して生産性を
向上させるか?だと思います。

そのような意味で、FFTW や Spiral などのアルゴリズム記述からの自動最適化コード生成や,
DSL などの生産性を上げるようなやり方が、これからは注目されてしかるべきじゃないかなぁと思っています。

Advertisements