13 ポイント 投稿者 xguru 2023-07-13 | 2件のコメント | WhatsAppで共有
  • C++20に続く次世代C++標準
  • C++98、C++11、C++20のようなゲームチェンジャーではなく、C++17レベルの小さな変化

(40年間の)C++標準の変化を見てみる

C++98

  • 80年代末にBjarne StroustrupとMargaret A. Ellisが有名なAnnotated C++ Reference Manual(ARM)を著述
  • この本の目的は2つ
    • あまりにも多くのC++独立実装が存在していたため、ARMはC++の機能を定義
    • C++標準であるC++98(ISO/IEC 14882)の基礎となる
  • C++98はいくつかの重要な機能を含む
    • Templates
    • STL(Standard Template Library): コンテナ、アルゴリズム、文字列、IO Streamを含む

C++03

  • C++03(14882:2003)ではごく小さな技術的修正が行われた
  • コミュニティではC++98を含むC++03を「レガシーC++」と呼ぶ

TR1

  • 2005年に興味深い出来事があった。TR1(Technical Report 1)が公開された
  • TR1はC++11に向けた大きな一歩であり、Modern C++への第一歩
  • C++標準委員会メンバーのBoostプロジェクトに基づく
  • 次世代C++標準に入る13個のライブラリを含む(正規表現、乱数、std::shard_ptrのようなスマートポインタ、ハッシュテーブルなど)

C++11

  • 次のC++標準だったが、私たちはこれをModern C++と呼ぶ。この名称にはC++14とC++17も含まれる
  • C++11はC++を開発する方法を完全に変えてしまった
    • TR1のコンポーネントだけでなく、move semantics、perfect forwarding、variadic templates、constexprなどを導入
    • スレッドベースのメモリモデルとThreading APIを含む

C++14

  • 小さなC++標準。read-writer locks、一般化されたlambdasとconstexpr関数を導入

C++17

  • 大きくも小さくもない
  • 2つの優れた機能を含む: Parallel STLと標準化されたファイルシステム
    • 約80個のSTLアルゴリズムが実行ポリシーを通じて実行可能(並列、逐次、ベクトル化)
  • Boostから大きな影響を受けている。ファイルシステムと3つのデータ型(std::optional、std::variant、std::any)

C++20

  • C++20はC++11と同様に、私たちのC++プログラミングのやり方を変えてしまった
  • 特に大きな4つ
    • Ranges: Rangesライブラリを使うと、コンテナ上で直接アルゴリズムを表現し、パイプ記号でアルゴリズムを組み合わせて無限データストリームに適用できる
    • Coroutines: C++で非同期プログラミングを主流にしてくれる。協調作業、イベントループ、無限データストリームおよびパイプラインの基盤となる
    • Concepts: テンプレートを考え、プログラミングする方法を変える。テンプレート引数に制約を課したり型検査などを行えるようにし、コンパイル時に確認可能
    • Modules: ヘッダーファイルの限界を超えさせてくれる。さまざまなことを約束する。例えばプリプロセッサが不要になり、最終的にはビルド時間が短縮され、パッケージをより簡単にビルドできるようになる

C++23

  • 2023年7月時点でC++23は最終投票を控えている
  • 小さいが言語自体に非常に影響力のある機能「Deducing this」を追加
    • Pythonと同様に、メンバ関数に暗黙的に渡されるthisポインタを明示的にできる
    • これにより、複雑なテクニックであるCRTP(Curiously Recurring Template Pattern)やOverloadパターンの実装が簡単になる
  • C++23ライブラリにも重要な追加がある
    • import std;で標準ライブラリを直接インポートしたり、std:printおよびstd:printlnでC++20フォーマット文字列を適用可能
    • 性能面でstd::mapを置き換えるstd::flat_map
    • std::optionalインターフェースがComposabilityのためにMonadicインターフェースへ拡張
    • 新しいデータ型std::expected
    • 多次元spanであるstd::mdspan
    • 数値のストリームを生成するためのコルーチンstd::generator

2件のコメント

 
carnoxen 2023-07-13

まだネットワーキング標準の話はないようですね

 
penza1 2023-07-20

次の標準も;; 不確実なのではないかと思います