evgeny rybak presentation
Post on 12-Jul-2015
289 Views
Preview:
TRANSCRIPT
Содержание
• Часть I Введение
• Часть II Архитектура
• Часть III Ядро DLR
• Часть IV Common Hosting
• Часть V Вопросы & Ответы
Введение
Основные цели:
Портирование динамических языков на платформу .NET
Добавление динамических возможностей в существующие языки ( C#, VB.NET)
Dynamic Language Runtime
IronPython
Silverlight
Others…VB.NETC#IronRuby
ObjectObjectBinderBinder
JavaScriptJavaScriptBinderBinder
COMCOMBinderBinder
RubyRubyBinderBinder
PythonPythonBinderBinder
Архитектура
Протокол взаимодействия:12 общих операций
Бинарные операцииРабота с методамиРабота с индексаторами
Архитектура
Итак, DLR
Имеет 12 общих операций м/дязыками
Позволяет динамическим и статическим языкам работать вместе
Состоит из 3 компонентНадстройка над CLR
1) obj – класс или объект?
2) Add – метод или делегат?
3) Нужно ли просматривать иерархию наследования?
4) А что это такое в параметрах?
5) Подходят ли эти параметры к методу или делегату?
obj. Add (1, 2)
Ядро DLR
6) Не подходят? А существует ли преобразование между типами?
7) Явное или неявное?
8) Пользовательское преобразование?
9) ...
10) ...
obj. Add (1, 2)
Ядро DLR
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(…)
DynamicObject
Точка входа в протоколвзаимодействия между языками
Облегченная реализация всех возможных динамических операций
Эффективная реализациядинамического объекта
Позволяет:Добавлять новые/Устанавливать/Извлекать члены класса
ExpandoObject
Common Hosting
Хостинг DLR языков в .NET приложениях
Например:Выполнение IronPython, IronRubyкода в .NET приложении
Common Hosting
Возможности:
1) Исполнение фрагмента кода
2) Исполнение файлов *.py или *.rb
3) Создание области исполнения (Scope)4) Запись/чтение переменных из (Scope)
5) Компиляция кода
6) ...
Итого - Архитектура
Часть II
Состоит из 3 компонент
Надстройка над CLR
Имеет 12 общихопераций м/д языками
Часть II
Часть III
Итого - Кэширование
Механизм кэширования3 независимых кэша
Возможности для авторов библиотек
Часть II
Часть III
Часть VI
Итого – Common Hosting
Взаимодействие.NET и динамическихязыков (IronPython)
top related