3

動的型に対するすべての操作が DLR にディスパッチされるというのは本当ですか? このビデオから、そう見えますが、彼らはそれほど多くの言葉でそれを語っていません。私は、何らかのコミュニケーションでそれを書こうとしていたので、その声明が正しいことを確認したいだけです.

彼らはまた、DLR は現在 System.Core.dll にあるとも言っています。

DLR に独自のアセンブリまたは名前空間があるかどうかを知りたいです。

DLR ソースをブラウズしていますが、Microsoft.Scripting.dll にあるように見えますが、確かではありません。DLR には .NET 3.5 も同梱されていますか?

4

4 に答える 4

4

はい、動的操作はDLRによって実装されます。

DLRは.NET3.5に付属していませんでした。

古い名前空間は、3.5 SP 1などのDLRを含まないバージョンのCLR用でした。また、.NET4に含まれていない新しいDLR機能用でした。

于 2010-07-21T13:08:27.673 に答える
2

"動的" で C# を使用している場合、1 つの重要なプレーヤーは C# ランタイム バインダーです。このコンポーネントは DLR の一部ではありませんが、その機能は DLR インフラストラクチャに完全に依存しています。アセンブリ Microsoft.CSharp.dll にあります。

于 2010-07-22T13:29:38.103 に答える
2

いいえ、DLR Codeplex ソースは .NET 4.0 フレームワークのものではありません。とにかく直接ではありません。System.Core.dll アセンブリの System.Dynamic 名前空間に大きな塊が戻ってきます。移動したコードが DLR ソースとどの程度同一であるかを推測するのは困難です。一見同じように見えますが、確かに目の細かい櫛が必要です. 4.0 のソース コードは参照ソースから入手できますが、ソース コード ファイルの diff を簡単に実行できる形式ではありません。ExpandoClass.cs のスポット チェックでは、4.0 バージョンで追加された (不要な) using ディレクティブとほとんど同じであることが示されています。以前に DLR で行われた作業量を考えると、変更は比較的小さいと推定されます。

コンパイラと DLR によって生成された呼び出しの間に中間層があることに注意してください。まず、C# 言語のバインダーである Microsoft.CSharp.dll アセンブリ内のクラスを調べます。そのバインダーが終わり、DLR が始まる正確な場所をリバース エンジニアリングするのは非常に困難です。バインダー コードは読みにくく、多くの作業を行いますSystem.Dynamic 名前空間のメソッドへの呼び出しは織り交ぜられています。また、そのソース コードは参照ソースから入手できません。

バインダー内のコードの量を考えると、「動的型に対するすべての操作が DLR にディスパッチされますか」という質問に対する私の答えは、いいえ、おそらくすべてではないでしょう。

于 2010-07-21T14:34:09.193 に答える
1

MSDNから始めることをお勧めします:http://msdn.microsoft.com/en-us/library/dd233052.aspx

基本的に、DLRには2つのバージョンがあります。1つは.NET 4に付属しており、もう1つはcodeplexのオープンソースバージョンです。

.NETのDLRは、System.Coreの一部です。ただし、言語とフレームワークは、DLRと連携するために独自のバインダーを必要とします。C#の場合、これはMicrosoft.CSharp.dllにあるC#ランタイムバインダーです。したがって、C#で「動的」と宣言したものはすべて、最初にC#ランタイムバインダーによって処理され、次にDLRに送られます。

codeplex上のDLRには、明らかに独自のDLL(現在はMicrosoft.Scripting)が必要でした。基本的に、DLRは、IronPythonの担当者が、自分たちが行ったことをIronPythonだけでなく多くの場所で使用できることに気付いたときに始まりました。そこで、彼らはコードをリファクタリングし、別のDLRレイヤーを作成しました。このDLRレイヤーは後で.NETに組み込まれ、これは2つのバージョンが分岐したものです。

.NETバージョンは、実際にはオープンソースバージョンよりも機能が少なくなっています。したがって、.NETで独自の動的言語を開発したい場合は、オープンソースバージョンを使用してください。一部のMSチームが(Silverlightのように)動的機能をサポートすることを決定した場合、通常は.NETFrameworkにあるものを使用する必要があります。

C#の動的機能を使用するだけであれば、基本的にDLRについて心配する必要はありません(ExpandoObjectやDynamicObjectなどの優れたクラスを提供するSystem.Dynamic名前空間だけが興味深いかもしれません)。DLRで頻繁に使用されるもう1つの名前空間(厳密にはその一部ではありません)は、式ツリーを使用した操作に使用されるSystem.LINQ.Expressionsです。このリリースではDLR用に拡張されており、DLRオープンソースバージョンと.NETFrameworkの両方で見つけることができます。

于 2010-07-23T18:57:06.237 に答える