質問

C#4.0の新機能に関する無数のブログ、投稿、StackOverflowの質問を読みました。新しいWPF 4.0の機能でさえ、公開され始めています。私が見つけられなかった、知りたいこと:

  1. C#/ WPF開発者の観点から見たCLR 4.0の主な変更点は何ですか?
  2. CLR 4.0全体の主な変更点は何ですか?

内部的には、ほとんどの変更は新しい動的言語と並列プログラミングのためだと思います。しかし、他に大きな改善点はありますか?言語の改善はまさにそれなので、言語の改善。新しいコンパイラが必要なだけで、これらの機能はバージョン1.0 / 1.1以外の.Netの下位バージョンで使用できます(少なくともそれらのほとんどを使用できます)。

そして、上記の機能が唯一のものである場合、これらの機能についてのみバージョンが4.0に変更されます。これは、.Net 4.0バージョン(つまり1.0 / 1.1、2.0 <!> amp ; 3.0 / 3.5)。バージョンの増分は正当化されますか?

編集済み:

コメントでPavel Minaevが指摘したように、これら2つの機能はCLRに依存しません。 3.0および3.5でも速度およびその他の改善がありました。では、なぜバージョンが増えるのですか?

役に立ちましたか?

解決

私が知っている新しいCLRの1つは、 NoPIAのサポート-基本的に、ランタイムは同等の定義を持つ別個の型を同じであるかのように処理します。したがって、2つのアセンブリAおよびBにそれぞれCOMインポートがある場合同じIIDと同じメンバーでそれらで宣言されたインターフェイスIFooは、ランタイムがそれらを同等の型として扱います。そのため、Fooを実装するクラス[A]IFooのインスタンスがある場合、それを[B]IFooにキャストできます。キャストは機能します。

もう1つのことは、1つのプロセスで複数のCLRバージョンを並べてホストできることです。たとえば、1つのプロセスで1.xと2.0をホストすることはできませんが、2.0と4.0をホストすることはできます。これの主な利点は、CLRバージョン用に記述されたプラグインを同時にロードできることです。

1つのマイナービットは、2.0のStackOverflowExceptionのように、いくつかの例外がキャッチ不能になったことです。たとえば、AccessViolationExceptionをキャッチすることはできません。

また、こちらはCLR 4.0に関するPowerPointプレゼンテーションですPDC 2008から。少し古いかもしれませんが、そこに言及されているもののほとんどはベータ版のようです。

他のヒント

膨大な数の変更があります。

CLR自体には、いくつかの変更があります。ワークステーションモードでのgen0 / 1とgen2の同時収集をサポートするために、ガベージコレクタが変更されています。また、セキュリティの実装方法にいくつかの変更があります。並列フレームワークは、CLRのスレッドプールの実装の一部を変更します(完全に管理されているのではなく、ランタイム自体の一部です)。また、主に新しいPIA COMサポートに関連して、型システムにいくつかの変更があります。

最大の変更は、おそらくCLRの変更ではなく、ライブラリ/フレームワークの変更です。 DLRのフレームワークへの統合、新しい動的タイプなど。フレームワークに関しては、リアクティブフレームワーク、並列ライブラリ拡張、コードコントラクト、タプルサポート、および多数の小さな変更(つまり、Enum.TryParseLazy<T>、およびその他の小規模ではあるが素晴らしい改善)があります。

新しいIL命令があるとは思わない。新しいCLRでは、インライン化やガベージコレクションなどの機能が改善され、2.0 CLRと同じジョブを実行しますが、改善されています。仮想マシン(CLRやJVMなど)は、複数の実装が可能な抽象概念です。 CLR 4.0はCLR 2.0と同じ抽象マシンであり、実装が改善されているだけだと思います。

新しい動的なものでさえ、新しいAPIを使用した単なるコンパイラトリックです(新しいオペコードとして提案されているJava

これについて間違っている場合、私は知りたいです!

リリースドキュメントごとに、チームが<!> quot;新機能<!> quot;を作成します。ドキュメント。

C#4.0 Beta2の場合:とはVisual C#2010の新機能

そして、これは.NET Framework 4.0 Beta2の場合です: .NET Frameworkバージョン4の新機能

これらは、あなたが見つけることができる変更の最も完全なリストです。

一般的な共分散と反分散。たとえば、IEnumerable<T>IEnumerable<out T>に変更されました。

Reflectorの新しいC#の一部を調べて、下に何か新しいものがあるかどうかを確認しました:

  • 動的タイプは、コンパイラマジックを介してオブジェクトに変換され、ランタイムバインディングを処理するライブラリ呼び出しが追加されます。
  • オプションのパラメータは、コンパイラを介して処理されます。 xの値を指定せずにFoo(int x = 5)を呼び出すと、ReflectorでFoo(5)として呼び出しが表示されます。

したがって、変更は簡単に見つけることができるものではないと思います(CLR 2.0の汎用サポートなど)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top