evgeny rybak presentation

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

Upload: sef2009

Post on 12-Jul-2015

293 views

Category:

Documents


0 download

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