article Related Topics:
C++ :: C++Builder
 

C++シープラスプラス)は、汎用プログラミング言語の一つである。静的な型システムを持ち、フリーフォームでの記述が可能で、手続き型プログラミングデータ抽象オブジェクト指向プログラミングジェネリックプログラミングといった複数のプログラミングパラダイムをサポートするマルチパラダイム言語である。1990年代以降、C++は、最もよく利用される商用のプログラミング言語のひとつとなっている。

C++は、1983年にベル研究所のBjarne Stroustrupが、C言語の拡張として開発した。当時の名前は「C with class」(クラス付きのC言語)というものであった。拡張はクラスの追加に始まり、仮想関数オーバーロード多重継承テンプレート例外処理といった機能が続いていった。C++言語の標準は1998年にISO/IEC 14882:1998として承認され、現在のバージョンは2003年に制定されたISO/IEC 14882:2003である。非公式にはC++0xと呼ばれている新しいバージョンが策定中である。

日本のプログラマの間では「シープラプラ」と呼ばれるが、これは日本以外では通用しない呼び方である。

歴史


StroustrupはC with Classesの開発を1979年に開始した。この新しい言語のアイデアは、彼が博士論文のために行ったプログラミングの経験に由来する。Stroustrupは大規模なソフトウェアの開発に非常に有用な特徴をSimulaが備えていることに気がついたが、Simulaは実行速度が遅く実用的でなかった。一方でBCPLは実行速度が速かったが低水準言語過ぎて大規模なソフトウェアの開発には向かなかった。Stroustrupがベル研究所で働き始めたとき、分散コンピューティングに関するUNIXカーネルの解析に問題を抱えていた。Stroustrupは博士号を取得したときの経験を思い出し、Simulaのような機能をC言語に入れる拡張に取り組み始めた。汎用かつ高速で移植性が高いため、C言語を選択した。C言語とSimulaのほかに彼に影響を与えた言語はALGOL 68とAda, CLU, MLであった。最初は、クラスと派生クラス、型検査機構の強化、インライン関数、デフォルト引数の機能を、Cfrontを介してC言語に追加した。1985年10月に最初の商用リリースがされた。*

