IronRuby: внутренности и примеры использования

1,237 views
1,183 views

Published on

По материалам конференции .NET разработчиков - www.dotnetconf.ru

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,237
On SlideShare
0
From Embeds
0
Number of Embeds
330
Actions
Shares
0
Downloads
4
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

IronRuby: внутренности и примеры использования

  1. 1. 3-я конференция .NET разработчиков<br />25 сентября 2011<br />IronRuby:внутренности и примеры использования<br />Рахматиллаев Тимур<br />IndyCode<br />http://muyou.koumakan.jp<br />
  2. 2. Ruby – он такой…<br /><ul><li>Динамический
  3. 3. Рефлективный
  4. 4. Интерпретируемый
  5. 5. Объектно-ориентированный
  6. 6. С динамической и утиной типизациями
  7. 7. Развитые механизмы метапрограммирования</li></li></ul><li>Железные рубиныиз копей Microsoft<br />IronRuby– реализация языка программирования Ruby на платформе Microsoft .NET, основанная на использовании библиотеки DLR.<br />
  8. 8. Нужно больше динамики!<br />Dynamic Language Runtime(DLR) – библиотека, предоставляющая сервисы для реализации спецификации любого языка программирования. Основана на подходе представления функциональности конструкций языка с помощью узлов абстрактного синтаксического дерева.<br />
  9. 9. DLR и IronRuby<br />IronRuby<br />DLR<br />Текст<br />AST<br />Программа на Ruby<br />Синтаксический <br />разбор текста<br />Binder<br />CIL-код<br />FCL/BCL<br />ВМ CLR<br />Выполнение <br />CIL-кода<br />
  10. 10. Возможности DLR<br />
  11. 11. Взгляд на Ruby со стороны<br />
  12. 12. Вызов кода на IronRubyиз .NET (C#)<br /><ul><li>Создание экземпляра среды исполнения IronRuby
  13. 13. Загрузка файлов с кодом (и их выполнение) или выполнение строк кода
  14. 14. Операции вызова методов, получения объектов, работы с переменными (локальными и глобальными)</li></li></ul><li>Можно все!<br />
  15. 15. А если наоборот?<br /><ul><li>Загружаем необходимую сборку (сборки)
  16. 16. Создаем экземпляры CLR-классови вызываем их методы
  17. 17. ?????
  18. 18. PROFIT
  19. 19. Можно использовать методы расширения и грабить корованы</li></li></ul><li>Когда использовать IronRuby<br />
  20. 20. Рост сложности программной системы<br /><ul><li>На начальном этапе разработки всю систему легко удержать в голове
  21. 21. Объем кода, реализующего логику бизнес-процессов, растет
  22. 22. Выделение новых слоев абстракции не дает четкого видения логики из-за недостаточности выразительных средств</li></li></ul><li>Головокружительная абстракция<br />
  23. 23. Domain Specific Language<br /><ul><li>Позволяет задавать правила поведения объектов в соответствии с бизнес-логикой в декларативном представлении
  24. 24. Качественно новый уровень абстракции
  25. 25. Сложность/простота определения решения задачи, стоящей перед DSL, полностью зависит от выразительности его синтаксических средств</li></li></ul><li>IronRubyкак SDK для создания DSL<br /><ul><li>Процесс написания DSL (с нуля):</li></ul>Определение абстрактного синтаксиса<br />Определение конкретного синтаксиса<br />Определение правил горизонтальной и вертикальной трансформации<br />Написание синтаксического анализатора и транслятора<br />Возможно, написание интерпретатора<br />
  26. 26. IronRubyкак SDK для создания DSL<br /><ul><li>Написание DSL с помощью IronRuby</li></ul>Определение конкретного синтаксиса<br />
  27. 27. Описываем ферму<br />ферма {<br /> морковка 2.шт <br /> баклажан 2.кг<br /> свинья уровень: 80<br />}<br />
  28. 28. Итоги<br />IronRubyпозволяет быстро создавать языки предметной области<br />Предоставляет механизмы синтаксического разбора исходного кода<br />Осуществляет вертикальную трансформацию<br />Имеет поддержку во многих редакторах<br />Используя метапрограммированиеможно добиться высокой гибкости и разнообразия языковых конструкций DSL<br />
  29. 29. Это работает!<br />
  30. 30. Проект Gestalt<br />Silverlight-приложение, использующее DLR для предоставления возможности использовать IronRubyкак замену JavaScript в качестве языка для работы с DOM-деревом<br />
  31. 31. Ruby… в теге script?!<br /><inputid="sayhello"type="button"value="Say, Hello!"/><br /><scripttype="text/ruby"><br />defonclick(s,e)<br />window.alert"Hello, World!"<br />end<br />document.sayhello.attach_event('onclick',<br />System::EventHandler[<br />System::Windows::Browser::HtmlEventArgs<br />].new(method(:onclick))<br /> )<br /></script><br />
  32. 32. Немного алхимии<br />Используем Gestalt<br />
  33. 33. Ссылки<br /><ul><li>Сайт проекта IronRubyhttp://ironruby.net/
  34. 34. Сайт проекта Gestalthttp://visitmix.com/labs/gestalt/
  35. 35. Раздел IronRubyна Ruby Forumhttp://www.ruby-forum.com/forum/ironruby</li></li></ul><li>Спасибо за внимание<br />Тимур Рахматиллаев<br />IndyCode<br />muyou.prj@gmail.com<br />twitter.com/eskat0n<br />

×