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

24
IronRuby: внутренности и примеры использования Рахматиллаев Тимур IndyCode http://muyou.koumakan.jp 3-я конференция .NET разработчиков 25 сентября 2011

Upload: ataret

Post on 06-Jan-2016

58 views

Category:

Documents


0 download

DESCRIPTION

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

TRANSCRIPT

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

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

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

http://muyou.koumakan.jp

3-я конференция .NET разработчиков25 сентября 2011

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

Ruby – он такой…

• Динамический• Рефлективный• Интерпретируемый• Объектно-ориентированный• С динамической и утиной типизациями• Развитые механизмы

метапрограммирования

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

Железные рубины из копей Microsoft

IronRuby – реализация языка программирования Ruby на платформе Microsoft .NET, основанная на использовании библиотеки DLR.

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

Нужно больше динамики!

Dynamic Language Runtime (DLR) – библиотека, предоставляющая сервисы для реализации спецификации любого языка программирования. Основана на подходе представления функциональности конструкций языка с помощью узлов абстрактного синтаксического дерева.

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

DLR и IronRuby

IronRubyПрограмма на Ruby

Синтаксический разбор текста

DLRТекст AST

FCL/BCL

BinderCIL-код

ВМ CLRВыполнение CIL-кода

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

Возможности DLR

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

Взгляд на Ruby со стороны

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

Вызов кода на IronRuby из .NET (C#)

• Создание экземпляра среды исполнения IronRuby

• Загрузка файлов с кодом (и их выполнение) или выполнение строк кода

• Операции вызова методов, получения объектов, работы с переменными (локальными и глобальными)

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

Можно все!

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

А если наоборот?

• Загружаем необходимую сборку (сборки)• Создаем экземпляры CLR-классов и

вызываем их методы• ?????• PROFIT

• Можно использовать методы расширения и грабить корованы

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

Когда использовать IronRuby

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

Рост сложности программной системы

• На начальном этапе разработки всю систему легко удержать в голове

• Объем кода, реализующего логику бизнес-процессов, растет

• Выделение новых слоев абстракции не дает четкого видения логики из-за недостаточности выразительных средств

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

Головокружительная абстракция

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

Domain Specific Language

• Позволяет задавать правила поведения объектов в соответствии с бизнес-логикой в декларативном представлении

• Качественно новый уровень абстракции• Сложность/простота определения решения

задачи, стоящей перед DSL, полностью зависит от выразительности его синтаксических средств

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

IronRuby как SDK для создания DSL

• Процесс написания DSL (с нуля):• Определение абстрактного синтаксиса• Определение конкретного синтаксиса• Определение правил горизонтальной и

вертикальной трансформации• Написание синтаксического анализатора и

транслятора• Возможно, написание интерпретатора

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

IronRuby как SDK для создания DSL

• Написание DSL с помощью IronRuby• Определение конкретного синтаксиса

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

Описываем ферму

ферма { морковка 2.шт баклажан 2.кг свинья уровень: 80}

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

Итоги

IronRuby позволяет быстро создавать языки предметной области• Предоставляет механизмы синтаксического

разбора исходного кода• Осуществляет вертикальную трансформацию• Имеет поддержку во многих редакторах• Используя метапрограммирование можно

добиться высокой гибкости и разнообразия языковых конструкций DSL

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

Это работает!

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

Проект Gestalt

Silverlight-приложение, использующее DLR для предоставления возможности использовать IronRuby как замену JavaScript в качестве языка для работы с DOM-деревом

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

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>

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

Немного алхимии

Используем Gestalt

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

Ссылки

• Сайт проекта IronRubyhttp://ironruby.net/

• Сайт проекта Gestalthttp://visitmix.com/labs/gestalt/

• Раздел IronRuby на Ruby Forumhttp://www.ruby-forum.com/forum/ironruby

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

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

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

[email protected]/eskat0n