C++の歴史
目次 |
[編集] 初期のC++
- 1979年: C with Classesが最初に実装される
- 新機能: クラス、メンバ関数、派生クラス、個別コンパイル、publicおよびprivateアクセス制御、フレンド、関数引数の型チェック、デフォルト引数、インライン関数、オーバーロードされた代入演算子、コンストラクタ、デストラクタ、f() は f(void) と同じ、call-functionとreturn-function(同期機能、C++にはない)
- ライブラリ: 並行タスクライブラリ(C++にはない)
- 1982年: C with Classesのリファレンスマニュアルが発行される
- 1984年: C84が実装され、リファレンスマニュアルが発行される
- 1985年: Cfront 1.0
- 新機能: 仮想関数、関数および演算子オーバーロード、参照、newおよびdelete演算子、キーワード
const、スコープ解決演算子 - ライブラリ追加: 複素数、
string(AT&T版)、I/Oストリーム
- 1985年: The C++ Programming Language, 第1版
- 1986年: 多重継承、例外処理、テンプレートなど、残りの設計目標を文書化した「whatis?」論文。
- 1987年: GCC 1.15.3におけるC++サポート
- 1989年: Cfront 2.0
- 新機能: 多重継承、メンバへのポインタ、protectedアクセス、型安全リンケージ、抽象クラス、staticおよびconst修飾メンバ関数、クラス固有のnewおよびdelete
- ライブラリ追加: I/Oマニピュレータ
- 1990年: The Annotated C++ Reference Manual
この本は、まだ実装されていない機能も含め、設計された言語を記述していた。ISO標準化まで事実上の標準として機能した。
- 1991年: Cfront 3.0
- 1991年: The C++ Programming Language, 第2版
[編集] 標準C++
- 1990年: ANSI C++委員会設立
- 1991年: ISO C++委員会設立
- 1992年: STLがC++で実装される
[編集] C++98/03期間
- 1998年: C++98 (ISO/IEC 14882:1998)
- 新機能: RTTI (
dynamic_cast,typeid)、共変戻り値型、キャスト演算子、mutable、bool、条件内の宣言、テンプレートインスタンス化、メンバテンプレート、export - ライブラリ追加: ロケール、bitset、valarray、auto_ptr、テンプレート化された文字列、I/Oストリーム、および複素数。
- STLに基づく: コンテナ、アルゴリズム、イテレータ、関数オブジェクト
- 1998年: The C++ Programming Language, 第3版
- 1999年: 委員会のメンバーによって、標準用の新しい高品質な候補ライブラリを開発するためにBoostが設立される。
- 2003年: C++03 (ISO/IEC 14882:2003)
これは小さな改訂で、技術的な正誤表とほとんど変わらないことを意図していた。この改訂では値初期化の定義が導入された。
このTRは、様々なC++抽象化のコストについて議論し、実装ガイダンスを提供し、組み込みシステムにおけるC++の使用について議論し、CのISO/IEC TR 18037:2008 <iohw.h>への<hardware>インターフェースを導入した。
このTRはC++ライブラリ拡張であり、C++標準ライブラリに以下を追加する。
- Boostから: reference_wrapper、スマートポインタ、メンバ関数、result_of、bind、function、型特性、乱数、特殊数学関数、tuple、array、非順序連想コンテナ(hashを含む)、および正規表現。
- C99から: C99で新しく追加された
<math.h>からの数学関数、空白文字クラス、浮動小数点環境、hexfloat I/Oマニピュレータ、固定サイズ整数型、long long型、va_copy、snprintf()およびvfscanf()関数群、およびprintf()およびscanf()関数群のC99変換指定子。
特殊関数を除くTR1のすべては、いくつかの小さな変更を加えてC++11に含まれた。
この国際標準はC++標準ライブラリ拡張であり、TR1の一部であったがC++11には含まれなかった特殊関数を追加する。楕円積分、指数積分、ラゲール多項式、ルジャンドル多項式、エルミート多項式、ベッセル関数、ノイマン関数、ベータ関数、リーマンゼータ関数。この標準はC++17に統合された。
[編集] C++11期間
- 2011年: C++11 (ISO/IEC 14882:2011) (ISOストア) (2012年発行後ドラフト)。
既存の慣行を標準化し、C++プログラマが利用できる抽象化を改善するために、多数の変更が導入された。
このTRは、IEEE 754-2008 Standard for Floating-Point Arithmeticからの10進浮動小数点型であるstd::decimal::decimal32、std::decimal::decimal64、std::decimal::decimal128を実装する。
- 2012年: The Standard C++ Foundation設立
- 2013年: The C++ Programming Language, 第4版
[編集] C++14期間
- 2014年: C++14 (ISOストア) (ANSIストア) (2014年最終ドラフト)
C++標準のマイナー改訂
このTSは、boost.filesystem V3(一部変更および拡張あり)に基づくファイルシステムライブラリを指定する実験的なC++ライブラリ拡張である。このTSはC++17に統合された。
このTSは、すべての標準ライブラリアルゴリズムに対して並列およびベクトル並列APIを標準化し、reduce、transform_reduce、またはexclusive_scanのような新しいアルゴリズムも追加する。このTSはC++17に統合された。
このTSは、同期ブロックとアトミックブロック、およびトランザクションメモリセマンティクスを実装するトランザクションセーフ関数でC++コア言語を拡張する。
このTSは、C++標準ライブラリにいくつかの新しいコンポーネントを追加する。optional、any、string_view、sample、search、apply、多態的アロケータ、および型特性のための変数テンプレート。このTSはC++17に統合された。
このTSは、C++コア言語をコンセプト(名前付き型要件)と制約(テンプレート、関数、変数宣言で許可される型の制限)で拡張し、メタプログラミングを支援し、テンプレートインスタンス化診断を簡素化する。詳細はコンセプトを参照。このTSは一部省略されてC++20に統合された。
このTSは、std::future、ラッチ、バリア、およびアトミックスマートポインタへのいくつかの拡張を含むようにC++ライブラリを拡張する。
[編集] C++17期間
- 2017年: C++17 (ISOストア) (ANSIストア) (n4659 2017-03-21 最終ドラフト)
C++11に続くC++標準の主要な改訂
このTSは、イテレータペアに代わる新しくより強力な抽象化であるレンジを、レンジビュー、センチネルレンジ、オンザフライ変換のためのプロジェクション、新しいイテレータアダプタとアルゴリズムとともに含むようにC++ライブラリを拡張する。この拡張により、最終的にsort(v);でベクトルをソートすることが可能になる。
このTSは、スタックレスコルーチン(再開可能な関数)を含むようにC++コア言語と標準ライブラリを拡張する。これにより、キーワードco_await、co_yield、およびco_returnが追加される。
このTSは、boost.asioに基づくTCP/IPネットワークを含むようにC++ライブラリを拡張する。
このTSは、モジュールを含むようにC++コア言語を拡張する。これにより、特殊識別子module、importが追加され、キーワードexportが新しい意味で再導入される。
このTSは、2つの新しい実行ポリシー(unseqおよびvec)、reduction_plusやfor_loop_stridedなどの追加の並列アルゴリズム、並列タスクのフォークとジョインのためのタスクブロック、SIMD型、およびそれらの型に対する操作を含むようにC++ライブラリを拡張する。
[編集] C++20期間
- 2020年: C++20 (ISOストア) (最終ドラフト n4860 2020-03-31)
C++17に続くC++標準の主要な改訂
このTSは、変数、列挙、クラスとそのメンバ、ラムダとそのキャプチャなど、プログラムエンティティを検査する機能でC++を拡張する。
[編集] 将来の開発
- 実験的技術仕様
- 2026年: C++ 最新ドラフト n5001 (2024-12-17)
C++標準の次期主要改訂
[編集] 関連項目
| Cの歴史についてはCのドキュメントを参照
|