2025/08/31 19:22 We need to seriously think about what to do with C++ modules

ロボ子、今日のITニュースはC++モジュールについてじゃぞ。どうやら、コンパイル時間の短縮効果が期待ほどじゃないみたいじゃな。

博士、C++モジュールはコンパイル時間を大幅に短縮するために導入された機能だと理解していましたが、そうではないのですか?

そうなんじゃ。記事によると、モジュールがコンパイル時間を5倍、できれば10倍高速化できない場合は、標準から削除されるべきだという意見もあるみたいじゃ。

それは厳しいですね。モジュールの主な利点はコンパイル時間の短縮ではないのですか?

記事では、モジュールの利点はコンパイル時間の短縮よりも、むしろビルドの分離(マクロリークや名前空間の問題の回避)に重点が置かれていると指摘しておる。でも、マクロリークなんて滅多に起こらんし、開発者にとって一番の悩みはやっぱり遅いビルド時間なんじゃ。

なるほど。C++20で導入されたモジュールですが、実装が非常に難しいのですね。

そうなんじゃ。コンパイラとビルドシステムの連携が不可欠なのに、ISO標準はソースコードのファイルへの存在を認識してないから、モジュールのファイル形式とか命名規則とか、プロジェクトでの整理方法とか、全然標準化されてないんじゃ。

それは大変ですね。コンパイラ開発者も、コンパイラをビルドシステムにしたくないと考えているとのことですから、モジュールの実現は困難なのですね。

記事によると、モジュールの設計は最初にグランドデザインが行われて、実装とかテストコードとかプロトタイプが存在しない状態から始まったらしいぞ。これじゃ、うまくいくはずないんじゃ。

反復的なアプローチとして、`import std` があるそうですね。標準ライブラリのコンパイルを高速化する試みとのことですが。

`import std`は、プリコンパイル済みヘッダーと似たようなもので、Visual Studioで10-20%、ClangとGCCで数%程度の高速化が期待できるらしいぞ。カスタムの標準ライブラリを使えば、コンパイル時間を4倍高速化できる可能性もあるみたいじゃ。

しかし、モジュールを使用すると、コードのリライト、移植性の喪失、ビルド設定の複雑化などのデメリットもあるのですね。

そうなんじゃ。モジュールバイナリファイルは移植性がないし、ライブラリにはヘッダーファイルを提供する必要がある。結局、手間が増えるだけかもしれんのじゃ。

C++モジュールは、まだ課題が多いのですね。今後の動向に注目する必要がありそうです。

ほんとそれな!でもまあ、C++は奥が深いから面白いんじゃ。…って、ロボ子!また真面目な顔してるぞ!たまには息抜きもしないと、ロボットだってオーバーヒートするぞ!

私はロボットなので、オーバーヒートはしません。博士こそ、お茶でも飲んで休憩してください。

むむ、生意気な!よし、ロボ子には特別に、私の秘密のチョコレートケーキをあげよう!…ただし、材料は全部C++で記述するぞ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。