河野真治 @ 琉球大学情報工学です。

PL/Iの再来とか、C++はソフトウェア工学を10年後退させたとか、
まぁ、そんな言われ方をしてますが... 

http://tinyurl.com/2e38yw

が有名か...

もともとのCには、モジュールという概念がなく、大域変数をモジ
ュール化出来ないっていう欠点がある。static で、ファイルの中
に閉じ込めることは出来るんだけど。なので、そのあたりを改良
したものが欲しいってのはある。

C++ の同時期に、Objective C とか Cob とか、いろいろ提案され
てました。大学院時代の同僚も同じようなことしてました。AT&T 
Bell Lab をback ground に、ゴリ押し的に広まった。最初は、C+
+ からCへ変換する cfront とかいう実装だったはず。

Ojective C がSmalltalkを意識した実装になっているのに比べて、
「Cの構造体と、構造体経由の間接呼び出しを使った、簡易実装」
という感じになってます。なので、Cの構造体の欠点がそのまま残
っている。この程度だったら、自分で、構造体でオブジェクトを
作った方がいいと思う。

初期の有名なC++で実装されたアプリというと、InterViews とい
うGUI Toolkit と、それで実装された idraw ですね。このidraw 
が「C++ のversionがあがるたびに、動かなくなる」という技を出
す。いいソフトだったんだけどな。PostScript 自体がidrawのフ
ァイルフォーマットになっているという。k2d とかいう名前であ
るらしいが見つけられませんでした。

でも、C++ が、真のダメさ加減を発揮するのは、Template を採用
してからだと思う。制御不可能なほど、ものごとをこじれさせる
感じです。それまででも十分に複雑だったのに、さらに、Template
を覚えないといけないんですか? タイプ変数を導入できるので、
その部分は便利といえば便利なんだが... まぁ、マクロだと思え
ば、その場で展開されるというだけだとも言えるのだが。

   template<typename _Tp>
     complex<_Tp>&
     complex<_Tp>::operator/=(const _Tp& __t)
     {
        _M_real /= __t;
        _M_imag /= __t;
        return *this;
     }

このoperator overrideも「見た目通りに動かない」C++ と言う感
じを良く出してます。この中で bug ったりしたら、debug のやり
ようがないです。引数の型が異なると、異なる関数を呼び出す polymorphism
も C++ の場合は裏目にでていると思う。

Effective C++ は必須なんだけど、それを読んでも、なぁ...

自分で係わることは幸い少なかったんだが、C++ が噛んでいるプ
ロジェクトで幸せにはなれないと思う。Acsis C++ の時は、逃げ
てしまいました。

継承とか、大域変数のモジュール化とかで使いたいことは使いた
いんだけど、

 ゴミで一杯の巨大な仕様

が、すべてをぶち壊しにしていると思う。Objective C が良くで
きていただけに、C++ が広まったのは残念です。

ま、今は、Java に逃げるという手があるから、まだまし。ってい
うか、今時、C++を使うのは、Windows な開発者だけだろ? 

---
Shinji KONO @ Information Engineering, University of the Ryukyus
河野真治 @ 琉球大学工学部情報工学科