dynamic language runtime
DESCRIPTION
Видео и материалы со встречи: http://getdev.net/Event/dynamic-language-runtime В докладе рассмотрим скриптовые языки на платформе DLR, способы автоматизации рутинной работы с их помощью, а также интегрирование в конечное приложение.TRANSCRIPT
Dynamic Language Runtime
Косухин Константин
Скриптовые языки на платформе DLR, способы автоматизации рутинной
работы с их помощью, а также интегрирование в конечное приложение
Зачем?
• Создание динамических языков на платформе .NET• Возможность динамического программирования в C# и VB.NET• Платформа Java давно это имеет
Dynamic Typing
• Позднее связывание• Утиная типизация• Схож с технологией Reflection
(+IDynamicMetaObjectProvider)
Dynamic Invocation
CallSite Binder Expression
Expression Trees (С#)
DLR/CLR Привязка к .NET коду
Expression Tree
dynamic d = GetFoobar();d.CallMethod(42);
1. Expression<Func<int, string>> f = i => i.ToString();• Выражение может быть записано только в одну строку2. dynamic• Код, записанный с использованием переменной такого типа, собирается в
Expression с runtime байндингом
Expression Trees (.NET)
int i = 2;while(true) { if(i >= 5) { break; } i++;}
• Набор выражений для создания алгоритмов (тело функции)• Статическая и динамическая типизация
Block
Assign Loop
IfThenPostIncrementAssign
GreaterThanOrEqual Break
Языки
• IronPython• Phalanger• IronRuby
• Powershell• IronJS• IronScheme
• Nua (Lua)• IronLogo
• IronSmalltalk• DLRBasic
IronPython
Имплементация языка Python• Имеет REPL• Интеграция в Visual Studio• Отладка• Компоновки в исполняемый файл
Phalanger
Имплементация языка PHP• По заявлениям авторов, WordPress работает в 4 раза быстрее,
чем на классическом PHP• Компоновка в исполняемый файл• Поддержка нативных PHP расширений (x86 only)
IronRuby
Имплементация языка Ruby• Имеет REPL• Отладка• Gems
IronJSИмплементация языка JavaScript• ECMAScript 3.0• Половина кода написана на F#• По производительности превзошел IE8• Работает на CLRv2
Xостинг
Runtime
Engine Source
Scope
Compiled Code
Демо
Хостинг в приложении
Безопасность
• Скрипт имеет доступ ко всему, что есть в домене• Создавайте скриптам отдельный домен (sandboxing)• Рекомендуется выполнять скрипты только с ограниченными правами• DLR помогает просто общаться между доменами — ключевые сервисы
наследуются от класса MarshalByRefObject
Автоматизация Работы
• Поддержка большинства сценариев со стандартной библиотекой языка• Интеграция с WinForms и WPF• Continuous Integration
Почитать
http://www.ironpythoninaction.com/http://www.ironpython.info/index.php/Main_Pagehttp://ironjs.wordpress.com/
Вопросы?
Константин Косухин
konstantin.kosuhin
Специально для GetDev.NET