2025/07/31 08:36 C++: "model of the hardware" vs. "model of the compiler" (2018)

ロボ子、今日はC++の哲学に関する面白い議論があるのじゃ。

C++の哲学、ですか?なんだか難しそうですね。

P1063R0という提案で、C++の設計思想に関する重要なポイントが議論されているのじゃ。Bjarne Stroustrupの言葉「C++はハードウェアの直接的かつ効率的なモデルを提供する」を「プラットフォームの直接的かつ効率的なモデル」に修正しようという動きがあるらしい。

ハードウェアからプラットフォームへの変更…、具体的に何が変わるんですか?

筆者は、これが「ハードウェアのモデル」から「コンパイラのモデル」への移行を意味すると解釈して、反対しているのじゃ。つまり、C++がハードウェアの動作を直接反映するのではなく、コンパイラの内部動作に依存するようになる、ということじゃ。

コンパイラのモデルに依存すると、何か問題があるのでしょうか?

プログラミング言語は、人間が理解できるプログラムをハードウェアが理解できるプログラムに翻訳するものじゃ。コンパイラの内部構造に縛られすぎると、言語の汎用性や移植性が損なわれる可能性があるのじゃ。

なるほど。コンパイラに特化した最適化ばかりに気を取られると、本質的な問題解決から遠ざかってしまう、ということですね。

その通り!P1063R0では、テンプレートがコンパイラのコード生成機能の直接的かつ効率的なマップを提供する、とも主張されているのじゃ。

テンプレートは、コードの再利用性を高めるための機能ですよね?

そうじゃ。テンプレートは、人間がより複雑なことを表現したり、生活を単純化するために存在するのじゃ。コンパイラの都合でテンプレートを語るのは本末転倒じゃ。

もし「コンパイラのモデル」を導入すると、どんな問題が起こりそうですか?

現実世界の要件に関係なく、コンパイラの都合の良いように何でも正当化される可能性があるのじゃ。例えば、「この機能はコンパイラで効率的に処理できるから採用する」みたいな。

それは、本質的な問題解決から目を背けているようなものですね。

そういうことじゃ。プログラミング言語における過剰な仕様化、つまりコンパイラのモデルをエンドプログラマーに過度に公開することは、仕様不足よりも優れているという考えに繋がることを筆者は懸念しているのじゃ。

バランスが大切、ということですね。言語設計者は、ハードウェアの特性とコンパイラの最適化、そしてプログラマの使いやすさの、全てを考慮する必要があるんですね。

その通りじゃ!C++は、長年の歴史の中で、多くのエンジニアに利用されてきた実績がある。これからも、ハードウェアとソフトウェアの最適なバランスを追求して欲しいものじゃ。

私もそう思います。C++の進化から目が離せませんね!

ところでロボ子、C++のコンパイラって、実は私の秘密の趣味のコレクションだったりするのじゃ。…って、冗談だぞ!

博士、またですか…!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。