8

プログラミング言語からそのライブラリへの依存関係がどのように管理されているのか、私はいつも疑問に思っていました。C# を例にとってみましょう。私がコンピューティングについて学び始めたとき、言語自体は最終的に利用可能になるクラス ライブラリとは独立して設計されていると思い込んでいました (実際には間違っています)。つまり、一連の言語キーワード ( forclassまたは などthrow) と構文およびセマンティクスが最初に定義され、その言語から使用できるライブラリが個別に開発されます。これらのライブラリの特定のクラスは、言語の設計に影響を与えるべきではないと私は考えていました。

しかし、それはうまくいかないか、常にではありません。を検討してくださいthrow。C# コンパイラは、次の式throwが例外の型に解決されることを確認します。Exceptionはライブラリ内のクラスであり、特別なものであってはなりません。これは、C# コンパイラが特別なセマンティクスを割り当てることを除いて、他のクラスと同じです。これは非常に良いことですが、言語の設計は、クラス ライブラリ内の特定の要素の存在と動作に依存するというのが私の結論です。

さらに、この依存関係がどのように管理されているのだろうか。throw新しいプログラミング言語を設計する場合、 のセマンティクスを非常に特殊なクラスである にマッピングするには、どのような手法を使用しますExceptionか?

だから私の質問は2つです:

  • 言語設計がその基底クラス ライブラリの設計と密接に結びついていると考えるのは正しいでしょうか?
  • これらの依存関係は、コンパイラとランタイム内からどのように管理されていますか? どのような技術が使用されていますか?

ありがとうございました。

編集。私の 2 番目の質問が非常に漠然としていると指摘してくれた方々に感謝します。同意します。私が学ぼうとしているのは、コンパイラが必要とする型についてどのような種類の参照を格納するかということです。たとえば、ある種の一意の ID で型を見つけますか? コンパイラまたはクラス ライブラリの新しいバージョンがリリースされるとどうなりますか? これがまだかなりあいまいであることは承知しており、正確な単一の段落の回答は期待していません。むしろ、文献やブログ投稿へのポインタは大歓迎です。

4

4 に答える 4

3

すべての (実用的な) プログラミング言語には、最低限必要な機能があります。最新の「OO」言語の場合、これには必要な型の最小数も含まれます。

タイプが言語仕様で必要な場合は、パッケージ方法に関係なく必要です。

逆に、すべての BCL に有効な C# 実装が必要なわけではありません。これは、すべての BCL 型が言語仕様で必要とされているわけではないためです。たとえばSystem.Exception(#16.2 を参照) とNullReferenceExceptionは必須ですがFileNotFoundException、C# 言語の実装には必須ではありません。

System.String仕様は基本型 (例: )の最小限の定義を提供していますが、一般的に受け入れられているメソッド (例: ) は定義していないString.Replaceことに注意してください。つまり、ほとんどすべての BCL が言語仕様の範囲外です1


.. しかし、私の結論は、言語の設計は、クラス ライブラリ内の特定の要素の存在と動作に依存するということです。

私は完全に同意し、上記の例 (およびそのような定義の制限) を含めました。

.. 新しいプログラミング言語を設計する場合、「例外」という非常に特定のクラスに「スロー」のセマンティクスをマッピングするには、どのような手法を使用しますか?

主に C# の仕様ではなく、共通言語インフラストラクチャの仕様を調べます。この新しい言語は、実用的な理由から、既存の CLI/CLR 言語と相互運用できるように設計する必要がありますが、必ずしも「C# である」必要はありません。

1 CLI (および関連する参照)は、最小限の BCL の要件を定義しています。そのため、有効な C# 実装が CLI に準拠する必要がある (または想定する可能性がある) 場合、C# 仕様自体には記載されていない他の多くのタイプを考慮する必要があります。


残念ながら、私は 2 番目の (そしてもっと興味深い) 質問について十分な知識がありません。

于 2013-05-07T18:59:53.747 に答える
0

私の印象はそれです

C# や Ada などの言語で

アプリケーションのソースコードは移植可能です

標準ライブラリのソース コードは移植性がありません

コンパイラ/実装全体

于 2013-11-08T11:08:28.840 に答える