Какие изменения были внесены в среду CLR для поддержки динамического режима?

Насколько я понимаю, CLR .net 4.0 потребовалось внести изменения для поддержки среды выполнения динамического языка.

Есть ли способ узнать, что это были за изменения? Я заметил, что в стандарте .net не упоминаются такие вещи, как DynamicObject - все эти вещи кажутся частью DLR. Но если DLR - это «просто библиотека», то для его запуска .net 4 не потребуется.

Так что мне просто любопытно, что изменилось в .net 4 для поддержки DLR.


person Michael Stum    schedule 23.03.2011    source источник
comment
Откуда вы взяли, что среда CLR изменилась? Он изменился, но не для поддержки DLR.   -  person Gabe    schedule 23.03.2011
comment
@Gabe Хороший вопрос. Он просто появлялся здесь и там, но люди склонны смешивать C # 4 и .net 4 вместе. См., Например, здесь: eknowledger.spaces .live.com / blog /, где неопределенно сказано, что CLR нуждается в изменениях для поддержки динамических языков, но затем отображаются только изменения библиотеки (например, System.Tuple), поэтому мне интересно, каков полный объем здесь, или если DLR это 100% библиотечный код.   -  person Michael Stum    schedule 23.03.2011
comment
Большое изменение CLR - это поддержка дисперсии, и DLR может это использовать.   -  person Gabe    schedule 23.03.2011
comment
@Gabe: CLR поддерживает универсальную дисперсию с 2.0, но ни один из языков (кроме MSIL) не поддерживает до 4.0.   -  person zinglon    schedule 23.03.2011


Ответы (1)


Без изменений, это просто библиотека. .NET 4.0 CLR не требовалась, DLR работал на IronPython, а IronRuby в версии 2.0. Вы можете посмотреть, что отличает эту версию от этой версии, вы можете загрузить исходный код отсюда . Этот код был перемещен в System.Core.dll практически без изменений.

Помните, что их довольно много. Это все на чистом C #. Он использует существующую поддержку в CLR для динамического связывания через Reflection и COM-взаимодействие. Его претензия на известность заключается в том, что он может сделать это, заплатив за это только один раз. Он кэширует результаты привязки, так что они доступны по низкой цене в последующих привязках.

Добавление клея интерфейса DLR в C # версии 4 само по себе потребовало значительных усилий, оно встроено в Microsoft.CSharp.dll с большим количеством работы в компиляторе. Этот исходный код недоступен, но вы можете понюхать его с помощью Reflector.

person Hans Passant    schedule 23.03.2011