В чем разница между CLR и DLR в C #? - PullRequest
23 голосов
/ 15 ноября 2010

В чем разница между CLR и DLR в C #?сопоставимы ли эти две концепции?

Ответы [ 4 ]

22 голосов
/ 15 ноября 2010

Common Language Runtime (CLR) - это основной набор сервисов, предлагаемых .NET - система типов, JIT, сборщик мусора и т. Д. Они доступны для всех языков .NET, поэтому «общая» часть.

Dynamic Language Runtime (DLR) строит поверх этого и предлагает услуги для динамических языков: динамические типы, динамическая диспетчеризация методов, генерация кода и т. Д. Идея состоит в том, чтобы сделать эти вещи единообразными и разделить их между динамическими языками, чтобы они работали предсказуемо и схожим образом, точно так же, как вещи в CLR распространяются также на все языки.

В каком-то смысле это сопоставимо: «нормальный» язык в .NET использует CLR, динамический язык должен использовать DLR, но также будет использовать CLR. Они представляют собой базовые наборы функций, которые дизайнеры считают хорошими, когда они распространены среди языков. IronPython и IronRuby были реализованы поверх DLR, как и функция C # 4 dynamic.

16 голосов
/ 15 ноября 2010

Я просто добавлю простую диаграмму, чтобы продемонстрировать точку:

    "*** Runtime & Libraries ***"    │ "*** Languages ***"
┌────────────────────────────────────┤
│ .NET Libraries                     │
│   ┌────────────────────────────────┼──────────────────┐
│   │ Dynamic Language Runtime (DLR) │ C# 4.0 'dynamic' ├────┐
├───┴────────────────────────────────┼──────────────────┘    │
│ Common Language Runtime (CLR)      │   C# 1.0, 2.0, 3.0    │
└────────────────────────────────────┴───────────────────────┘
7 голосов
/ 30 декабря 2015

Просто добавьте немного ясности к уже полученным отличным ответам.

Сначала CLR, это уровень абстракции, который находится между пользовательским кодом и физическим оборудованием.Есть несколько преимуществ:

  1. Аппаратная независимость 2. Система общего типа 3. Взаимодействие языков

CLR

.Net DLR был создан Jim Hugunin и был

Динамическая среда исполнения языка ( DLR ) - это среда выполнения, которая добавляет набор служб для динамической обработки.языки к общеязыковой среде выполнения (CLR).DLR облегчает разработку динамических языков для работы на .NET Framework и добавление динамических функций в языки со статической типизацией.
Динамические языки могут определять тип объекта во время выполнения, тогда как в языках со статической типизацией, таких как C #и Visual Basic (при использовании Option Explicit On) вы должны указывать типы объектов во время разработки.Примерами динамических языков являются Lisp, Smalltalk, JavaScript, PHP, Ruby, Python, ColdFusion, Lua, Cobra и Groovy.

Архитектура DLR
DLR

DLR добавляет набор служб к CLR для лучшегоподдержка динамических языков.Эти услуги включают в себя следующее: Деревья выражений.DLR использует деревья выражений для представления семантики языка.Для этой цели DLR расширил деревья выражений LINQ, включив в них поток управления, назначение и другие узлы моделирования языка.Для получения дополнительной информации см. Деревья выражений (C # и Visual Basic).Звоните на сайт кеширования.Сайт динамического вызова - это место в коде, где вы выполняете операцию, например, a + b или ab () над динамическими объектами.DLR кэширует характеристики a и b (обычно типы этих объектов) и информацию об операции.Если такая операция была выполнена ранее, DLR извлекает всю необходимую информацию из кэша для быстрой отправки.Динамическая совместимость объектов.DLR предоставляет набор классов и интерфейсов, которые представляют динамические объекты и операции и могут использоваться разработчиками языка и авторами динамических библиотек.Эти классы и интерфейсы включают IDynamicMetaObjectProvider, DynamicMetaObject, DynamicObject и ExpandoObject.DLR использует связующие на сайтах вызовов для связи не только с .NET Framework, но и с другими инфраструктурами и службами, включая Silverlight и COM.Связыватели инкапсулируют семантику языка и определяют, как выполнять операции на сайте вызовов с использованием деревьев выражений.Это позволяет использовать динамические и статически типизированные языки, которые используют DLR для совместного использования библиотек и получения доступа ко всем технологиям, которые поддерживает DLR.

Примеры

dynamic d = "test";  
Console.WriteLine(d.GetType());  
// Prints "System.String".  

d = 100;  
Console.WriteLine(d.GetType());  
// Prints "System.Int32".    

dynamic d = "test";  

// The following line throws an exception at run time.  
d++;  
7 голосов
/ 15 ноября 2010

DLR работает поверх CLR. DLR позволяет использовать переменные C # dynamic и другие возможности динамического языка.

http://en.wikipedia.org/wiki/Dynamic_Language_Runtime

...