Какова связь между динамическим языком исполнения и C # 4.0?

11

Допустим, я хотел создать динамический языковой компилятор / интерпретатор, возможно интерпретатор Scheme, на платформе .NET, как он существует сегодня. Будет ли мне лучше использовать Dynamic Language Runtime (DLR) или использовать C # 4.0 для реализации динамических функций моего языка? Или мне нужны оба?

Я знаю, что в этой области была проделана другая работа, в частности с IronScheme и IronPython . Оба этих языка используют DLR; Я считаю, что IronPython использует самую последнюю версию DLR (которой около года), в то время как IronScheme использует раннюю, сильно модифицированную ветвь ранней версии DLR. Но C # 4.0 не был доступен, когда были созданы эти компиляторы.

Я видел работу Роба Конери с Massive, используя динамические возможности C # 4.0; это довольно впечатляет. Но выдержит ли C # полномасштабную работу динамического языкового компилятора / интерпретатора? Есть ли функции в DLR, которые отсутствуют в C #, или DLR по существу свернут в C # 4.0? Буду ли я упускать какие-либо важные функции DLR, если я буду использовать исключительно C # 4.0?

Роберт Харви
источник
Я считаю, что .Net 4.0 Динамические функции также основаны на DLR.
Дейв Най
@Dave: я был бы удовлетворен текущей авторитетной ссылкой на статью, подробно описывающую отношения между средой выполнения .NET 4.0 и DLR. Это дало бы мне четкое представление о том, достаточно ли надежна система динамических типов в C # 4.0 и есть ли какие-либо критические функции в DLR, которые были исключены из среды выполнения .NET 4.0. Я нашел несколько статей, но все они были написаны в тот день, когда DLR формировался, и многие из них являются спекулятивными.
Роберт Харви

Ответы:

3

Эту статью я помню, как читал. msdn.microsoft.com/en-us/magazine/gg598922.aspx

Позже DLR был также включен в .NET Framework 4 для поддержки динамических функций в C # и Visual Basic. Если вам нужно только ключевое слово dynamic в C # 4, вы можете просто использовать .NET Framework, и в большинстве случаев оно будет обрабатывать все взаимодействия с DLR самостоятельно. Но если вы хотите внедрить или перенести новый динамический язык в .NET, вы можете воспользоваться дополнительными вспомогательными классами в проекте с открытым исходным кодом, который имеет больше функций и сервисов для разработчиков языка.

Дэйв Най
источник
3

От: jimmysch

Роберт,

Факты: IronRuby и IronPython используют DLR, на самом деле большинство функций DLR основаны на более ранней реализации IronPython. Я не знаю, как какая версия DLR IronScheme использует. Часть DLR (Microsoft.Scripting.Core.dll) была отправлена ​​в .NET 4.0 в System.Core.dll, и именно эту часть C # 4.0 использует для поддержки «динамического» ключевого слова, поэтому эта сборка не является присутствует в .NET 4.0 сборки DLR.

Остальная часть кодовой базы DLR (Microsoft.Scripting.dll, Microsoft.Dynamic.dll являются наиболее важными) доступна для загрузки из этого проекта CodePlex или проекта IronLanguages ​​GitHub. Они предоставляют API-интерфейсы для потребителей и производителей хостинговых языков, а API-интерфейсы в .NET 4.0 предназначены для динамического распределения методов.

Чтобы написать компилятор динамического языка для .NET 4.0, я бы использовал C # в качестве языка реализации и использовал DLR в качестве библиотеки для упрощения общих задач компилятора. Для простого примера языка на DLR, посмотрите Sympl.

~ Джимми

http://dlr.codeplex.com/discussions/268746#post656778

Роберт Харви
источник