Возможно, стоит пояснить, что 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, динамическими библиотеками и фреймворками.и т. д.
Билл