Dynamic Language Runtime

40
Dynamic Language Runtime Евгений Рыбак. Tieto

description

Евгений Рыбак, Tieto, Минск, Беларусь

Transcript of Dynamic Language Runtime

Page 1: Dynamic Language Runtime

Dynamic Language Runtime

Евгений Рыбак. Tieto

Page 2: Dynamic Language Runtime

Содержание

• Часть I Введение

• Часть II Архитектура

• Часть III Ядро DLR

• Часть IV Common Hosting

• Часть V Вопросы & Ответы

Page 3: Dynamic Language Runtime

Часть I

Введение

Page 4: Dynamic Language Runtime

Введение

Первый анонс:MIX07 – 30 апреля 2007 года

Page 5: Dynamic Language Runtime

Введение

Основные цели:

Портирование динамических языков на платформу .NET

Добавление динамических возможностей в существующие языки ( C#, VB.NET)

Page 6: Dynamic Language Runtime

Часть II

Архитектура

Page 7: Dynamic Language Runtime

Runtime

Hosting model

Language Implementation

Архитектура

DLR

Page 8: Dynamic Language Runtime

Dynamic Language Runtime

IronPython

Silverlight

Others…VB.NETC#IronRuby

ObjectObjectBinderBinder

JavaScriptJavaScriptBinderBinder

COMCOMBinderBinder

RubyRubyBinderBinder

PythonPythonBinderBinder

Архитектура

Page 9: Dynamic Language Runtime

Протокол взаимодействия:12 общих операций

Бинарные операцииРабота с методамиРабота с индексаторами

Архитектура

Page 10: Dynamic Language Runtime

Итак, DLR

Имеет 12 общих операций м/дязыками

Позволяет динамическим и статическим языкам работать вместе

Состоит из 3 компонентНадстройка над CLR

Page 11: Dynamic Language Runtime

Часть III

Ядро DLR

Page 12: Dynamic Language Runtime

Ядро DLR

Rules

Binders

CallSite

DynamicObject

ExpandoObject

COM Interop

Utilities

Page 13: Dynamic Language Runtime

1) obj – класс или объект?

2) Add – метод или делегат?

3) Нужно ли просматривать иерархию наследования?

4) А что это такое в параметрах?

5) Подходят ли эти параметры к методу или делегату?

obj. Add (1, 2)

Ядро DLR

Page 14: Dynamic Language Runtime

6) Не подходят? А существует ли преобразование между типами?

7) Явное или неявное?

8) Пользовательское преобразование?

9) ...

10) ...

obj. Add (1, 2)

Ядро DLR

Page 15: Dynamic Language Runtime

CallSite<T>

CallSite<T>механизм кэширования операций

Page 16: Dynamic Language Runtime

CallSite<T>

3 независимых кэша:

L0: Делегат Target

L1: История CallSite-а

L2: История похожих CallSite-ов

Page 17: Dynamic Language Runtime

Ядро DLR - Кэширование

• Указывает на динамически скомпилированный метод• Производительность, близка к обычному статическому методу• Дорогая операция обновления

L0 : Target

Page 18: Dynamic Language Runtime

Ядро DLR - Кэширование

• История правил, с которыми был использован данный CallSite

• Дешевая операция обновления

L0 : Target

L1 : Update

Page 19: Dynamic Language Runtime

Ядро DLR - Кэширование

• История правил, с которыми был использованны эквивалентные CallSite-ый

• Дешевая операция обновления

L0 : Target

L1 : Update

L2 : Update

Page 20: Dynamic Language Runtime

Ядро DLR - Binders

Binder: Пример:

GetMemenerBinder obj.Method

SetMemberBinder obj.Property = 100

GetIndexBinder obj[1] или obj[“key”]

Binders - ключевые компоненты,отвечающие за выполнение операций

Page 21: Dynamic Language Runtime

Результат работы Binder-а –правило (Rule)

X + Y

Ядро DLR - Binders

If (x is int && y is int) { return (int)x + (int)y }

(int)x + (int)y

Page 22: Dynamic Language Runtime

Ядро DLR - Кэширование

L0 : Target if (x is int && y is int) { return (int)x + (int)y }

site.Update(…)

Page 23: Dynamic Language Runtime

Ядро DLR - Кэширование

L0 : Target

L1 : Update Локальная история:

IList<Rule>

Page 24: Dynamic Language Runtime

Ядро DLR - Кэширование

L0 : Target

L1 : Update

L2 : Update

Глобальная история: IList<Rule>

Page 25: Dynamic Language Runtime

DynamicObject

Точка входа в протоколвзаимодействия между языками

Облегченная реализация всех возможных динамических операций

Page 26: Dynamic Language Runtime

Эффективная реализациядинамического объекта

Позволяет:Добавлять новые/Устанавливать/Извлекать члены класса

ExpandoObject

Page 27: Dynamic Language Runtime

Часть IV

Common Hosting

Page 28: Dynamic Language Runtime

Common Hosting

Хостинг DLR языков в .NET приложениях

Например:Выполнение IronPython, IronRubyкода в .NET приложении

Page 29: Dynamic Language Runtime

Common Hosting

Возможности:

1) Исполнение фрагмента кода

2) Исполнение файлов *.py или *.rb

3) Создание области исполнения (Scope)4) Запись/чтение переменных из (Scope)

5) Компиляция кода

6) ...

Page 30: Dynamic Language Runtime

Common Hosting

Процесс

Доменыприложения

Page 31: Dynamic Language Runtime

Common Hosting

Доменприложения

ScriptRuntime

Page 32: Dynamic Language Runtime

Common Hosting

ScriptRuntime

ScriptScope

Page 33: Dynamic Language Runtime

Common Hosting

ScriptRuntime

.NET приложение

ScriptScope(IronPython)

Page 34: Dynamic Language Runtime

Common Hosting

ScriptRuntime

.NET приложение

ScriptScope(IronPython)

Page 35: Dynamic Language Runtime

Common Hosting

ДЕМО

Page 36: Dynamic Language Runtime

Итого - Архитектура

Часть II

Состоит из 3 компонент

Надстройка над CLR

Имеет 12 общихопераций м/д языками

Page 37: Dynamic Language Runtime

Часть II

Часть III

Итого - Кэширование

Механизм кэширования3 независимых кэша

Возможности для авторов библиотек

Page 38: Dynamic Language Runtime

Часть II

Часть III

Часть VI

Итого – Common Hosting

Взаимодействие.NET и динамическихязыков (IronPython)

Page 39: Dynamic Language Runtime

Часть V

Вопросы & Ответы

Page 40: Dynamic Language Runtime

СПАСИБОЗА ВНИМАНИЕ

http://belarusdotnet.org

http://belarusdotnet.org/blogs/Engler