T1#research
C++ 商用リリース ── Bjarne Stroustrup

メタデータ
- 日付
- 年代
- 1980s
- Tier
- T1
- 参照年表
- プログラミング言語の歴史
- 出典数
- 04
- 関連項目
- 08
- Tags
- #research
C++ は、Bjarne Stroustrup が AT&T Bell 研究所 で設計したプログラミング言語である。作業が始まったのは 1979年、最初の名は C with Classes だった。1983年 に C++ と命名され、1985年10月、最初の商用実装が Stroustrup の著書『The C++ Programming Language』初版と同時に出た。最初の ISO 規格は1998年の C++98 である。
「C++ はいつ作られたか」には、このように三つの答えがある。Stroustrup 自身が1993年に ACM の言語史会議(HOPL-II)に書いた『A History of C++: 1979-1991』と、彼のサイトの FAQ をもとに、その間に何があったかを追う。
| 時期 | 出来事 |
|---|---|
| 1979年4月 | Bell 研究所で作業開始 |
| 1979年10月 | Simula 風のクラスを C に加えるプリプロセッサ Cpre が動く |
| 1980年3月 | Cpre が実プロジェクト1件と実験に使われ、16のシステムで稼働 |
| 1982年春〜1983年夏 | 本格的なコンパイラ Cfront を設計・実装 |
| 1983年8月 | 最初の版が AT&T 社内で使われ始める |
| 1983年12月 | C++ の名が文書に初めて登場 |
| 1985年10月 | 最初の商用実装(Cfront 1.0)と『The C++ Programming Language』初版 |
| 1989年6月 | Cfront 2.0、多重継承を導入 |
| 1998年 | 最初の ISO 規格 C++98 |
前史 ── ケンブリッジでの Simula と BCPL
C++ の設計基準は、Stroustrup がケンブリッジ大学で博士研究をしていた時期に形作られた。分散システム向けのソフトウェア構成を研究するため、彼は大きなシミュレータを書いた。最初は Simula で、IBM 360/165 の上でである。
Simula のクラスは、問題の概念をそのまま言語の構造に写すことができ、型検査は設計上の誤りまで拾ってくれた。プログラムが大きくなるほど言語の仕組みが役に立つことに、Stroustrup は驚いたと書いている。ところが実装は大規模なプログラムに向いていなかった。分割コンパイルとリンクに時間がかかり、実行は遅く、計測では実行時間の80%以上がガベージコレクタに費やされていた。シミュレートしている系の中では、ゴミは一つも出ていなかったにもかかわらずである。
計画を救うため、彼はシミュレータを BCPL で書き直した。BCPL は C がとても高水準な言語に見えるほど低水準で、型検査も実行時の支援も無い。書くのもデバッグするのも苦痛だったが、出来たシミュレータは十分に速く、研究の成果を出した。ケンブリッジを去るとき、彼は二度とこれほど不向きな道具で問題に取り組まないと誓ったという。
そこから彼が描いた「良い道具」の条件は三つあった。
| 条件 | 中身 |
|---|---|
| Simula のようなプログラム構成 | クラス、クラス階層、並行性の支援、クラスに基づく静的な型検査 |
| BCPL のような速さと単純さ | BCPL 並みに速く動き、別々にコンパイルした部品を簡単につなげる |
| 高い移植性 | 複雑な実行時支援を持たず、ホストの OS との結合を最小限にする |
1979年 ── C with Classes
Stroustrup によれば、後に C++ になる作業は1979年4月、ニュージャージー州マレーヒルの Bell 研究所計算機科学研究センターで始まった。UNIX カーネルをローカルネットワークでつないだ複数の計算機にどこまで分散できるかを調べる研究で、カーネルのモジュール構造と通信の様子を表す道具が要った。まさに、もう二度と道具なしでは取り組まないと決めた種類の問題だった。
1979年10月には、C に Simula 風のクラスを加えるプリプロセッサ Cpre が動いていた。それが受け付ける言語が C with Classes である。1980年3月には実プロジェクト1件といくつかの実験を支え、16のシステムで使われていた。重要な判断が一つあった。並行性の支援が主な目的の一つだったにもかかわらず、言語に並行処理の基本命令は入れなかった。代わりに、継承とクラスの仕組みを使ってライブラリとして並行処理を書けるようにした。並行性のモデルは一つではないからである。C with Classes が特定の用途向けの方言ではなく汎用言語になったのは、この選択による。
1982〜83年 ── Cfront と C++ の名
1982年、Stroustrup は C with Classes を、自分と開発者を養うには足りるが、支援組織を養えるほどには魅力がない、中程度の成功だと見なした。出口は二つしかなかった。使うのをやめてもらうか、もっと良い言語を作って十分な数の利用者を集めるか。彼は後者を選び、見積もった最低限の数は産業界の利用者5,000人だった。
1982年春から1983年夏にかけて、彼は従来型のコンパイラ技術で後継言語の処理系 Cfront を設計・実装した。構文と意味を完全に検査し、内部表現を組み立ててからコード生成器向けの出力を出す、伝統的なコンパイラのフロントエンドである。計算機科学研究センターの外で最初の利用者になった、イリノイ州ネーパービルの Bell 研究所の Jim Coplien は、1983年7月にそれを受け取った。
後継言語は、上司の求めで一時 C84 と呼ばれた。人々が C with Classes を「new C」と呼び、やがて単に「C」と呼ぶようになって、本来の C が「plain C」や「old C」と呼ばれ始めたからである。C84 はぎこちないうえに混乱も残るので、数か月で使われなくなった。Stroustrup が新しい名を募って選んだのが、Rick Mascitti の提案した C++ である。++ は C のインクリメント演算子で、C から発展した言語であることを表す。名は1983年夏に生まれ、同年12月に論文の最終稿へ書き込まれたのが初出だった。
1985年10月 ── 最初の商用実装
Stroustrup の FAQ によれば、C++ の最初の版は1983年8月に AT&T 社内で使われ始め、最初の商用実装は1985年10月、『The C++ Programming Language』初版の刊行と同時に出た。Cfront の版番号で言えばこれが Release 1.0 で、言語はその本が定義したものだった。
1.0 の C++ に残った外部の影響は、Stroustrup の整理では限られている。Simula からクラス、Algol 68 から演算子の多重定義と参照と、ブロック内のどこでも変数を宣言できること、BCPL から // コメント。Modula-2・Ada・Smalltalk・Mesa・Clu も検討したが、目立った痕跡は残らなかった。C との互換は大きな論点で、最終的に、ANSI C との間に不必要な非互換は作らないという合意に落ち着いた。
最も大きな影響を持った機能は、Simula から借りた 仮想関数 だった。C with Classes の時代には入れていない。人々に使い方を教えられるか、仮想関数が時間的にも空間的にも普通の関数と同じくらい効率的だと納得してもらえるか、自信がなかったからだという。
その後の版と標準化
Cfront は版を重ねた。1.1(1986年6月)と 1.2(1987年2月)は主に不具合修正で、2.0(1989年6月)で多重継承が入り、3.0(1991年9月)でテンプレートが加わった。Margaret Ellis と書いた『The Annotated C++ Reference Manual』(1990年)が正式な標準化の出発点になり、Stroustrup は言語仕様の管理を1990年初めに ANSI の C++ 委員会へ引き渡した。最初の ISO 規格は1998年の C++98 である。
オブジェクト指向 の考え方と 型システム については用語集に、C++ と同時代の言語の位置は プログラミング言語の年表 にある。Simula のクラスを生んだのは Ole-Johan Dahl と Kristen Nygaard、C を生んだのは Dennis Ritchie である。
よくある質問
- C++ は何年に作られたのですか。
- 答えは三つに分かれます。Bjarne Stroustrup が AT&T Bell 研究所で作業を始めたのが1979年(最初の名は C with Classes)、C++ という名が付いたのが1983年、最初の商用実装が出たのが1985年10月です。
- C++ という名前の由来は何ですか。
- Rick Mascitti の提案で、1983年夏に考案され、同年12月に論文の最終稿へ書き込まれたのが初出です。++ は C のインクリメント演算子で、C からの発展的な変更であることを示します。Stroustrup は、短く、良い解釈ができ、形容詞+C の形でないことを理由に選んだと書いています。
- C++ はなぜ作られたのですか。
- Stroustrup は Simula 67 が促す書き方で効率の良いシステムプログラムを書きたかったと説明しています。ケンブリッジ大学の博士研究で、Simula のクラスは設計を助けたものの実装が遅く、BCPL は速いが書きにくかった。その両方の長所を持つ道具を求めて、C に型検査・データ抽象・オブジェクト指向の仕組みを加えました。
- C++ の最初の ISO 規格はいつですか。
- 最初の ISO 規格は1998年の C++98(ISO/IEC 14882)です。それに先立ち、Stroustrup は言語仕様の管理を1990年初めに ANSI の C++ 委員会へ引き渡しています。
出典
一次資料Bjarne Stroustrup's FAQ — dates of C with Classes, the C++ name, and the first commercial release
1979年の開始、1983年8月の社内利用、名の由来と初出、1985年10月の商用実装、C++98
一次資料Stroustrup, B. (1993). A History of C++: 1979-1991. ACM HOPL-II
ケンブリッジでの Simula と BCPL の経験、1979年4月の開始と10月の Cpre、Cfront、C84 の名、Cfront のリリース履歴、ANSI への引き渡し
三次資料C++ — Wikipedia
最終更新: