Dynamic Language Runtime Евгений Рыбак. Tieto
Содержание Часть IВведение Часть IIАрхитектура Часть IIIЯдро DLR Часть IVCommon Hosting Часть VВопросы & Ответы
Часть I Введение
Первый анонс: MIX07 – 30 апреля 2007 года
Введение Основные цели: Портирование динамических языков на платформу.NET Портирование динамических языков на платформу.NET Добавление динамических возможностей в существующие языки ( C#, VB.NET) Добавление динамических возможностей в существующие языки ( C#, VB.NET)
Часть II Архитектура
Runtime Hosting model Language Implementation Архитектура DLR
Dynamic Language Runtime IronPython Silverlight Others… VB.NET C# IronRuby Object Binder JavaScript Binder COM Binder Ruby Binder Python Binder Архитектура
Протокол взаимодействия: 12 общих операций Бинарные операции Работа с методами Работа с индексаторами Архитектура
Итак, DLR Имеет 12 общих операций м/д языками Позволяет динамическим и статическим языкам работать вместе Состоит из 3 компонент Надстройка над CLR
Часть III Ядро 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 механизм кэширования операций
CallSite 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
Ядро DLR - Кэширование L0 : Target L1 : Update L2 : Update Глобальная история: IList
DynamicObject Точка входа в протокол взаимодействия между языками Облегченная реализация всех возможных динамических операций
Эффективная реализация динамического объекта Позволяет: Добавлять новые/Устанавливать/ Извлекать члены класса ExpandoObject
Часть IV 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 Вопросы & Ответы
СПАСИБО ЗА ВНИМАНИЕ