Будущее за Dynamic Feature Runtime в контексте c #? - PullRequest
5 голосов
/ 03 февраля 2011

Таким образом, c # превратился в статически типизированный язык и делает более чем идеальную работу, занимая нишу в разработке линейки бизнес-приложений на основе .net.

Очевидно, что в недавнем прошлом Microsoft начала совершать скачки в направлении других фундаментальных парадигм, для которых c # и .net никогда не претендовали на роль инструмента до недавнего прошлого.

Одним из них является DLR

Хорошо, различие в языке - отлично, я думаю, только теперь мне кажется, что я должен изменить свой образ мыслей, когда янапишите мои бизнес-сущности с классами, если я хочу воспользоваться этой возможностью ... Это круто, и я все изучаю новое.Но прежде чем у меня есть несколько вопросов к уважаемому сообществу в этом отношении.Теперь, ради пояснения, меня больше интересует применение DLR наряду с CLR.

Итак, мы начинаем:

  1. По вашему мнению, является ли DLR aжизнеспособная особенность, которая требует рассмотрения с точки зрения разработки коммерческого программного обеспечения предприятия?Значит, действительно ли C # нуждается в этом как в функции, чтобы продолжать делать то, что он делает, или было бы более целесообразно переключиться на стандартный язык с динамической типизацией в этот момент?разработки и написания кода с использованием CLR и DLR с точки зрения применимости бизнеса?Конкретные примеры были бы для меня наиболее ценными.

  2. Преимущества.

Теперь мсдн говорит следующее:

Provides Future Benefits of the DLR and .NET Framework Languages implemented by using the DLR can benefit from future DLR and .NET Framework improvements. For example, if the .NET Framework releases a new version that has an improved garbage collector or faster assembly loading time, languages implemented by using the DLR immediately get the same benefit. If the DLR adds optimizations such as better compilation, the performance also improves for all languages implemented by using the DLR.

Ну отлично, но как именно?И не получу ли я то же самое, если просто обновлю фреймворк?Зачем мне для этого писать в DLR?

  1. Можете ли вы опубликовать примеры кода, чтобы продемонстрировать, что DLR может работать лучше, чем обычный c #?

  2. Стоит ли учиться тому, чтобы быть рыночным инженером .net, или это более или менее изотерическая особенность, чтобы просто сказать: «О, мы лучше, чем Руби, потому что мы можем сделать это тоже плюс»? **

  3. Каковы затраты на объединение этих 2 или просто использование DLR в приложении.развивается?

  4. Может ли DLR использоваться с f #?

С уважением.

1 Ответ

6 голосов
/ 07 февраля 2011

Возможно, стоит пояснить, что DLR - это API-интерфейс, расположенный поверх CLR, чтобы снизить планку для реализации функций языка динамической типизации.Вы можете использовать его полностью, как IronPython, IronRuby, Clojure и другие языки для реализации вашего языка.Вы можете использовать его по частям, как C # или VB, чтобы просто получить динамическое кэширование сайта вызовов (поиск встроенного полиморфного кэширования для получения общей информации о концепциях).Итак, в C # добавлено ключевое слово «dynamic», и для реализации этой языковой функции используются CallSites, Binder, DynamicMetaObjects DLR и т. Д.

Да, DLR является жизнеспособной функцией и имеет смысл для C #.C # был позади VB для взаимодействия COM, нетипизированных источников данных (DB, XML и т. Д.) И для облегченного синтаксиса веб-страниц (например, button.text = "yo").Когда я люблю язык, нахожу его в целом полезным или настраиваю свое мастерство в нем, мне нравится использовать этот язык как можно больше.Я не хочу объединяться и создавать накладные расходы на техническое обслуживание в моем решении, используя несколько языков, если мне действительно не нужно этого делать.Динамический C # позволяет мне делать вещи, которые я уже мог делать в C #, намного проще и вкуснее, и это, безусловно, означает, что мне не нужно прибегать к чисто динамическому или необязательно явно типизированному языку для более простого написания кода во многих другихситуации сейчас.

Разработка кода с DLR великолепна, если вы пытаетесь добавить функции динамического типа в язык или большую, богатую систему.Как часто цитируется, «любая достаточно сложная… программа содержит специальную… реализацию… Lisp».Если вы обнаружите, что вам нужен динамически типизированный доступ к данным или объектам, с некоторыми вычислениями того, что означает операция, с некоторыми входными данными, и вы хотите кэшировать это действие для последующих аналогичных вычислений в этом месте программы, DLR поможет вам сделать это.более дешевым способом.Дело в том, что вам даже не нужно использовать DLR на этом уровне, так как C # ввел для вас «динамический».Однако вы можете захотеть реализовать IDynamicMetaObjectProvider на некоторых объектах, представляющих ваши источники данных, чтобы они могли участвовать в операциях связывания, которые выполняют C # вызовы динамической диспетчеризации.Примером этого может быть, если XmlElement реализует IDMOP, чтобы вы могли написать что-то вроде: dynamic x = source.GetXmlElement (…);… X.Customers [i] .Address.City == «Erie»…

Преимущества заключаются в более высокой степени выражаемости кода, написанного для данных или объектов, которые по своей природе являются динамическими, а ненеобходимость выражать сложные объявления промежуточного типа и выполнять много вызовов o.GetBlahByName («что угодно»).

Абзац, который вы цитировали из документации DLR, посвящен языковым реализациям, основанным на DLR.Да, конечно, ваши приложения тоже получают преимущества.Дело было в том, например, что IronPython стал намного быстрее не только из-за появления DLR, но и потому, что сам CLR действительно работал, что косвенно улучшило реализацию IronPython в DLR.

Не беспокойтесьизучение DLR, если только вам не нужно добавить кешированный динамический доступ к вашему языку или системе.Большинство людей не кодируют на этом уровне сложности.Большинство людей используют языки и фреймворки, мало кто их реализует.

F # может использовать DLR, но распространенным заблуждением является то, что F # является динамическим языком.Это не.Он строго статически типизирован, но не во всех случаях явно типизирован, что смущает людей.Синтаксически он выглядит легким из-за интенсивного использования вывода типа и значительных пробелов.Если бы F # был один день, чтобы решить добавить модель «динамического» типа, как это сделал C #, то было бы разумно использовать DLR для простоты реализации и для взаимодействия с C #, динамическими языками в .NET, динамическими библиотеками и фреймворками.и т. д.

Билл

...