- 方言(Dialect)のない単一のC++という夢は、すでにかなり前に消え去ったように見える
- Redditやあのオレンジ色のウェブサイト(HN)、そして公式のC++標準委員会会合で、C++の未来をめぐる多くの議論がある
C++の現状
- C++進化ワーキンググループ(EWG)は、P3466 R0を採択することで合意した。
- ABI(アプリケーション・バイナリ・インターフェース)を壊さず、Cおよび過去のC++とのリンク互換性を維持する。
- 「バイラル注釈」を使用しない。
- ABIの破壊とゼロオーバーヘッド原則という相反する目標に固執する。
- 米国政府はC++の使用中止を勧告している。
- CISA、NSA、ホワイトハウスなど複数の機関が、メモリ安全でない言語の使用に関する警告を出している。
- 大手テック企業がRustを採用している。
- Microsoft、Google、AWSなどがRustを使用している。
- GoogleはC++/Rust相互運用ツールまで開発している
- C++コミュニティ内の内部対立
- Herb SutterがMicrosoftを離れ、MSVCのC++23機能実装が遅れているという話がある。
- GoogleはC++開発プロセスへの参加を減らし、独自のC++後継言語を開発中である。
- 従来のC++標準委員会プロセスに対する信頼不足
- モジュール機能は依然として未完成の状態
- 「安全プロファイル(‘Safety Profiles’)」は奇妙な状態にある
C++の二つの文化
- モダンで自動化されたツールを使うグループ
- Googleのような大手テック企業が主な例
- 最新のC++標準(C++17以降)を使用し、自動化されたビルドおよびテストツールの支援がある
- コード品質の維持に投資し、継続的にコードベースをモダナイズしている
- レガシーC++グループ
- 古い環境やツールで運用されるコードベース
- ソースコードなしで運用されていたり、ビルドシステムが旧式だったりする
- 保守コストが高く、モダナイズの障壁が大きい
- 主な違いはツールとプロセス
- モダンC++グループは、統合ビルドシステムや静的解析器、フォーマッタ、リンタなどのツールに依存している
- レガシーグループは、こうしたツールやプロセスの不在により運用効率が低い
結果と影響
- 安全プロファイル
- 既存のレガシーコードを変更せずに安全性を強化しようとする目的
- モダンC++の要求よりも既存コード維持に重点を置いている
- モジュール
- ヘッダーファイルをモジュールとして簡単に取り込めるよう設計されている
- レガシーコードとの互換性を考慮して設計されている
- C++コミュニティの分裂
- モダン派とレガシー派の要求の不一致により、コミュニティ内の対立が深まっている
- C++標準委員会の保守的なアプローチは、こうした対立を和らげようとする試みに見える
代替的な視点
- Safe C++のような代替的なアイデアは、コミュニティ内で歓迎されていない
- 標準委員会の一部メンバーが個人的な美的基準に固執し、変化に抵抗している場合があるという批判がある
3件のコメント
Rust は GUI 開発のエコシステムがまだ整っていないので、採用できずにいるんですが、
Rust で使えるまともな GUI フレームワークが出てきてほしいですね……
RustがC++を置き換えられるかどうかはよく分かりませんが、
新規のC++プロジェクトがほとんど見当たらないのは事実ですよね...
C++委員会は、変容よりも本来の価値を重視する方向が正しいと判断したようですね。
Hacker Newsの意見
GoogleのC++コードはしばしば最新バージョンで動作せず、開発者がそれを修正する意思を持たないことも多い。これはGoogleのコードが古いものとモダンなものの中間地点にとどまっているためだとされる
C++標準の策定者たちに対して、現在のC++の方向性を支持し、C++の将来についてオンラインで出てくる雑音は無視するよう助言している
C++を使い続ける唯一の集団は、リファクタリングするには大きすぎるレガシーコードベースを抱えた集団だけになるだろうと主張している
Rustのエディションシステムは非常によく機能していると評価している
Herb SutterがMicrosoftを去るという知らせは、Microsoftにとって良くない影響を及ぼすのではないかと懸念している
std::spanが境界検査を除いて採用されたことに触れ、Herbの努力が必要だったと主張している自動化テストが二つの陣営を分ける主要な要素だと強調している
C++の魅力を下げた主な要因はモジュールの不在だと主張している
Herb Sutterは妥協を導くのが得意だった一方で、Googleは自分たちの議題を押し通していたと比較している
大規模コードベースを持つ顧客は、厳格なルールを満たすためにコードの1%ですら変更したがらないと述べている
PythonやJavascript/Node/Typescriptにも複数の派閥が存在すると説明している