Dynamic Language Runtime

763 views

Published on

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

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
763
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
6
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Dynamic Language Runtime

  1. 1. Dynamic Language Runtime Евгений Рыбак. Tieto
  2. 2. Содержание <ul><li>Часть I Введение </li></ul><ul><li>Часть II Архитектура </li></ul><ul><li>Часть I II Ядро DLR </li></ul><ul><li>Часть IV Common Hosting </li></ul><ul><li>Часть V Вопросы & Ответы </li></ul>
  3. 3. <ul><li>Часть I </li></ul><ul><li>Введение </li></ul>
  4. 4. Введение Первый анонс: MIX07 – 30 апреля 2007 года
  5. 5. Введение Основные цели : Портирование динамических языков на платформу . NET Добавление динамических возможностей в существующие языки ( C#, VB.NET)
  6. 6. <ul><li>Часть II </li></ul><ul><li>Архитектура </li></ul>
  7. 7. Runtime Hosting model Language Implementation Архитектура DLR
  8. 8. Dynamic Language Runtime IronPython Silverlight Others… VB.NET C# IronRuby Object Binder JavaScript Binder COM Binder Ruby Binder Python Binder Архитектура
  9. 9. Протокол взаимодействия: 12 общих операций Бинарные операции Работа с методами Работа с индексаторами Архитектура
  10. 10. Итак, DLR Имеет 12 общих операций м/д языками Позволяет динамическим и статическим языкам работать вместе Состоит из 3 компонент Надстройка над CLR
  11. 11. <ul><li>Часть III </li></ul><ul><li>Ядро DLR </li></ul>
  12. 12. Ядро DLR Rules Binders CallSite DynamicObject ExpandoObject COM Interop Utilities
  13. 13. Ядро DLR 1 ) obj – класс или объект? 2 ) Add – метод или делегат? 3 ) Нужно ли просматривать иерархию наследования? 4 ) А что это такое в параметрах? 5 ) Подходят ли эти параметры к методу или делегату? obj. Add (1, 2)
  14. 14. Ядро DLR 6 ) Не подходят? А существует ли преобразование между типами? 7 ) Явное или неявное? 8 ) Пользовательское преобразование? 9 ) ... 10 ) ... obj. Add (1, 2)
  15. 15. CallSite<T> CallSite<T> механизм к э ширования операций
  16. 16. CallSite<T> 3 независимых кэша : L0: Делегат Target L1: История CallSite- а L2: История похожих CallSite- ов
  17. 17. Ядро DLR - Кэширование <ul><li>Указывает на динамически </li></ul><ul><li>скомпилированный метод </li></ul><ul><li>Производительность , </li></ul><ul><li>близка к обычному </li></ul><ul><li>статическому методу </li></ul><ul><li>Дорогая операция </li></ul><ul><li>обновления </li></ul>L0 : Target
  18. 18. Ядро DLR - Кэширование <ul><li>История правил, с </li></ul><ul><li>которыми был </li></ul><ul><li>использован данный </li></ul><ul><li>C allSite </li></ul><ul><li>Дешевая операция </li></ul><ul><li>обновления </li></ul>L0 : Target L1 : Update
  19. 19. Ядро DLR - Кэширование <ul><li>История правил, с </li></ul><ul><li>которыми был </li></ul><ul><li>использованны </li></ul><ul><li>эквивалентные CallSite-ый </li></ul><ul><li>Дешевая операция </li></ul><ul><li>обновления </li></ul>L0 : Target L1 : Update L2 : Update
  20. 20. Ядро DLR - Binders Binder: Пример : GetMemenerBinder obj.Method SetMemberBinder obj.Property = 100 GetIndexBinder obj[1] или obj[“key”] Binders - ключевые компоненты , отвечающие за выполнение операций
  21. 21. Результат работы Binder -а – правило ( Rule) X + Y Ядро DLR - Binders If (x is int && y is int ) { return ( int )x + ( int )y } ( int )x + ( int )y
  22. 22. Ядро DLR - Кэширование L0 : Target if (x is int && y is int ) { return ( int )x + ( int )y } site.Update(…)
  23. 23. Ядро DLR - Кэширование L0 : Target L1 : Update Локальная история: IList<Rule>
  24. 24. Ядро DLR - Кэширование L0 : Target L1 : Update L2 : Update Глобальная история: IList<Rule>
  25. 25. DynamicObject Точка входа в протокол взаимодействия между языками Облегченная реализация всех возможных дин амических операций
  26. 26. Эффективная реализация динамического объекта Позволяет : Добавлять новые/Устанавливать/ Извлекать члены класса ExpandoObject
  27. 27. <ul><li>Часть IV </li></ul><ul><li>Common Hosting </li></ul>
  28. 28. Common Hosting Хостинг DLR языков в . NET приложениях Например : Выполнение IronPython, IronRuby кода в .NET приложении
  29. 29. Common Hosting Возможности: 1 ) Исполнение фрагмента кода <ul><ul><ul><li>2 ) Исполнение файлов *.py или *.rb </li></ul></ul></ul> 3 ) Создание области исполнения ( Scope) <ul><ul><ul><li>4 ) Запись/чтение переменных из (Scope) </li></ul></ul></ul> 5 ) Компиляция кода <ul><ul><ul><li>6 ) ... </li></ul></ul></ul>
  30. 30. Common Hosting Процесс Домены приложения
  31. 31. Common Hosting Домен приложения ScriptRuntime
  32. 32. Common Hosting ScriptRuntime ScriptScope
  33. 33. Common Hosting ScriptRuntime .NET приложение Script Scope (IronPython)
  34. 34. Common Hosting ScriptRuntime .NET приложение Script Scope (IronPython)
  35. 35. Common Hosting ДЕМО
  36. 36. Итого - Архитектура Часть II Состоит из 3 компонент Надстройка над CLR Имеет 12 общих операций м/д языками
  37. 37. Итого - Кэширование Часть II Часть III Механизм кэширования 3 независимых кэша Возможности для авторов библиотек
  38. 38. Итого – Common Hosting Часть II Часть III Часть VI Взаимодействие .NET и динамических языков ( IronPython)
  39. 39. <ul><li>Часть V </li></ul><ul><li>Вопросы & Ответы </li></ul>
  40. 40. СПАСИБО ЗА ВНИМАНИЕ http://belarusdotnet.org http://belarusdotnet.org/blogs/Engler

×