SlideShare a Scribd company logo
1 of 29
Метапрограммирование в
         Ruby



          1
О чем пойдет речь?

• Метапрограммирование, техники М.,
 применение М.
• Насколько Ruby предрасположен к
 метапрограммированию? и почему?
• Инструменты метапрограммирования в Ruby
• Примеры применения в популярных гемах
 (ActiveRecord, oAuth)

                     2
Метапрограммирование




         3
Техники
     метапрограммирования


• Компилируемые
• Интерпретируемые
• Гибридные



                     4
Техники
     метапрограммирования
• Компилируемые
 • Шаблоны, макросы и параметрический полиморфизмом
 • Оптимизирующая прекомпиляция
 • Генераторы исходного кода для компилируемых
   языков

 • DSL

                        5
Техники
     метапрограммирования

• Интерпретируемые
 • Эвалуациея кода (eval)
 • LOP
 • Декларативные языки
 • Языки запросов


                         6
Техники
     метапрограммирования

• Гибридные
 • Интроспекция
 • Динамическая интерпретация метамоделей
 • Распределенная интерпретация метамоделей



                        7
Ruby
                   &&
             Meta programming
             Meta programming
             Meta programming

• Classes are open
• Runtime Class defenitions
• Any called method have a reciver
• Class «==» Object


                      8
9
Классы открыты




      10
Определения работают




         11
Классы - это объекты?




          12
13
Методы класса...
они не существуют?
они не существуют?




        14
Интроспекция



     15
• Object#respond_to?
• Object#class
• Object#methods
• Object#class.superclass
• Object#class.ancestors
• Object#private_instance_methods
• Object#publuc_instance_methods
• ...
                       16
Динамический вызов
      методов


        17
