プログラミング言語からそのライブラリへの依存関係がどのように管理されているのか、私はいつも疑問に思っていました。C# を例にとってみましょう。私がコンピューティングについて学び始めたとき、言語自体は最終的に利用可能になるクラス ライブラリとは独立して設計されていると思い込んでいました (実際には間違っています)。つまり、一連の言語キーワード ( for
、class
または などthrow
) と構文およびセマンティクスが最初に定義され、その言語から使用できるライブラリが個別に開発されます。これらのライブラリの特定のクラスは、言語の設計に影響を与えるべきではないと私は考えていました。
しかし、それはうまくいかないか、常にではありません。を検討してくださいthrow
。C# コンパイラは、次の式throw
が例外の型に解決されることを確認します。Exception
はライブラリ内のクラスであり、特別なものであってはなりません。これは、C# コンパイラが特別なセマンティクスを割り当てることを除いて、他のクラスと同じです。これは非常に良いことですが、言語の設計は、クラス ライブラリ内の特定の要素の存在と動作に依存するというのが私の結論です。
さらに、この依存関係がどのように管理されているのだろうか。throw
新しいプログラミング言語を設計する場合、 のセマンティクスを非常に特殊なクラスである にマッピングするには、どのような手法を使用しますException
か?
だから私の質問は2つです:
- 言語設計がその基底クラス ライブラリの設計と密接に結びついていると考えるのは正しいでしょうか?
- これらの依存関係は、コンパイラとランタイム内からどのように管理されていますか? どのような技術が使用されていますか?
ありがとうございました。
編集。私の 2 番目の質問が非常に漠然としていると指摘してくれた方々に感謝します。同意します。私が学ぼうとしているのは、コンパイラが必要とする型についてどのような種類の参照を格納するかということです。たとえば、ある種の一意の ID で型を見つけますか? コンパイラまたはクラス ライブラリの新しいバージョンがリリースされるとどうなりますか? これがまだかなりあいまいであることは承知しており、正確な単一の段落の回答は期待していません。むしろ、文献やブログ投稿へのポインタは大歓迎です。