1983年にC with ClassesからC++に名称を変更した。追加された新しい機能は、仮想関数と、関数と演算子のオーバーロード、参照型、const型、ユーザー制御可能な自由領域メモリ制御、より進んだ型検査機構、新しいコメント形式(//)であった。1985年には「The C++ Programming Language」の初版が出版された(日本語訳「プログラミング言語C++」の初版は1988年)。公式な標準がまだなかったため、この本がリファレンスとなった。1989年には、C++の2.0がリリースされた。新しい機能には、多重継承と抽象クラススタティックメンバ関数、constメンバ関数、protectedメンバが含まれた。1990年に「The Annotated C++ Reference Manual」(通称ARM)が出版され、将来の標準の土台を提供した。後に追加された機能にはテンプレートと例外処理、名前空間、新しい形式のキャストブール型が含まれた。

C++言語の進化に伴い、標準ライブラリもまた進化していった。C++標準ライブラリに最初に追加されたのは、従来のC言語のprintfやscanfといった関数を置き換えるしくみを提供する、ストリームI/Oライブラリであった。それ以降の標準ライブラリへの追加で最も重要なものはStandard Template Library(STL)である。

長年にわたる作業の後、ANSIとISOの合同委員会はC++言語を1998年に標準化した(ISO/IEC 14882:1998)。1998年の標準の公式なリリースから数年間に渡って委員会は不具合の報告を続け、2003年に訂正版を出版した。2005年に「Library Technical Report 1」(TR1)というテクニカルレポートがリリースされた。これは標準の公式な一部ではないが、次のバージョンのC++に含まれると期待される、標準ライブラリへの数多くの拡張を与えている。現在メンテナンスされているC++コンパイラの大部分が、TR1のサポートに取り組んでいる。

2003年12月に制定された日本工業規格 JIS X 3014:2003 (プログラム言語 C++)は、ISO/IEC 14882:2003(E)の翻訳である。

C++言語は誰の所有物でもなく、実際ロイヤリティフリーである。しかし標準文書自体は無償提供されていない。ただし、JIS X 3014:2003はJISCのWebサイトから閲覧のみは無償である。

C++という名称

この名称はRick Mascittiの功績で、最初に使用されたのは1983年の12月である。初期の研究期間では、開発中の言語は「C with Classes」と呼ばれていた。最終名は、変数の値を1つ加算する、C言語の「++」演算子からの派生である。また一般的な命名規則での「+」の使用は、機能強化されたコンピュータプログラムを意味する。Stroustrupによれば「この名前は、C言語からの変更の革新的な本質を示している」ということである。C+は、より初期の無関係なプログラミング言語の名前であった。

Stroustrupは著書「The C++ Programming Language」の前文で名前の起源を語り、ジョージ・オーウェルの「1984年」の付録から「C++」が連想されるかもしれないと付け加えている。新語法という架空の言語の解説に宛てられた3つの章の中に、科学技術に関する専門用語とジャーゴンの解説に宛てられた「C vocabulary」という章がある。新語法で「ダブルプラス」は最上級の修飾語である。ゆえに新語法で「C++」は「最も極端な専門用語またはジャーゴン」という意味になるであろう。

1992年、Rick Mascittiは名前について非公式に質問されると、彼はおふざけのつもりで命名したという旨の回答をした。彼はこの言語の正式な名称になるとは夢にも思わなかったのである。

古くからの問題

伝統的にC++コンパイラには多岐に渡る問題点がある。C++言語の標準では、名前修飾や例外処理の実装や、その他の実装依存の機能については規定しておらず、異なるコンパイラが生成するオブジェクトコードには互換性がない。しかし、C++言語の標準化とは別に、特定の機種やOS上で動作するコンパイラを標準化する試みがある(例:C++ ABI)。このような機能のために、現在では多くのコンパイラが第二の標準に対応している。

長年にわたって、異なるC++のコンパイラはC++言語を異なるレベルの遵守性を持って実装してきて、それらの実装はテンプレートの部分的特殊化のようにさまざまな領域に広がっていた。最近のほとんどのC++のコンパイラは標準C++ 1998のほとんどの機能をサポートしている。論点の1つは 、テンプレートの宣言から離れてテンプレートを宣言することを許すexportというキーワードである。最初にexportを実装したコンパイラは2003年初め(規格の発表の5年後)にリリースされたComeau C++であった。続いて2004年Borland C++ Builder Xのベータ版のコンパイラがやはりexportを実装してリリースされた。これらどちらのコンパイラもEDG C++フロントエンドに基づいていた。多くのC++の本(例えばイヴァン・ホートンのBeginning ANSI C++)がコンパイルされないだろうが、exportというキーワードに関する問題への参照がなかったexportというキーワードを実装したコードの例を提供したということも心に留めておくべきである。Microsoft Visual C++GCCのようなコンパイラははまったくそれをサポートしていない。C++標準化委員会の書記官ハーブ・サッターは、exportは将来のC++の標準から除かれるべきである( *)と勧めていたが、結局結論はそれをC++の標準に残すというものに達した。

将来の開発

(翻訳中)

(以下は旧コンテンツ)

1979年ビャーネ・ストロヴストルップ (Bjarne Stroustrup) によって考案された。初めはC with Classesと呼ばれていたが、1983年C++という名前になった。C言語では変数に1を加えるのを++と書くことができ、C++という名前にはCを発展させたものという意味がある。記号を含まないCPPというアクロニムも提案されたが、Cプリプロセッサの略記Cppと紛らわしいため却下された。

1990年にはThe Annotated Reference Manual(ARM)が出版された。これはC++の言語仕様を記した本であり、ISOで国際規格が制定されるまではこれがC++の仕様の拠り所とされ広く参考にされた。

1998年9月には国際規格 ISO/IEC 14882:1998(E) Programming Languages --- C++ が制定された。2003年10月には国際規格 ISO/IEC 14882:2003(E) が制定され、12月にはその翻訳として、日本工業規格 JIS X 3014:2003 (プログラム言語 C++)が制定された。

特徴


C言語に、オブジェクト指向プログラミングをサポートするための改良が加えられたものといえるが、他のオブジェクト指向を念頭において作られた言語と違い、旧来のCと同様に手続き型言語としても扱えるという特徴がある(このとき、C++をbetter Cというふうに呼ぶことがある)。また基本的にC言語に対して上位互換性がある。初期のC++はCへのトランスレータとして実装された(すなわち、C++プログラムを一旦Cプログラムに変換してからコンパイルしていた)。

その後、先祖であるC言語の標準規格制定時には、const修飾など、C++の機能がC言語に取り入れられることにもなった。現在ではC言語とC++との間には厳密な互換性はない。特にC99の出現により、C言語との互換性は完全に失われている。

次のような多種多様な機能を持っており、言語仕様は大変複雑である。言語仕様を完全に満たしているコンパイラは、現在数えるほどしかない。

ここから、よりオブジェクト指向を強化し、「なんでもあり」ではない代わりに分かりやすくスマートな設計を目指した新たな言語(Java言語D言語など)が作られることとなった。

単一行コメント

かつてC言語とC++との分かりやすい差異として、// で始まり改行で終わる、単一行コメントの有無があった。

単一行コメントはもともと、C言語の祖先にあたるBCPLに含まれていた仕様である。現在のC++のコンパイラの多くがC言語のコンパイラとしても使えるようになっているのと同様に、C言語が生まれて間もない頃は、C言語に加えB言語やBCPLのコンパイルができるコンパイラが用いられていた。それらコンパイラは、C言語のソースであってもBCPLと同様に単一行コメントが使用できるよう独自の拡張がなされていたため、BCPLの単一行コメントに慣れ親しんでいだプログラマ達は、C言語でも単一行コメントを使い続けた。その慣習がC++の誕生時まで生き残っていたため、C++では単一行コメントを「復活」させることになったのである。

そのためもあって、C言語での仕様外の単一行コメントの使用は半ば常習と化し、現在ではC99によって、C言語でも正式に単一行コメントがサポートされるようになった。

標準ライブラリ


C++の標準ライブラリは大きく次のように分けられる。多種多様な実行環境が存在することを考慮してか、スレッドGUIに関するライブラリは標準に含まれていない。
  • 入出力
  • 文字列
  • 現地化(ロケール)
  • 数値演算
  • STL
  • その他(例外クラスや日付と時刻の処理など)

C++では、C言語には存在しなかった、スタック動的配列などのデータ構造を表現するライブラリが存在する。 その標準ライブラリの中でも特にコンテナイテレータアルゴリズムを表現するものをSTLと呼ぶ。STLでは、C++のテンプレート機能と相まって、非常に強力で汎用的なデータ操作を行える。

外部ライブラリ


以下に、C++で有名と思われるライブラリを挙げる。
  • Boost 次期C++標準とも言われる様々なライブラリの集合。 正規表現を扱うboost::regexや、無名関数を簡潔に記述できるboost::lambdaなどが有名。
  • Xerces C++での主要XMLパーサの一つ。Java版も存在する。
  • CppUnit C++でのユニットテストフレームワーク。 クラス毎の動作確認に威力を発揮する。

主なC++処理系


関連項目


プログラミング言語

C++ | C++ | سي++ | Си плюс плюс | C++ | C++ | C++ | C++ | C++ | C++ | C++ | C++ | C++ | C++ | سی‌پلاس‌پلاس | C++ | C++ | C++ | C++‎ | C++ | C++ | C++ | C++ | C++ | C++ | C++ | C++ | C++ | C++ | C++ | C++ | C++ | C++ | C++ | C++ | C++ | C++ | ภาษาซีพลัสพลัส | C++ | C++ | C++ | C++

 

This article is licensed under the GNU Free Documentation License. It uses material from the "C++".

Home Pageartsbusinesscomputersgameshealthhospitalshomekids & teensnewsphysiciansrecreationreferenceregionalscienceshoppingsocietysportsworld