Введение в DLR UNETA 16 апреля, 2010 Иван Колодяжный, Software Developer Teamdev Ltd.
Contents Что такое DLR? o Expression Trees o Call Site Caching o Dynamic Object Interop Как я могу это использовать? o COM o Plugins o Dynamic languages
Что такое DLR: история и релизы Анонсирована на MIX'07 Релизы: o Ноябрь beta o Декабрь stable o Май stable o Октябрь stable o Апрель NET 4.0 release Последний коммит на codeplex - апрель 2010 Начиная с версии поддерживается Mono
Что такое DLR?
+/- DLR + поддержки динамических языков + легко создавать макросы и плагины + Runtime binding +/-производительность - нет intellisense
Expression trees Abstract syntax tree (AST)Поддержка динамических яхыковКодогенерация для CLR runtime
Call Site Caching Информация о вызовах динамических методовИстория вызовор методов для быстрого выполнения
Dynamic Object Interoperability Набор классов для создания динамических объектовКлассы могут быть использованы DLR и CLR
DynamicObject class System.Dynamic.DynamicObject - Provides a base class for specifying dynamic behavior at run time. This class must be inherited from; you cannot instantiate it directly. (MSDN)
Класс DynamicObject public class DynamicObject : IDynamicMetaObjectProvider { public virtual bool TryGetMember(GetMemberBinder binder, out object result); public virtual bool TryInvoke(InvokeBinder binder, object[] args, out object result); public virtual bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result); public virtual bool TrySetMember(SetMemberBinder binder, object value);... }
COM Interop До: using Word = Microsoft.Office.Interop.Word; namespace COMInterop { class Program { static void Main(string[] args) { Word.Application wordApplication = new Word.Application() { Visible = true }; object miss = System.Reflection.Missing.Value; object ro = true; object fileName wordApplication.Documents.Open(ref fileName, ref miss, ref ro, ref miss, ref miss, ref miss, ref miss, ref, miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref mis,ref miss); }
COM Interop После: using Word = Microsoft.Office.Interop.Word; namespace COMInterop { class Program { static void Main(string[] args) { Word.Application wordApplication = new Word.Application() {Visible = true}; ReadOnly: true); }
Работа с JSON Более легкая коммуникация между клиентским и серверным кодом Более простая работа с JSON Работа с DOM-элементами, как с.NET классами
Диначические языки IronPython IronRuby IronLisp IronJS … Вы можете создать свой "The DLR is the Language of Languages" (c) Kevin Hazzard
Iron Python Разрабатывается Microsoft Community постоянно растет Open source Не полная поддержка Cpython Некоторые популярные проекты уже портированы на IronPython (Django, Trac)
Ссылки NETre4pt0.aspxcodeproject.com/K 67.aspx
Вопросы