を教えてくださいそれはいくつかの言語のサポートを必要とする(そうでない場合は、C/C++コンパイラはあまりにもそれを行うだろう)
、それがあることが必要ですコンパイラは自己完結型のモジュールを生成します。自己完結型のモジュールは、他のモジュールがそれらを呼び出すために参照できるメタデータを公開します。
.NETアセンブリは簡単な例です。プロジェクト内のすべてのファイルが一緒にコンパイルされ、1つのdllが生成されます。このdllは.NETに照会して、その型に含まれる型を判別し、他のアセンブリで定義されている関数を呼び出すことができます。
これを利用するには、他のモジュールを参照することが言語上合法でなければなりません。
C++では、モジュールの境界をどのように定義しますか?言語は、コンパイラが現在のコンパイル単位(.cppファイル+インクルードヘッダー)内のデータのみを考慮することを指定します。 「コンパイル時にプロトタイプや何も持っていないのに、関数Fooをモジュールバーで呼びたい」と指定する仕組みはありません。ファイル間で型情報を共有するための唯一のメカニズムは#includeです。
C++にモジュールシステムを追加する提案がありますが、C++ 0xには含まれません。私が最後に見たのは、0x1が出てからTR1のためにそれを検討するという計画でした。
(それはコンパイルをスピードをアップいただきたいので、C/C++での#includeシステムが最初に使用されたことを言及する価値があります。戻る70年代に、それはコンパイラは、単純な線形スキャンでコードを処理することができました。これ構文木などの「高度な」機能を構築する必要はありませんでしたが、今日ではテーブルが回転しており、使いやすさとコンパイル速度の両面で大きなボトルネックになっています)。
私はあなたが私を正しく理解したと信じています。私は基本的にC/C++のアイデアを意味しています。各ソースファイルはそれぞれのコンパイル単位です。これは、C#やJavaの場合とほとんど変わりません。 –