Нужен ли DLR в .NET 4.0? - PullRequest
7 голосов
/ 19 июля 2011

Я пытался использовать DLR для своего игрушечного языка, и я немного растерялся. Если в .NET 4.0 есть деревья выражений LINQ, динамические объекты и тип «динамический», то действительно ли нам нужен DLR? Что обеспечивает DLR, чтобы облегчить мою жизнь как разработчика языка

--- Редактировать ----

Позвольте мне объяснить мой вопрос немного лучше. Проект DLR, найденный на codeplex (dlr.codeplex.com), есть ли в этом необходимость? Все ли функции этого проекта DLR включены в .NET 4? Или в DLR осталось что-то ценное?

Ответы [ 4 ]

4 голосов
/ 21 июля 2011

Во время разработки DLR мы разделили его на две части - внутренний слой и внешний слой. Внутренний уровень состоял из кэширования сайта вызовов, расширенных деревьев выражений и протокола мета-объекта. Все это было предназначено и было добавлено в .NET 4.0.

Внешний уровень состоял из API-интерфейсов хостинга, интерпретатора дерева выражений, поддержки взаимодействия COM, настраиваемого распознавателя перегрузки для вызова методов .NET, связывателя по умолчанию для большинства операций DLR и многих других различных помощников. Ничего из этого не поставляется с .NET Framework, но все же может быть полезным для вас. При использовании этого в .NET 4.0 он использует API-интерфейсы DLR, поставляемые с .NET 4.0.

Внешний слой также был разделен на две части - API-интерфейсы хостинга (Microsoft.Scripting.dll) и все остальное (Microsoft.Dynamic.dll). Вы можете использовать API-интерфейсы хостинга DLR, если хотите, чтобы люди могли размещать ваш язык так же, как они размещают IronPython и IronRuby. И вы можете использовать Microsoft.Dynamic.dll или просто извлечь из него полезные фрагменты кода, а не заново изобретать колесо. В любом случае, если вам нужна последняя версия, вам необходимо проверить веб-сайты IronPython / IronRuby, так как Microsoft больше не занимается активной разработкой компонентов внешнего слоя.

2 голосов
/ 19 июля 2011

Это не совсем отвечает на ваш вопрос, но мне было очень интересно прочитать сообщение Джима Хугунина об уходе из Microsoft некоторое время назад.

Одна из вещей, на которые он указал, заключалась в том, что DLR был движущей силоймногие из хороших достижений в .Net 4.0, которые вы сейчас назвали, являются причиной, по которой вам больше не нужен DLR.

Редактировать: Ссылка на сообщение - http://hugunin.net/microsoft_farewell.html

Вкл.с другой стороны, я думаю, что система DynamicSite все еще является чем-то очень ценным, хотя и не обязательно чем-то важным для включения в сам CLR.

2-е редактирование: это действительно интересный запрос, ятолько что посмотрел документы на Codeplex.Как вы заявили и пояснили, CLR .net 4.0 действительно реализует то, что раньше делало DLR особенным;Читая обзор DLR, я думаю, что в основном идея состоит в том, что вещи, реализованные с помощью DLR, имеют преимущество в том, что они получают доступ к новым функциям быстрее, чем ожидают новую версию Framework.

Это может бытьхотя они еще не выпустили новую версию DLR некоторое время!

Еще одно возможное преимущество, но я признаю, что я не исследовал это должным образом, это то, что AST в DLR имеет больше функций:

Shared AST (деревья выражений) - это один из основных столпов DLR.Мы расширили деревья выражений LINQ, включив в них поток управления, назначения и т. Д. Мы также отправляем источники для всех деревьев выражений v1 и v2 (новый материал для DLR).Выражения Tres являются частью понижения планки для переноса языков в .NET, и мы используем их в протоколах связывателей и DynamicMetaObject.

1 голос
/ 19 июля 2011

DLR на codeplex имеет открытый исходный код, поэтому намного проще вносить улучшения / дополнения для поддержки функций, которые могут понадобиться вашему языку.

1 голос
/ 19 июля 2011

Как объясняется на этой вики-странице (http://en.wikipedia.org/wiki/Dynamic_Language_Runtime)), DLR используется с IronPython и IronRuby, так что да, он все еще необходим.

Это облегчит вашу жизнь, если вы сможете использоватьболее динамичный язык для вашего развития.

...