C++ の歴史
目次 |
[編集] 初期の C++
- 1979年 最初の C with Classes が実装される。
- 新しい機能: クラス、メンバ関数、派生クラス、分割コンパイル、public および private アクセス制御、friend、関数引数の型チェック、デフォルト引数、インライン関数、代入演算子のオーバーロード、コンストラクタ、デストラクタ、f(void) と同じ f()、呼び出し関数および戻り関数 (C++ にはない同期機能)。
- ライブラリ: 並行処理ライブラリ (C++ にはない)。
- 1982年 C with Classes のリファレンスマニュアルが発行される。
- 1984年 C84 が実装され、リファレンスマニュアルが発行される。
- 1985年 Cfront 1.0
- 新しい機能: 仮想関数、関数および演算子のオーバーロード、参照、new および delete 演算子、const キーワード、スコープ解決演算子。
- ライブラリの追加: complex、string、iostream。
- 1985年 プログラミング言語 C++ 第1版
- 1986年 多重継承、例外処理、テンプレートなどの残されている設計目標を記述した "whatis?" 文書。
- 1987年 GCC 1.15.3 の C++ サポート。
- 1989年 Cfront 2.0
- 新しい機能: 多重継承、メンバへのポインタ、protected アクセス、型安全なリンケージ、抽象クラス、static および const メンバ関数、クラス固有の new および delete。
- ライブラリの追加: 入出力マニピュレータ。
- 1990年 注解 C++ リファレンスマニュアル
この本は、まだ実装されていないいくつかの機能を含めて、設計の観点から言語を説明しました。 ISO までの事実上の標準としての役割を果たしました。
- 1991年 Cfront 3.0
- 1991年 プログラミング言語 C++ 第2版
[編集] 標準 C++
- 1990年 ANSI C++ 委員会が設立される。
- 1991年 ISO C++ 委員会が設立される。
- 1992年 C++ で STL が実装される。
- 1998年
C++98
(ISO/IEC 14882:1998)
- 新しい機能: RTTI (dynamic_cast、typeid)、共変戻り値型、キャスト演算子、mutable、bool、条件式内の宣言、テンプレートの実体化、メンバテンプレート、export。
- ライブラリの追加: ロケール、bitset、valarray、auto_ptr、テンプレート化された string、iostream および complex。
- STL をベースに: コンテナ、アルゴリズム、イテレータ、関数オブジェクト。
- 1998年 プログラミング言語 C++ 第3版
- 1999年 標準のための新しい高品質なライブラリの候補を生み出すために、委員会のメンバによって boost が設立される。
- 2003年
C++03
(ISO/IEC 14882:2003)
これは、正誤票より少し多くのことが意図された、マイナーな改訂でした。
- 新しい機能: 値初期化。
- 2006年 パフォーマンス TR (ISO/IEC TR 18015:2006) (ISO Store) (2006 draft)
この TR は様々な C++ の抽象化のコストを議論し、実装のガイダンスを提供し、組込みシステムにおける C++ の使用を議論し、 C の ISO/IEC TR 18037:2008 <iohw.h>
に対するインタフェース <hardware>
を導入しました。
- 2007年 ライブラリ拡張 TR1 (ISO/IEC TR 19768:2007) (ISO store) (2005 draft)
この TR は、 C++ 標準ライブラリに以下のものを追加する、 C++ ライブラリの拡張です。
- boost から: 参照ラッパー、スマートポインタ、メンバ関数アダプタ、result_of、バインダ、関数オブジェクトラッパー、型特性、乱数、数学の特殊関数、タプル、配列ラッパー、非順序コンテナ (ハッシュを含む)、正規表現。
- C99 から: C99 で新たに追加された <math.h> の数学関数、ブランク文字分類、浮動小数点環境、16進浮動小数点入出力マニピュレータ、固定サイズの整数型、long long 型、va_copy、snprintf() および vfscanf() ファミリーの関数、printf() および scanf() ファミリーの関数のための C99 の変換指定子。
特殊関数を除く TR1 のすべてのものは、若干の変更を加えて、 C++11 に含まれました。
- 2010年 数学の特殊関数 (ISO/IEC 29124:2010) (ISO Store) (2010 draft)
この国際標準は、 TR1 の一部であったけれども C++11 に含まれなかった特殊関数 (楕円積分、指数積分、ラゲール多項式、ルジャンドル多項式、エルミート多項式、ベッセル関数、ノイマン関数、ベータ関数、リーマンゼータ関数) を追加する、 C++11 標準ライブラリの拡張です。 この標準は C++17 にマージされました。
- 2011年
C++11
(ISO/IEC 14882:2011) (ISO Store) (Post-publication draft)
C++ プログラマが利用可能な抽象化の向上と既存の慣習の標準化の両方のために、多数の変更が導入されました。
- 2011年 10進浮動小数点 TR (ISO/IEC TR 24733:2011) (ISO Store) (2009 draft)
この TR は浮動小数点算術に対する IEEE 754-2008 標準の10進浮動小数点型 std::decimal::decimal32、std::decimal::decimal64、std::decimal::decimal128 を実装します。
- 2012年 The Standard C++ Foundation が設立される。
- 2013年 プログラミング言語 C++ 第4版
- 2014年
C++14
(ISO Store) (ANSI Store) (2014 final draft)
C++ 標準のマイナーな改訂。
- 2015年 ファイルシステムライブラリ TS (ISO/IEC TS 18822:2015) (ISO Store) (2014 draft)
この TS は boost.filesystem V3 (にいくつかの変更と拡張を加えたもの) をベースとしたファイルシステムライブラリを規定する実験的な C++ ライブラリの拡張です。 この TS は C++17 にマージされました。
- 2015年 並列処理のための拡張 TS (ISO/IEC TS 19570:2015) (ISO Store) (2015 draft)
この TS はすべての標準ライブラリのアルゴリズムに対する並列化およびベクトル化 API を標準化し、reduce
、transform_reduce
、exclusive_scan
といった新しいアルゴリズムを追加します。 この TS は C++17 にマージされました。
- 2015年 トランザクショナルメモリのための拡張 TS (ISO/IEC TS 19841:2015) (ISO Store) (2015 draft)
この TS はトランザクショナルメモリの意味論を実装する同期化ブロック、アトミックブロックおよびトランザクションセーフな関数で C++ のコア言語を拡張します。
- 2015年 ライブラリの基礎のための拡張 TS (ISO/IEC TS 19568:2015) (ISO Store) (2015 draft)
この TS はいくつかの新しいコンポーネント (optional、any、string_view、sample、search、apply、多相アロケータおよび型特性に対する変数テンプレート) を C++ 標準ライブラリに追加します。 この TS は C++17 にマージされました。
- 2015年 コンセプトのための拡張 TS (ISO/IEC TS 19217:2015) (ISO Store) (2015 draft)
この TS は、メタプログラミングを補助し、テンプレート実体化の診断を単純化する、コンセプト (名前付きの型要件) および制約 (テンプレート、関数および変数の宣言において使用できる型の制限) で C++ のコア言語を拡張します。 コンセプトを参照してください。 この TS は、一部を切り捨てて、 C++20 にマージされました。
- 2016年 並行処理のための拡張 TS (ISO/IEC TS 19571:2016) (ISO Store) (2015 draft)
この TS は std::future に対するいくつかの拡張、ラッチおよびバリア、およびアトミックなスマートポインタを含めるために C++ ライブラリを拡張します。
- 2017年
C++17
(ISO Store) (ANSI Store) (n4659 (2017-03-21 final draft))
C++11 後の C++ 標準のメジャーな改訂。
- 2017年 範囲のための拡張 TS (ISO/IEC TS 21425:2017) (ISO Store) (2017 draft)
この TS は範囲 (新しい、よりパワフルな、イテレータの組を置き換える抽象化) および範囲ビュー、番兵範囲、オンザフライ変換のための射影、新しいイテレータアダプタおよびアルゴリズムを含めるために、 C++ ライブラリを拡張します。 この拡張は最終的に sort(v); でベクタをソートできるようにします。
- 2017年 コルーチンのための拡張 TS (ISO/IEC TS 22277:2017) (ISO Store) (2017 draft)
この TS はスタックレスコルーチン (再開可能な関数) を含めるために C++ のコア言語と標準ライブラリを拡張します。 キーワード co_await、co_yield および co_return を追加します。
- 2018年 ネットワーク処理のための拡張 TS (ISO/IEC TS 19216:2018) (ISO Store) (2017 draft)
この TS は boost.asio をベースとした TCP/IP ネットワーク処理を含めるために C++ ライブラリを拡張します。
- 2018年 モジュールのための拡張 TS (ISO/IEC TS 21544:2018) (ISO Store) (2018 draft)
この TS はモジュールを含めるために C++ コア言語を拡張します。 キーワード module、 import が追加され、キーワード export が新しい意味で再導入されます。
この TS は2つの実行ポリシー (unseq および vec)、追加の並列アルゴリズム (reduction_plus や for_loop_strided など)、並列タスクの fork と join のためのタスクブロック、SIMD 型およびそれらの型に対する演算を含めるために C++ ライブラリを拡張します。
- 2020
C++20
(n4860 (2020-03-31 final draft))
C++17 後の C++ 標準のメジャーな改訂。
[編集] 今後の動向
[編集] 関連項目
C の歴史 の C言語リファレンス
|