IronRuby : внутренности и примеры использования
description
Transcript of IronRuby : внутренности и примеры использования
IronRuby: внутренности и примеры использования
Рахматиллаев ТимурIndyCode
http://muyou.koumakan.jp
3-я конференция .NET разработчиков25 сентября 2011
Ruby – он такой…
• Динамический• Рефлективный• Интерпретируемый• Объектно-ориентированный• С динамической и утиной типизациями• Развитые механизмы
метапрограммирования
Железные рубины из копей Microsoft
IronRuby – реализация языка программирования Ruby на платформе Microsoft .NET, основанная на использовании библиотеки DLR.
Нужно больше динамики!
Dynamic Language Runtime (DLR) – библиотека, предоставляющая сервисы для реализации спецификации любого языка программирования. Основана на подходе представления функциональности конструкций языка с помощью узлов абстрактного синтаксического дерева.
DLR и IronRuby
IronRubyПрограмма на Ruby
Синтаксический разбор текста
DLRТекст AST
FCL/BCL
BinderCIL-код
ВМ CLRВыполнение CIL-кода
Возможности DLR
Взгляд на Ruby со стороны
Вызов кода на IronRuby из .NET (C#)
• Создание экземпляра среды исполнения IronRuby
• Загрузка файлов с кодом (и их выполнение) или выполнение строк кода
• Операции вызова методов, получения объектов, работы с переменными (локальными и глобальными)
Можно все!
А если наоборот?
• Загружаем необходимую сборку (сборки)• Создаем экземпляры CLR-классов и
вызываем их методы• ?????• PROFIT
• Можно использовать методы расширения и грабить корованы
Когда использовать IronRuby
Рост сложности программной системы
• На начальном этапе разработки всю систему легко удержать в голове
• Объем кода, реализующего логику бизнес-процессов, растет
• Выделение новых слоев абстракции не дает четкого видения логики из-за недостаточности выразительных средств
Головокружительная абстракция
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?!<input id="sayhello" type="button" value="Say,
Hello!" />
<script type="text/ruby"> def onclick(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