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

Preview:

DESCRIPTION

3 -я конференция .NET разработчиков 2 5 сентября 2011. IronRuby : внутренности и примеры использования. Рахматиллаев Тимур IndyCode http://muyou.koumakan.jp. Ruby – он такой…. Динамический Рефлективный Интерпретируемый Объектно-ориентированный С динамической и утиной типизациями - PowerPoint PPT Presentation

Citation preview

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

Спасибо за внимание

Тимур РахматиллаевIndyCode

muyou.prj@gmail.comtwitter.com/eskat0n