Я бы рекомендовал начать с MSDN: http://msdn.microsoft.com/en-us/library/dd233052.aspx
По сути, DLR существует в двух версиях: одна поставляется с .NET 4, другая является версией с открытым исходным кодом на codeplex.
DLR в .NET является частью System.Core. Однако для работы с DLR языкам и фреймворкам нужны собственные связыватели. В случае C# это связующее время выполнения C#, которое находится в Microsoft.CSharp.dll. Таким образом, все, что вы объявляете «динамическим» в C#, сначала обрабатывается исполняющим компоновщиком C#, а затем отправляется в DLR.
DLR на codeplex, очевидно, нуждался в собственной DLL (теперь Microsoft.Scripting). По сути, DLR началась, когда ребята из IronPython поняли, что то, что они сделали, можно использовать не только в IronPython, но и в других местах. Поэтому они провели рефакторинг кода и создали отдельный слой DLR. Этот уровень DLR позже был включен в .NET, и именно здесь разветвились две версии.
Версия .NET на самом деле имеет меньше возможностей, чем версия с открытым исходным кодом. Итак, если вы хотите, скажем, разработать собственный динамический язык в .NET, используйте версию с открытым исходным кодом. Если какая-то команда MS решает поддерживать динамические функции (как это сделал Silverlight), им обычно приходится работать с той, что есть в .NET Framework.
Если вы просто используете динамические функции C#, вам вообще не нужно беспокоиться о DLR (единственная интересная вещь для вас может быть пространством имен System.Dynamic, которое предоставляет несколько хороших классов, таких как ExpandoObject и DynamicObject). Еще одно пространство имен, активно используемое DLR (но не являющееся строго его частью), — это System.LINQ.Expressions, которое используется для операций с деревьями выражений. В этом выпуске он был расширен для DLR, и вы можете найти его как в версии DLR с открытым исходным кодом, так и в .NET Framework.
person
Alexandra Rusina
schedule
23.07.2010