D           ynamic   L   anguage        R        untime
                          Скриптовые языки на платформе DLR,
                              способы автоматизации рутинной
                                 работы с их помощью, а также
                          интегрирование в конечное приложение



Косухин Константин
Зачем?
•   Создание динамических языков на платформе .NET
•   Возможность динамического программирования в C# и VB.NET
•   Платформа Java давно это имеет
Dynamic Typing
•   Позднее связывание
•   Утиная типизация
•   Схож с технологией Reflection
    (+IDynamicMetaObjectProvider)
Dynamic Invocation
 CallSite   Binder   Expression
Expression Trees (С#)
1. Expression<Func<int, string>> f = i => i.ToString();
• Выражение может быть записано только в одну строку
2. dynamic
• Код, записанный с использованием переменной такого типа, собирается в
    Expression с runtime байндингом



dynamic d = GetFoobar();   Expression                        Привязка к .NET
   d.CallMethod(42);                      DLR/CLR                 коду
                              Tree
Expression Trees (.NET)
•   Набор выражений для создания алгоритмов (тело функции)
•   Статическая и динамическая типизация


                                                 Block

int i = 2;
while(true) {                         Assign             Loop
  if(i >= 5) {
    break;
  }                                            IfThen    PostIncrementAssign
  i++;
}
                                   GreaterThanOrEqual     Break
Языки
•   IronPython   •   Powershell   •   Nua (Lua)   •   IronSmalltalk
•   Phalanger    •   IronJS       •   IronLogo    •   DLRBasic
•   IronRuby     •   IronScheme
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остинг
          Scope


Runtime


                            Compiled
          Engine   Source
                             Code
Демо
Хостинг в приложении
Безопасность
•   Скрипт имеет доступ ко всему, что есть в домене
•   Создавайте скриптам отдельный домен (sandboxing)
•   Рекомендуется выполнять скрипты только с ограниченными правами
•   DLR помогает просто общаться между доменами — ключевые сервисы
    наследуются от класса MarshalByRefObject
Автоматизация Работы
•   Поддержка большинства сценариев со стандартной библиотекой языка
•   Интеграция с WinForms и WPF
•   Continuous Integration
Почитать
http://www.ironpythoninaction.com/
http://www.ironpython.info/index.php/Main_Page
http://ironjs.wordpress.com/
Вопросы?
Константин Косухин

     k0st1x@ya.ru


     konstantin.kosuhin

Специально для GetDev.NET

Dynamic Language Runtime

  • 1.
    D ynamic L anguage R untime Скриптовые языки на платформе DLR, способы автоматизации рутинной работы с их помощью, а также интегрирование в конечное приложение Косухин Константин
  • 2.
    Зачем? • Создание динамических языков на платформе .NET • Возможность динамического программирования в C# и VB.NET • Платформа Java давно это имеет
  • 3.
    Dynamic Typing • Позднее связывание • Утиная типизация • Схож с технологией Reflection (+IDynamicMetaObjectProvider)
  • 4.
    Dynamic Invocation CallSite Binder Expression
  • 5.
    Expression Trees (С#) 1.Expression<Func<int, string>> f = i => i.ToString(); • Выражение может быть записано только в одну строку 2. dynamic • Код, записанный с использованием переменной такого типа, собирается в Expression с runtime байндингом dynamic d = GetFoobar(); Expression Привязка к .NET d.CallMethod(42); DLR/CLR коду Tree
  • 6.
    Expression Trees (.NET) • Набор выражений для создания алгоритмов (тело функции) • Статическая и динамическая типизация Block int i = 2; while(true) { Assign Loop if(i >= 5) { break; } IfThen PostIncrementAssign i++; } GreaterThanOrEqual Break
  • 7.
    Языки • IronPython • Powershell • Nua (Lua) • IronSmalltalk • Phalanger • IronJS • IronLogo • DLRBasic • IronRuby • IronScheme
  • 8.
    IronPython Имплементация языка Python •Имеет REPL • Интеграция в Visual Studio • Отладка • Компоновки в исполняемый файл
  • 9.
    Phalanger Имплементация языка PHP •По заявлениям авторов, WordPress работает в 4 раза быстрее, чем на классическом PHP • Компоновка в исполняемый файл • Поддержка нативных PHP расширений (x86 only)
  • 10.
    IronRuby Имплементация языка Ruby •Имеет REPL • Отладка • Gems
  • 11.
    IronJS Имплементация языка JavaScript •ECMAScript 3.0 • Половина кода написана на F# • По производительности превзошел IE8 • Работает на CLRv2
  • 12.
    Xостинг Scope Runtime Compiled Engine Source Code
  • 13.
  • 14.
    Безопасность • Скрипт имеет доступ ко всему, что есть в домене • Создавайте скриптам отдельный домен (sandboxing) • Рекомендуется выполнять скрипты только с ограниченными правами • DLR помогает просто общаться между доменами — ключевые сервисы наследуются от класса MarshalByRefObject
  • 15.
    Автоматизация Работы • Поддержка большинства сценариев со стандартной библиотекой языка • Интеграция с WinForms и WPF • Continuous Integration
  • 16.
  • 17.
    Вопросы? Константин Косухин k0st1x@ya.ru konstantin.kosuhin Специально для GetDev.NET