Stroustrup(以下「S」): 実はあなたがここへ来る直前、当時のことを思い出していたんだ。おぼえているかな。誰もが C 言語を使っていたけど、問題はみんな結構うまくコーディングしていたことだった。大学も C 言語を教えるのがうまくなっていたしね。驚異的な割合で有能な——「有能」という言葉は強調しておきたい——卒業生を量産していた。それが問題の原因だったんだ。
S: 使えそうなんだけどね。実行ファイルがあまりに巨大だったんで、128MB の RAM を積んだ HP のワークステーションで読み込みに5分かかったんだ。読み込んだら、今度は死ぬほど遅い。実を言うと、これで策略は失敗するんじゃないか、1週間で化けの皮がはがれるんじゃないかと心配したんだけど、誰もそんなことを気にしなかったんだね。びっくりするほど強力なマシンを Sun や HP が喜んで売ってくれて、その莫大なリソースを使って大したこともないようなプログラムを実行する、というわけだ。AT&T で C++ コンパイラを初めて作ったとき、Hello World をコンパイルしてみたんだけど、実行ファイルは信じられないようなサイズだった。2.1MB だよ。
S: それ、本気で信じてるね。実際の C++ プロジェクトの経験はある?どうなるかって言うとね、まず第一に、いろいろワナを仕掛けてあるから、よほど小規模なプロジェクト以外は一発では動かないようになっているんだ。たとえば演算子のオーバーロードがそうだ。たいていの場合、プロジェクトの終わり頃にはほとんどのモジュールで演算子をオーバーロードしている。プログラマの連中が、トレーニングコースで教わったとおりにやらなくちゃいけないと思うからだ。つまり、1つの演算子の持つ意味が、モジュールによってまったく異なることになる。モジュールの数が100かそこらあるときに、これをまとめあげようとしたらどうなると思う?データ隠蔽もあるね。モジュール間の連繋にどこかの会社が苦労しているなんて話を聞くと、笑いを抑えられないときがあるよ。「Synergistic」という言葉は、プロジェクト管理者の胸に刺さったナイフをグリグリ回すためだけに発明されたんじゃないかと思うな。
S: そうでもない。選択の自由は誰にでもある。こんなに話が膨らむとは思わなかったんだ。ま、いずれにしても、基本的に僕の策略は成功したんだ。C++ は今や消え去りかけているけど、でもプログラマの給料は高いままだ。特に、糞みたいな C++ コードをメンテナンスしなきゃならない哀れな連中はね。大規模な C++ モジュールなんて、自分で書いたのでない限りメンテナンスできないことは理解してる?
S: 平均的な C プロジェクトの長さをおぼえているかな。だいたい6ヵ月だ。家族を抱えた人間がまともな水準の暮らしを維持するには短すぎる。で、同じプロジェクトを C++ でやったらどうなる?教えてあげよう。1〜2年だ。素晴らしいね。たった1つの判断ミスで、安定した仕事が確保されるんだよ。それともう一つ。大学が C を教えなくなってからずいぶんたったから、最近ではまともな C プログラマが不足しているんだ。特に、Unix のシステムプログラミングのわかる人間がね。もうずっと new を使っているものだから、malloc をどう使っていいかわからないし、戻り値もチェックしないんだ。ほとんどの C++ プログラマは戻り値を捨ててしまうんだよ。昔懐かしい -1はどこへ行ったんだろうね。少なくともエラーが発生したことはわかったし、throw だの catch だの try だのに悩むこともなかったんだ。
I: でも、継承が時間の節約になるのは確かでしょ。
S: そうかな。C プロジェクトと C++ プロジェクトの計画立案の違いに気がついたことはある? C++ プロジェクトの方が、計画に3倍時間がかかるんだ。継承するべきものはして、そうでないものは継承しないようにするために、それだけの時間をかけて調べる必要があるんだ。それでも間違う。C プログラムでメモリリークなんて聞いたことがあるだろうか。今では、メモリリークの発見が大産業になってしまった。全部見つけるのは費用がかかりすぎるから、たいていの会社はあきらめて、山ほどリークのあるプログラムを出荷してしまう。
I: ツールはあるけど…。
S: そのツールも、ほとんどは C++ で書かれているんだよ。
I: このインタビューを公表したら、あなたは多分リンチにあう。それはわかってるね?
S: どうかな。さっき言ったように、C++ は既にピークを過ぎているし、まともな会社ならテストプロジェクトもなしで C++ プロジェクトを開始したりはしない。テストをすれば、ひどい目にあいそうだということはわかるはずだ。わからないなら、ひどい目にあって然るべきなんだよ。実はね、昔 Dennis Ritchie に C++ で Unix を書き直さないかって持ちかけたことがあるんだ。
I: Oh my God。で、返事は?
S: 幸運なことに、彼はユーモアのセンスがあってね。彼にしても、Brian にしても、早い時期に僕のたくらみに気づいたと思うんだけど、でも誰にも言わなかったんだ。僕に興味があるなら C++ で DOS を書くのを手伝ってやるって言ってくれたよ。
I: 興味はあった?
S: C++ バージョンの DOS は実際に作ったんだ。終わったらデモをあげるよ。コンピュータ室の SPARC 20で動いてるよ。4 CPU だとウソみたいに速いし、ディスクも70MB しか食わないんだ。
S: ほらね。で、給料分の仕事はしているはずなんだ。僕が C++ に仕掛けたワナを全部おぼえておくのは並大抵のことではないんだよ。それに、さっきも言ったように、C++ プログラマというものはね、どういうわけか、どんなプロジェクトであろうと C++ のあらゆる要素を片っ端から使わなきゃいけないと信じ込んでいるんだ。実を言うと、時々頭に来ることもあるくらいだ——僕の本来の目的にはかなうことなんだけれどね。これだけ長くやってきたから、C++ を好きになりかけているんだ。
S: うーん。それについてはね、どうなのかなとずっと思っていたんだ。最初は C より優れていると思ったんだ。でもね、その後、C++ でプログラミングを始めたという人間と、このことについて話す機会があった。彼が言うには、変数を参照しているのか逆参照しているのかがいつもわからなくなる、だから必ずポインタを使う。アスタリスクが思い出させてくれるから、と言うんだ。