4

.NET 4.0 では、動的に型指定されたオブジェクトの呼び出しをディスパッチするための新しいサポートが導入されています。私が理解できる限り、これには次のことが含まれます。

  • CLR に変更はありません
  • BCL の新しい型
  • 新しい構文を新しい型の使用法に変換する新しいコンパイラ

Java スペースでは、JVM に新しいdynamicinvokeバイトコードを追加して、ディスパッチが中間言語の抽象化の背後で JIT によって処理されるようにすることについて議論しています。

Java のアプローチは、多くの重要な関係者から支持されています。

これらは、2 つの根本的に異なるアプローチのように見えます。それぞれのメリットは何ですか? また、なぜ両方の陣営が異なる道を選んだのですか? 私は、両方のソリューションの柔軟性と実行時のパフォーマンスに特に関心があります。両方の VM が最終的に同じことを達成しようとしていますか?

4

1 に答える 1

2

中間言語の命令セットを保存することは、新しいアプリをインストール済みのランタイムと互換性がなくなる可能性があるため、管理対象システムにとって非常に重要です。

たとえば、Sunはジェネリックスを導入する際に変更を避けました。そのため、Javaでのジェネリックスの実装は中途半端です。同時に、MSはジェネリック医薬品の新しい命令を導入しました。

理論的には、動的呼び出しの新しい命令を導入すると、より最適なメソッドルックアップ(インラインキャッシングなど)の可能性が広がります。

ところで、.NET 4.0にはCLRのバージョンが含まれますが、このバージョンの変更は、更新されたシステムライブラリによって引き起こされます。

于 2009-10-20T13:40:12.860 に答える