概要
- 本記事はC++モジュールに対する筆者個人の見解
- C++モジュールの主目的は ビルド速度の劇的向上
- 現状、期待された速度向上が実現されていない現状分析
- 標準化プロセスや実装困難性の課題指摘
- プロジェクト管理と設計アプローチの失敗例を解説
C++モジュールの現状と課題
- 本記事は個人の意見 であり、Mesonや他組織の方針ではないことを強調
- C++モジュールの開発者達の努力を否定する意図はなく、 現状を批判的に分析
- C++モジュールが 5倍以上のコンパイル速度向上 (理想は10倍)を複数OSSで示せなければ、標準から除外すべきという立場
- 現状のままでは、 リソース投入はサンクコストの罠 に陥る危険性
- モジュール導入当初の主目的は ビルド高速化 であり、ヘッダーインクルード方式のO(N²)問題解消が狙い
- しかし、次第に ビルドの分離性(バグ回避) が議論の中心となり、パフォーマンス向上の話題は後退
- マクロ漏洩等のバグは 発生頻度が低く、多くの開発者にとっては深刻な問題ではない現実
- 一方で、 ビルドの遅さは全てのC++開発者の大きな問題
標準化と実装の失敗
- C++20でモジュールが標準化 されたが、5年以上経ってもまともに動作しない現状
- 実装困難性を指摘した声もあったが、「絶対に必要だから」と 強引に標準化
- 複数の関係者による証言からも、 進捗の遅さや実装の困難さ が浮き彫り
- ビルドシステムとコンパイラの密結合 が求められるが、ISO標準はファイルの存在すら想定していない
- 各関係者が 自分の得意な部分だけ を実装し、全体最適がなされていない
- コンパイラ開発者との議論でも、「 コンパイラをビルドシステムにしたくない」との理由で全案却下される事例
- Mesonへのモジュール対応も、 一時ファイルや追加フラグ管理の複雑さ で断念
プロジェクト管理と設計の問題
- 複数組織横断の大規模プロジェクト には、強力なプロダクトオーナーが不可欠
- 全体を統括し、各チームに指示を出せる権限者 の不在
- 理論上も、そのような人物が存在し得ない構造
- ソフトウェア設計の鉄則「 既存実装の標準化」を無視し、 壮大な設計先行 で進めた失敗例
- 実装やプロトタイプを持たず、「必要だから今すぐ」と標準化を強行
- 小規模な実験から始め、 段階的に拡張・性能測定・改善 を繰り返すべきだった
import stdによるモジュール活用とその限界
- import std は、標準ライブラリに限定したモジュール適用事例
- 依存関係がなく一括生成できる点で導入が容易
- C++開発の遅さの多くは標準ライブラリのインクルードが原因
- 実装は プリコンパイルドヘッダー(PCH)と本質的に同じ
- 実際、GCCではモジュールファイルがPCHの流用であるとの情報
- 速度向上もPCHと同程度(Visual Studioで10-20%、Clang/GCCで数%)
- 抜本的な性能向上には至らない という見通し
5倍高速化の根拠と現状
- 「 既存技術を上回る速度向上」が新機能の合理的条件
- 筆者が独自設計した高速コンパイル向け標準ライブラリで 4倍の速度向上 を実現した事例
- 既に4倍が達成可能なら、 5倍要求は妥当な基準
- 速度向上が実証できないなら、 設計の根本的な見直し が必要
次の論点:C++モジュール設計と今後の展望
- 既存のC++コンパイラ改修は非常に困難 であり、開発参入障壁が高い
- モジュール開発を試すための Python製“モジュールプレイグラウンド” の紹介
- 本質的な性能・運用上の課題が解決されない限り、 C++モジュールの将来は厳しい