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++ プログラマが利用可能な抽象化の向上と既存の慣習の標準化の両方のために、多数の変更が導入されました。
- 新しい言語機能: auto および decltype、デフォルト化された関数と削除された関数、final および override、戻り値型の後置、右辺値参照、ムーブ構築/ムーブ代入、スコープ付き列挙型、constexpr およびリテラル型、リスト初期化、委譲および継承コンストラクタ、波括弧または等号初期化子、nullptr、long long、char16_t および char32_t、型エイリアス、可変長引数テンプレート、一般化された共用体、一般化された POD、Unicode 文字列リテラル、ユーザ定義リテラル、属性、ラムダ式、noexcept、alignof および alignas、マルチスレッド化されたメモリモデル、スレッドローカルストレージ、GC インタフェース、範囲 for (boost ライブラリに基づく)、static assert (boost ライブラリに基づく)。
- 新しいライブラリ機能: アトミック操作ライブラリ、emplace() およびその他の既存のライブラリのすべての部分に渡る右辺値参照の使用、std::initializer_list、状態付きおよびスコープ付きのアロケータ、forward_list、chrono ライブラリ、ratio ライブラリ、新しいアルゴリズム、Unicode 変換ファセット。
- TR1 から: 特殊関数を除く TR1 のすべて。
- boost から: スレッドライブラリ、exception_ptr、error_code および error_condition、イテレータの改善 (std::begin、std::end、std::next、std::prev)。
- C から: C スタイルの Unicode 変換関数。
- 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++ 標準のマイナーな改訂。
- 新しい言語機能: 可変長引数テンプレート、多相ラムダ、ラムダキャプチャ式、new/delete の省略、constexpr 関数の制限の緩和、2進リテラル、桁区切り文字、関数の戻り値型の推定、波括弧または等号初期化子によるクラスに対する集成体初期化。
- 新しいライブラリ機能: std::make_unique、std::shared_timed_mutex および std::shared_lock、std::integer_sequence、std::exchange、std::quoted、および、いくつかのアルゴリズムに対する範囲を2つ取るオーバーロードや、型特性の型エイリアスバージョン、ユーザ定義文字列、duration、複素数リテラルなどの既存のライブラリ機能に対する多数の小さな改善。
- 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))
- 言語の変更: 畳み込み式、クラステンプレートの実引数推定、auto 非型テンプレート引数、コンパイル時 if constexpr、インライン変数、構造化束縛、if および switch に対する初期化子、u8 文字、単純化されたネストした名前空間、複数の名前を宣言できる using 宣言、型システムの一部となった noexcept、評価順序の新しいルール、明示的なアライメント付きの確保関数、保証されたコピー省略、__has_include、*this のラムダキャプチャ、constexpr ラムダ、繰り返す必要のない属性名前空間、新しい属性
[[fallthrough]],[[nodiscard]],[[maybe_unused]]。 削除されたトライグラフ、register キーワード、bool を取るインクリメント。 - ライブラリの変更: std::variant、std::launder、未初期化メモリ用のツール (std::destroy_at/std::destroy/std::destroy_n, std::uninitialized_move, std::uninitialized_value_construct など)、 map/set の extract および merge、byte、std::make_from_tuple、std::to_chars/from_chars、ファイルシステムにおける相対パスのサポート (proximate, relative, weakly_canonical)、ファイルシステムにおけるディレクトリエントリのキャッシュ、隣接イテレータ、非メンバの size/empty/data、map/unordered_map の try_emplace および insert_or_assign、uncaught_exceptions、lock_guard の可変長引数版、as_const、conjunction/disjunction/negation、型特性変数 xxx_v、透過的な owner_less、duration および time_point に対する丸め関数、std::shared_ptr に対する配列サポート、not_fn、weak_from_this、is_always_lock_free、is_swappable、clamp、3D hypot、キャッシュラインインタフェース、is_invocable、is_aggregate、has_unique_object_representations。 非推奨化された
std::iterator、std::raw_storage_iterator、std::get_temporary_buffer、std::is_literal_type、std::result_of、<codecvt>。 削除された auto_ptr、非推奨の関数オブジェクト、std::random_shuffle、std::unexpected、非推奨の iostream のエイリアス。 - TS から: ファイルシステムライブラリ、ライブラリ基礎バージョン1 (optional、any、string_view、多相アロケータ、検索子、apply など)、並列処理バージョン1 (実行ポリシー、reduce、inclusive_scan、exclusive_scan など)、しかし
exception_listは削除されました。 特殊関数 IS から: 数学の特殊関数。 ライブラリ基礎バージョン2から: std::gcd、std::lcm。 - C11 から: std::aligned_alloc、std::timespec_get。
- 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 (2019-10-08 draft)
C++ 標準の次のメジャーな改訂。
- 言語の変更: 三方比較演算子 <=> および operator==() = default、指示付き初期化子、範囲 for における初期化文および初期化子、char8_t、
[[no_unique_address]]、[[likely]]、[[unlikely]]、ラムダキャプチャにおけるパック展開、多くの文脈における型の曖昧性除去のためのtypenameの使用の要求の削除、consteval、さらに緩和された constexpr、符号付き整数の2の補数、丸括弧を用いた集成体初期化、配列の new が配列のサイズを推定可能。 - TS から: コルーチン、モジュール、コンセプト、省略形の関数テンプレート。
- ライブラリの変更: カレンダーおよびタイムゾーンライブラリ、std::span、std::endian、make_shared の配列サポート、std::remove_cvref、std::to_address、浮動小数点および shared_ptr のアトミック、
<version>、std::osyncstream、std::u8string およびその他の char8_t の使用、<algorithm> <utility> <complex> に対する constexpr、std::string(_view)::starts_with および ends_with、std::assume_aligned、std::bind_front、c8rtomb/mbrtoc8、make_obj_using_allocator など、make_shared_default_init/make_unique_default_init、hash_map における型混合検索など、完全特殊化された std::polymoprhic_allocator<>、std::execution::unseq、std::midpoint および std::lerp、std::ssize、std::is_bounded_array。 - TS から: 範囲、統一コンテナ削除 (std::erase/std::erase_if)。
[編集] 関連項目
| C の歴史 の C言語リファレンス
|