C++
河野真治 @ 琉球大学情報工学です。
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
河野真治 @ 琉球大学工学部情報工学科
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735