• object_instance.hello(args)
• object_instance.send(«{#hello}», args)
• object_instance.send(:hello, args)




                     18
19
20
missing_method



      21
•   https://gist.github.com/rails/rails/blob/master/activerecord/lib/active_record
    /dynamic_matchers.rb




                                       22
define_method



      23
pattern dispatch



       24
25
store evaluation



       26
27
Инструменты
     метапрограммирования
                 в Ruby
                 в Ruby
• Получение, установка значений и уничтожение
 переменных
• Получение, установка значений и уничтожение
 констант
• Добавление и удаление методов
• Динамическое выполнение кода
• Методы для рефлексии (интроспекции)
                     28
Вопросы?



   29

More Related Content

Similar to 18.08.2012 meta ruby

Корпоративное приложение на Rails
Корпоративное приложение на RailsКорпоративное приложение на Rails
Корпоративное приложение на RailsAndrei Kaleshka
 
Debbug Rails Application For Dummies
Debbug Rails Application For DummiesDebbug Rails Application For Dummies
Debbug Rails Application For DummiesAndrey Subbota
 
Alexander Dymo - IT Jam 2009 - Ruby: Beaty Or The Beast
Alexander Dymo - IT Jam 2009 - Ruby: Beaty Or The BeastAlexander Dymo - IT Jam 2009 - Ruby: Beaty Or The Beast
Alexander Dymo - IT Jam 2009 - Ruby: Beaty Or The BeastAlexander Dymo
 
CodeFest 2013. Бурмако Е. — Макросы в Скале
CodeFest 2013. Бурмако Е. — Макросы в СкалеCodeFest 2013. Бурмако Е. — Макросы в Скале
CodeFest 2013. Бурмако Е. — Макросы в СкалеCodeFest
 
Ruby On Rails: Web-разработка по-другому!
Ruby On Rails: Web-разработка по-другому!Ruby On Rails: Web-разработка по-другому!
Ruby On Rails: Web-разработка по-другому!Constantin Kichinsky
 
Выступление Александра Крота из "Вымпелком" на Hadoop Meetup в рамках RIT++
Выступление Александра Крота из "Вымпелком" на Hadoop Meetup в рамках RIT++Выступление Александра Крота из "Вымпелком" на Hadoop Meetup в рамках RIT++
Выступление Александра Крота из "Вымпелком" на Hadoop Meetup в рамках RIT++Антон Шестаков
 
разработка бизнес приложений (6)
разработка бизнес приложений (6)разработка бизнес приложений (6)
разработка бизнес приложений (6)Alexander Gornik
 
разработка бизнес приложений (7)
разработка бизнес приложений (7)разработка бизнес приложений (7)
разработка бизнес приложений (7)Alexander Gornik
 
Лекция №1. Введение. Предмет "Структуры и алгоритмы обработки данных"
Лекция №1. Введение. Предмет "Структуры и алгоритмы обработки данных"Лекция №1. Введение. Предмет "Структуры и алгоритмы обработки данных"
Лекция №1. Введение. Предмет "Структуры и алгоритмы обработки данных"Nikolay Grebenshikov
 
Дизайн больших приложений в ФП
Дизайн больших приложений в ФПДизайн больших приложений в ФП
Дизайн больших приложений в ФПAlexander Granin
 
Разговор про Java 9. Extended version
Разговор про Java 9. Extended versionРазговор про Java 9. Extended version
Разговор про Java 9. Extended versionIvan Krylov
 
Roslyn API : SyntaxTree vs CodeDom, SemanticModel vs Reflection
Roslyn API: SyntaxTree vs CodeDom, SemanticModel vs ReflectionRoslyn API: SyntaxTree vs CodeDom, SemanticModel vs Reflection
Roslyn API : SyntaxTree vs CodeDom, SemanticModel vs ReflectionDenis Tsvettsih
 
Сергей Бережной — Шаблонизаторы
Сергей Бережной — ШаблонизаторыСергей Бережной — Шаблонизаторы
Сергей Бережной — ШаблонизаторыYandex
 
Programming Java - Lection 01 - Basics - Lavrentyev Fedor
Programming Java - Lection 01 - Basics - Lavrentyev FedorProgramming Java - Lection 01 - Basics - Lavrentyev Fedor
Programming Java - Lection 01 - Basics - Lavrentyev FedorFedor Lavrentyev
 
AI&BigData Lab. Варвара Красавина "Оптимизация поиска в системе LeadScanner с...
AI&BigData Lab. Варвара Красавина "Оптимизация поиска в системе LeadScanner с...AI&BigData Lab. Варвара Красавина "Оптимизация поиска в системе LeadScanner с...
AI&BigData Lab. Варвара Красавина "Оптимизация поиска в системе LeadScanner с...GeeksLab Odessa
 
Сергей Пузанков — Шаблонизаторы
Сергей Пузанков — ШаблонизаторыСергей Пузанков — Шаблонизаторы
Сергей Пузанков — ШаблонизаторыYandex
 
kranonit S15 Vladimir Melnik - Ruby on Rails, BDD
kranonit S15 Vladimir Melnik - Ruby on Rails, BDDkranonit S15 Vladimir Melnik - Ruby on Rails, BDD
kranonit S15 Vladimir Melnik - Ruby on Rails, BDDKrivoy Rog IT Community
 

Similar to 18.08.2012 meta ruby (20)

Корпоративное приложение на Rails
Корпоративное приложение на RailsКорпоративное приложение на Rails
Корпоративное приложение на Rails
 
Debbug Rails Application For Dummies
Debbug Rails Application For DummiesDebbug Rails Application For Dummies
Debbug Rails Application For Dummies
 
Rom - Ruby Object Mapper
Rom - Ruby Object MapperRom - Ruby Object Mapper
Rom - Ruby Object Mapper
 
Ryazan
RyazanRyazan
Ryazan
 
Alexander Dymo - IT Jam 2009 - Ruby: Beaty Or The Beast
Alexander Dymo - IT Jam 2009 - Ruby: Beaty Or The BeastAlexander Dymo - IT Jam 2009 - Ruby: Beaty Or The Beast
Alexander Dymo - IT Jam 2009 - Ruby: Beaty Or The Beast
 
CodeFest 2013. Бурмако Е. — Макросы в Скале
CodeFest 2013. Бурмако Е. — Макросы в СкалеCodeFest 2013. Бурмако Е. — Макросы в Скале
CodeFest 2013. Бурмако Е. — Макросы в Скале
 
Ruby On Rails: Web-разработка по-другому!
Ruby On Rails: Web-разработка по-другому!Ruby On Rails: Web-разработка по-другому!
Ruby On Rails: Web-разработка по-другому!
 
Выступление Александра Крота из "Вымпелком" на Hadoop Meetup в рамках RIT++
Выступление Александра Крота из "Вымпелком" на Hadoop Meetup в рамках RIT++Выступление Александра Крота из "Вымпелком" на Hadoop Meetup в рамках RIT++
Выступление Александра Крота из "Вымпелком" на Hadoop Meetup в рамках RIT++
 
разработка бизнес приложений (6)
разработка бизнес приложений (6)разработка бизнес приложений (6)
разработка бизнес приложений (6)
 
разработка бизнес приложений (7)
разработка бизнес приложений (7)разработка бизнес приложений (7)
разработка бизнес приложений (7)
 
Migrate!
Migrate!Migrate!
Migrate!
 
Лекция №1. Введение. Предмет "Структуры и алгоритмы обработки данных"
Лекция №1. Введение. Предмет "Структуры и алгоритмы обработки данных"Лекция №1. Введение. Предмет "Структуры и алгоритмы обработки данных"
Лекция №1. Введение. Предмет "Структуры и алгоритмы обработки данных"
 
Дизайн больших приложений в ФП
Дизайн больших приложений в ФПДизайн больших приложений в ФП
Дизайн больших приложений в ФП
 
Разговор про Java 9. Extended version
Разговор про Java 9. Extended versionРазговор про Java 9. Extended version
Разговор про Java 9. Extended version
 
Roslyn API : SyntaxTree vs CodeDom, SemanticModel vs Reflection
Roslyn API: SyntaxTree vs CodeDom, SemanticModel vs ReflectionRoslyn API: SyntaxTree vs CodeDom, SemanticModel vs Reflection
Roslyn API : SyntaxTree vs CodeDom, SemanticModel vs Reflection
 
Сергей Бережной — Шаблонизаторы
Сергей Бережной — ШаблонизаторыСергей Бережной — Шаблонизаторы
Сергей Бережной — Шаблонизаторы
 
Programming Java - Lection 01 - Basics - Lavrentyev Fedor
Programming Java - Lection 01 - Basics - Lavrentyev FedorProgramming Java - Lection 01 - Basics - Lavrentyev Fedor
Programming Java - Lection 01 - Basics - Lavrentyev Fedor
 
AI&BigData Lab. Варвара Красавина "Оптимизация поиска в системе LeadScanner с...
AI&BigData Lab. Варвара Красавина "Оптимизация поиска в системе LeadScanner с...AI&BigData Lab. Варвара Красавина "Оптимизация поиска в системе LeadScanner с...
AI&BigData Lab. Варвара Красавина "Оптимизация поиска в системе LeadScanner с...
 
Сергей Пузанков — Шаблонизаторы
Сергей Пузанков — ШаблонизаторыСергей Пузанков — Шаблонизаторы
Сергей Пузанков — Шаблонизаторы
 
kranonit S15 Vladimir Melnik - Ruby on Rails, BDD
kranonit S15 Vladimir Melnik - Ruby on Rails, BDDkranonit S15 Vladimir Melnik - Ruby on Rails, BDD
kranonit S15 Vladimir Melnik - Ruby on Rails, BDD
 

18.08.2012 meta ruby

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

Editor's Notes

  1. Итак, о чем же пойдет речь? В своем докладе я хочу рассказать: Кратко, что такое метапрограммирование, какие бывают техники метапрограммирования и их применение (весьма краткий экскурс в данную тему). После этого рассмотрим насколько Ruby предрасположен к метапрограммированию и почему. После этого пробежимся по инструментам метапрограммирования в Ruby и в заключение приведу примеры метапрограммирования в популярных гемах (ActiveRecord в Rails, oAuth и др)
  2. метапрограммирование — это парадигма построения кода информационной системы с динамическим изменением поведения или структуры в зависимости от данных, действий пользователя или взаимодействия с другими системами. Задачи метапрограммирования: повышение абстракции кода и его гибкости, повторное использование, ускорение разработки, упрощение межсистемной интеграции.
  3. James Whitcomb Riley «Если он ходит как утка, крякает как утка, то я буду называть его уткой!»