18.08.2012 meta ruby
TRANSCRIPT
1
Метапрограммирование в Ruby
2
О чем пойдет речь?
• Метапрограммирование, техники М., применение М.
• Насколько Ruby предрасположен к метапрограммированию? и почему?
• Инструменты метапрограммирования в Ruby
• Примеры применения в популярных гемах (ActiveRecord, oAuth)
3
Метапрограммирование
3
4
Техники метапрограммирования
• Компилируемые
• Интерпретируемые
• Гибридные
5
Техники метапрограммирования
• Компилируемые
• Шаблоны, макросы и параметрический полиморфизмом
• Оптимизирующая прекомпиляция
• Генераторы исходного кода для компилируемых языков
• DSL
6
Техники метапрограммирования
• Интерпретируемые
• Эвалуациея кода (eval)
• LOP
• Декларативные языки
• Языки запросов
7
Техники метапрограммирования
• Гибридные
• Интроспекция
• Динамическая интерпретация метамоделей
• Распределенная интерпретация метамоделей
8
Ruby &&
Meta programmingMeta programmingMeta programming
• Classes are open
• Runtime Class defenitions
• Any called method have a reciver
• Class «==» Object
9
10
Классы открыты
11
Определения работают
12
Классы - это объекты?
1313
14
Методы класса... они не существуют?они не существуют?
15
Интроспекция
16
• Object#respond_to?
• Object#class
• Object#methods
• Object#class.superclass
• Object#class.ancestors
• Object#private_instance_methods
• Object#publuc_instance_methods
• ...
17
Динамический вызов методов
18
• object_instance.hello(args)
• object_instance.send(«{#hello}», args)
• object_instance.send(:hello, args)
1919
2020
21
missing_method
22
• https://gist.github.com/rails/rails/blob/master/activerecord/lib/active_record/dynamic_matchers.rb
22
23
define_method
24
pattern dispatch
25
26
store evaluation
27
28
Инструменты метапрограммирования
в Rubyв Ruby• Получение, установка значений и уничтожение
переменных
• Получение, установка значений и уничтожение констант
• Добавление и удаление методов
• Динамическое выполнение кода
• Методы для рефлексии (интроспекции)
29
Вопросы?