240 likes | 456 Views
3 -я конференция .NET разработчиков 2 5 сентября 2011. IronRuby : внутренности и примеры использования. Рахматиллаев Тимур IndyCode http://muyou.koumakan.jp. Ruby – он такой…. Динамический Рефлективный Интерпретируемый Объектно-ориентированный С динамической и утиной типизациями
E N D
3-я конференция .NET разработчиков 25 сентября 2011 IronRuby:внутренности и примеры использования Рахматиллаев Тимур IndyCode http://muyou.koumakan.jp
Ruby – он такой… • Динамический • Рефлективный • Интерпретируемый • Объектно-ориентированный • С динамической и утиной типизациями • Развитые механизмы метапрограммирования
Железные рубиныиз копей Microsoft • IronRuby– реализация языка программирования Ruby на платформе Microsoft .NET, основанная на использовании библиотеки DLR.
Нужно больше динамики! • Dynamic Language Runtime(DLR) – библиотека, предоставляющая сервисы для реализации спецификации любого языка программирования. Основана на подходе представления функциональности конструкций языка с помощью узлов абстрактного синтаксического дерева.
DLR и IronRuby IronRuby DLR Текст AST Программа на Ruby Синтаксический разбор текста Binder CIL-код ВМ CLR FCL/BCL Выполнение CIL-кода
Вызов кода на IronRubyиз .NET (C#) • Создание экземпляра среды исполнения IronRuby • Загрузка файлов с кодом (и их выполнение) или выполнение строк кода • Операции вызова методов, получения объектов, работы с переменными (локальными и глобальными)
А если наоборот? • Загружаем необходимую сборку (сборки) • Создаем экземпляры CLR-классови вызываем их методы • ????? • PROFIT • Можно использовать методы расширения и грабить корованы
Рост сложности программной системы • На начальном этапе разработки всю систему легко удержать в голове • Объем кода, реализующего логику бизнес-процессов, растет • Выделение новых слоев абстракции не дает четкого видения логики из-за недостаточности выразительных средств
Domain Specific Language • Позволяет задавать правила поведения объектов в соответствии с бизнес-логикой в декларативном представлении • Качественно новый уровень абстракции • Сложность/простота определения решения задачи, стоящей перед DSL, полностью зависит от выразительности его синтаксических средств
IronRubyкак SDK для создания DSL • Процесс написания DSL (с нуля): • Определение абстрактного синтаксиса • Определение конкретного синтаксиса • Определение правил горизонтальной и вертикальной трансформации • Написание синтаксического анализатора и транслятора • Возможно, написание интерпретатора
IronRubyкак SDK для создания DSL • Написание DSL с помощью IronRuby • Определение конкретного синтаксиса
Описываем ферму • ферма { • морковка 2.шт • баклажан 2.кг • свинья уровень: 80 • }
Итоги • IronRubyпозволяет быстро создавать языки предметной области • Предоставляет механизмы синтаксического разбора исходного кода • Осуществляет вертикальную трансформацию • Имеет поддержку во многих редакторах • Используя метапрограммированиеможно добиться высокой гибкости и разнообразия языковых конструкций DSL
Проект Gestalt • Silverlight-приложение, использующее DLR для предоставления возможности использовать IronRubyкак замену JavaScript в качестве языка для работы с DOM-деревом
Ruby… в теге script?! • <inputid="sayhello"type="button"value="Say, Hello!"/> • <scripttype="text/ruby"> • defonclick(s,e) • window.alert"Hello, World!" • end • document.sayhello.attach_event('onclick', • System::EventHandler[ • System::Windows::Browser::HtmlEventArgs • ].new(method(:onclick)) • ) • </script>
Немного алхимии Используем Gestalt
Ссылки • Сайт проекта IronRubyhttp://ironruby.net/ • Сайт проекта Gestalthttp://visitmix.com/labs/gestalt/ • Раздел IronRubyна Ruby Forumhttp://www.ruby-forum.com/forum/ironruby
Спасибо за внимание • Тимур Рахматиллаев • IndyCode • muyou.prj@gmail.com • twitter.com/eskat0n