dynamic language runtime
DESCRIPTION
Евгений Рыбак, Tieto, Минск, БеларусьTRANSCRIPT
Dynamic Language Runtime
Евгений Рыбак. Tieto
Содержание
• Часть I Введение
• Часть II Архитектура
• Часть III Ядро DLR
• Часть IV Common Hosting
• Часть V Вопросы & Ответы
Часть I
Введение
Введение
Первый анонс:MIX07 – 30 апреля 2007 года
Введение
Основные цели:
Портирование динамических языков на платформу .NET
Добавление динамических возможностей в существующие языки ( C#, VB.NET)
Часть II
Архитектура
Runtime
Hosting model
Language Implementation
Архитектура
DLR
Dynamic Language Runtime
IronPython
Silverlight
Others…VB.NETC#IronRuby
ObjectObjectBinderBinder
JavaScriptJavaScriptBinderBinder
COMCOMBinderBinder
RubyRubyBinderBinder
PythonPythonBinderBinder
Архитектура
Протокол взаимодействия:12 общих операций
Бинарные операцииРабота с методамиРабота с индексаторами
Архитектура
Итак, DLR
Имеет 12 общих операций м/дязыками
Позволяет динамическим и статическим языкам работать вместе
Состоит из 3 компонентНадстройка над CLR
Часть III
Ядро DLR
Ядро DLR
Rules
Binders
CallSite
DynamicObject
ExpandoObject
COM Interop
Utilities
1) obj – класс или объект?
2) Add – метод или делегат?
3) Нужно ли просматривать иерархию наследования?
4) А что это такое в параметрах?
5) Подходят ли эти параметры к методу или делегату?
obj. Add (1, 2)
Ядро DLR
6) Не подходят? А существует ли преобразование между типами?
7) Явное или неявное?
8) Пользовательское преобразование?
9) ...
10) ...
obj. Add (1, 2)
Ядро DLR
CallSite<T>
CallSite<T>механизм кэширования операций
CallSite<T>
3 независимых кэша:
L0: Делегат Target
L1: История CallSite-а
L2: История похожих CallSite-ов
Ядро DLR - Кэширование
• Указывает на динамически скомпилированный метод• Производительность, близка к обычному статическому методу• Дорогая операция обновления
L0 : Target
Ядро DLR - Кэширование
• История правил, с которыми был использован данный CallSite
• Дешевая операция обновления
L0 : Target
L1 : Update
Ядро DLR - Кэширование
• История правил, с которыми был использованны эквивалентные CallSite-ый
• Дешевая операция обновления
L0 : Target
L1 : Update
L2 : Update
Ядро DLR - Binders
Binder: Пример:
GetMemenerBinder obj.Method
SetMemberBinder obj.Property = 100
GetIndexBinder obj[1] или obj[“key”]
Binders - ключевые компоненты,отвечающие за выполнение операций
Результат работы Binder-а –правило (Rule)
X + Y
Ядро DLR - Binders
If (x is int && y is int) { return (int)x + (int)y }
(int)x + (int)y
Ядро DLR - Кэширование
L0 : Target if (x is int && y is int) { return (int)x + (int)y }
site.Update(…)
Ядро DLR - Кэширование
L0 : Target
L1 : Update Локальная история:
IList<Rule>
Ядро DLR - Кэширование
L0 : Target
L1 : Update
L2 : Update
Глобальная история: IList<Rule>
DynamicObject
Точка входа в протоколвзаимодействия между языками
Облегченная реализация всех возможных динамических операций
Эффективная реализациядинамического объекта
Позволяет:Добавлять новые/Устанавливать/Извлекать члены класса
ExpandoObject
Часть IV
Common Hosting
Common Hosting
Хостинг DLR языков в .NET приложениях
Например:Выполнение IronPython, IronRubyкода в .NET приложении
Common Hosting
Возможности:
1) Исполнение фрагмента кода
2) Исполнение файлов *.py или *.rb
3) Создание области исполнения (Scope)4) Запись/чтение переменных из (Scope)
5) Компиляция кода
6) ...
Common Hosting
Процесс
Доменыприложения
Common Hosting
Доменприложения
ScriptRuntime
Common Hosting
ScriptRuntime
ScriptScope
Common Hosting
ScriptRuntime
.NET приложение
ScriptScope(IronPython)
Common Hosting
ScriptRuntime
.NET приложение
ScriptScope(IronPython)
Common Hosting
ДЕМО
Итого - Архитектура
Часть II
Состоит из 3 компонент
Надстройка над CLR
Имеет 12 общихопераций м/д языками
Часть II
Часть III
Итого - Кэширование
Механизм кэширования3 независимых кэша
Возможности для авторов библиотек
Часть II
Часть III
Часть VI
Итого – Common Hosting
Взаимодействие.NET и динамическихязыков (IronPython)
Часть V
Вопросы & Ответы
СПАСИБОЗА ВНИМАНИЕ
http://belarusdotnet.org
http://belarusdotnet.org/blogs/Engler