O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.
Language Oriented Programming (LOP)            в действии,     как мы это делаем в JetBrains           Максим Мазин       ...
План● Зачем расширять языки?● Проблемы создания DSL  ○ Совместимость  ○ Поддержка со стороны IDE● Подход среды MPS  ○ Осно...
Зачем расширять языки?● Универсальные языки  ○ Ограниченный набор конструкций общего    назначения  ○ Избыточность в описа...
Неявные языковые расширенияПредметно-ориентированные конструкции вуниверсальных языках ● Блок synchronized в языке Java ● ...
Блок synchronized в JavaВместо                    Можно написатьlock.lock();               synchronized (lock) {try {     ...
Перегрузка операторов в C++Вместо                          Можно написатьComplex c = new Complex(1,2);   complex c(1,2);Co...
Языковые расширения● Существующие расширения  ○ Удовлетворяют нужды конкретных предметных    областей  ○ Встроены в универ...
План● Зачем расширять языки?● Проблемы создания DSL  ○ Совместимость  ○ Поддержка со стороны IDE● Подход среды MPS  ○ Осно...
СовместимостьКомпоненты совместимы, когда могутбыть использованы совместно даже,если были созданы независимо.
Совместимость              Конечная цельJava-библиотеки          Расширения Java ● Hibernate              ● DB Language ● ...
Совместимость           Библиотеки и расширения● Библиотеки совместимы  ○ Java + Hibernate = OK  ○ Java + Spring = OK  ○ J...
Совместимость         Грамматическая неоднозначность● Расширение Aint resultsCount = <some_code>;string s = "We found ${re...
Разработка языка                  Требования● Общая инфраструктура  ○ Синтаксис  ○ Система типов  ○ Операционная семантика...
Разработка языка                  Требования● Общая инфраструктура  ○ Синтаксис  ○ Система типов  ○ Операционная семантика...
Разработка языка                   Проблемы● Ресурсоемкая задача  ○ Сложные алгоритмы обработки кода  ○ Разнообразие подде...
Существующие решения                                     Языковая                   Совместимость                         ...
Общие проблемы● Существующие решения обеспечивают  ○ Либо совместимость языковых расширений  ○ Либо языковую инфраструктур...
План● Зачем расширять языки?● Проблемы создания DSL  ○ Совместимость  ○ Поддержка со стороны IDE● Подход среды MPS  ○ Осно...
JetBrains MPS● MetaProgramming System● Среда для создания и расширения языков● IDE для созданных языков и расширений
Основная идея   Текстовые грамматики приводят к          неоднозначности       Необходим иной подход      MPS работает с а...
Основная идея            Редактирование АСД● Предыдущие попытки  ○ Редактирование диаграмм  ○ Ограниченный набор применени...
Основная идея          Проекционный редактор● У каждого узла синтаксического дерева  есть проекция в редакторе MPS
Основная идея          Проекционный редактор● Каждый узел «живет» в своей ячейке● Узел отображается в виде  текстового/сим...
Основная идея       Обычный текст и проекции● У текстоподобного проекционного  редатора есть преимущества и  недостатки● П...
Создание языков● Инфраструктура создания языков  ○ Метамодель языка (абстрактный синтаксис)  ○ Система типов  ○ Редакторы ...
Готовые MPS-языки● Реализация Java™ в среде MPS +  расширения  ○ Функциональные коллекции (collections language)  ○ Даты (...
Демонстрация           Добавление конструкции read lockJava                             Java + РасширениеReadWriteLock l =...
План● Зачем расширять языки?● Проблемы создания DSL  ○ Совместимость  ○ Поддержка со стороны IDE● Подход среды MPS  ○ Осно...
Domain-Specific Languages● Среда MPS прекрасно подходит для  создания DSL● Общие языковые части могут быть  переиспользова...
Domain-Specific Languages         Пример
Существующие приложения● YouTrack – bug & issue tracker  ○ Целиком разработана в MPS● Языки для web-разработки  ○ DNQ (Dat...
Существующие приложения
Лицензия● Оpen-sourced● Apache 2.0 License   MPS — совсем    бесплатный
СсылкиСкачать MPShttp://www.jetbrains.com/mpsБлог про MPShttp://blogs.jetbrains.com/mps
Вопросы?
Próximos SlideShares
Carregando em…5
×

Language oriented programming_(lop)_в_действии_(максим_мазин,_add-2011)

Livros relacionados

Gratuito durante 30 dias do Scribd

Ver tudo
  • Seja o primeiro a comentar

Language oriented programming_(lop)_в_действии_(максим_мазин,_add-2011)

  1. 1. Language Oriented Programming (LOP) в действии, как мы это делаем в JetBrains Максим Мазин JetBrains Старший инженер-программист Maxim.Mazin@jetbrains.com
  2. 2. План● Зачем расширять языки?● Проблемы создания DSL ○ Совместимость ○ Поддержка со стороны IDE● Подход среды MPS ○ Основная идея ○ Демонстрация● MPS и предметно-ориентированные языки
  3. 3. Зачем расширять языки?● Универсальные языки ○ Ограниченный набор конструкций общего назначения ○ Избыточность в описании предметной области ○ Низкая сопровождаемость кода● Предметно-ориентированные языки ○ Более высокий уровень абстракции ○ Лучшая сопровождаемость кода
  4. 4. Неявные языковые расширенияПредметно-ориентированные конструкции вуниверсальных языках ● Блок synchronized в языке Java ● Перегрузка операторов в языке C++
  5. 5. Блок synchronized в JavaВместо Можно написатьlock.lock(); synchronized (lock) {try { // полезный код // полезный код }} finally { lock.unlock();}
  6. 6. Перегрузка операторов в C++Вместо Можно написатьComplex c = new Complex(1,2); complex c(1,2);Complex d = c.add(a); complex d = c + a;
  7. 7. Языковые расширения● Существующие расширения ○ Удовлетворяют нужды конкретных предметных областей ○ Встроены в универсальные языки● Новые расширения ○ Трудно встраивать ○ Риск несовместимости
  8. 8. План● Зачем расширять языки?● Проблемы создания DSL ○ Совместимость ○ Поддержка со стороны IDE● Подход среды MPS ○ Основная идея ○ Демонстрация● MPS и предметно-ориентированные языки
  9. 9. СовместимостьКомпоненты совместимы, когда могутбыть использованы совместно даже,если были созданы независимо.
  10. 10. Совместимость Конечная цельJava-библиотеки Расширения Java ● Hibernate ● DB Language ● Spring ● DI Language ● Joda Time ● Dates Language
  11. 11. Совместимость Библиотеки и расширения● Библиотеки совместимы ○ Java + Hibernate = OK ○ Java + Spring = OK ○ Java + Hibernate + Spring = OK● Языковые расширения — нет ○ Java + extension A = OK ○ Java + extension B = OK ○ Java + extensions A, B = возможна неоднозначность
  12. 12. Совместимость Грамматическая неоднозначность● Расширение Aint resultsCount = <some_code>;string s = "We found ${resultCount} results";● Расширение Bint resultCount = <some_code>;string t = "We found {resultCount} results";● A + B программа становится неоднозначнойstring s = "Account balance is ${balance}";
  13. 13. Разработка языка Требования● Общая инфраструктура ○ Синтаксис ○ Система типов ○ Операционная семантика ○ и т.д.
  14. 14. Разработка языка Требования● Общая инфраструктура ○ Синтаксис ○ Система типов ○ Операционная семантика ○ и т.д.● Поддержка со стороны IDE ○ Редактор ○ Подсветка ошибок ○ Рафакторинги ○ Контроль версий ○ Отладчик ○ и т.п.
  15. 15. Разработка языка Проблемы● Ресурсоемкая задача ○ Сложные алгоритмы обработки кода ○ Разнообразие поддерживаемых технологий ○ Необходимость высокой квалификации разработчиков● Совместимость инфраструктуры ○ Совместимость систем типов различных расширений ○ Поддержка возможных расширений рефакторингами ○ и т.д.
  16. 16. Существующие решения Языковая Совместимость инфраструктураLISP Да НетВнутренние языки Да Нетв Ruby / GroovyXText framework Нет Да
  17. 17. Общие проблемы● Существующие решения обеспечивают ○ Либо совместимость языковых расширений ○ Либо языковую инфраструктуру● Но не одновременно
  18. 18. План● Зачем расширять языки?● Проблемы создания DSL ○ Совместимость ○ Поддержка со стороны IDE● Подход среды MPS ○ Основная идея ○ Демонстрация● MPS и предметно-ориентированные языки
  19. 19. JetBrains MPS● MetaProgramming System● Среда для создания и расширения языков● IDE для созданных языков и расширений
  20. 20. Основная идея Текстовые грамматики приводят к неоднозначности Необходим иной подход MPS работает с абстрактнымсинтаксическим деревом (АСД) напрямую
  21. 21. Основная идея Редактирование АСД● Предыдущие попытки ○ Редактирование диаграмм ○ Ограниченный набор применений● Решение MPS ○ Сохраняет привычную для пользователя среду ○ Поддерживает текстоподобное редактирование
  22. 22. Основная идея Проекционный редактор● У каждого узла синтаксического дерева есть проекция в редакторе MPS
  23. 23. Основная идея Проекционный редактор● Каждый узел «живет» в своей ячейке● Узел отображается в виде текстового/символьного представления● Редактирование проекции мгновенно отражается на синтаксическом дереве
  24. 24. Основная идея Обычный текст и проекции● У текстоподобного проекционного редатора есть преимущества и недостатки● Привыкание — около двух недель
  25. 25. Создание языков● Инфраструктура создания языков ○ Метамодель языка (абстрактный синтаксис) ○ Система типов ○ Редакторы (конкретный синтаксис) ○ Компилятор (операционная семантка) ○ и т.д.● Средства IDE ○ Автозавершение кода ○ Поиск использований ○ Переименование ○ Отладка ○ и т.д.
  26. 26. Готовые MPS-языки● Реализация Java™ в среде MPS + расширения ○ Функциональные коллекции (collections language) ○ Даты (dates language) ○ Замыкания (closures language) ○ Регулярные выражения (regexp language) ○ и т.д.● Языки для определения языков ○ Реализованы с помощью самих себя (bootstrapping)● Разнообразные языки (XML и т.п.)
  27. 27. Демонстрация Добавление конструкции read lockJava Java + РасширениеReadWriteLock l = … ReadWriteLock l = …l.readLock().lock(); read (l) {try { // полезный код // полезный код }} finally { l.readLock().unlock();}
  28. 28. План● Зачем расширять языки?● Проблемы создания DSL ○ Совместимость ○ Поддержка со стороны IDE● Подход среды MPS ○ Основная идея ○ Демонстрация● MPS и предметно-ориентированные языки
  29. 29. Domain-Specific Languages● Среда MPS прекрасно подходит для создания DSL● Общие языковые части могут быть переиспользованы (например, выражения)● Можно внедрять конструкции универсальных языков программирования (например, Java) внутрь своих DSL
  30. 30. Domain-Specific Languages Пример
  31. 31. Существующие приложения● YouTrack – bug & issue tracker ○ Целиком разработана в MPS● Языки для web-разработки ○ DNQ (Data Navigation and Queries) ○ Webr ○ Spring language ○ и т.д.
  32. 32. Существующие приложения
  33. 33. Лицензия● Оpen-sourced● Apache 2.0 License MPS — совсем бесплатный
  34. 34. СсылкиСкачать MPShttp://www.jetbrains.com/mpsБлог про MPShttp://blogs.jetbrains.com/mps
  35. 35. Вопросы?

    Seja o primeiro a comentar

    Entre para ver os comentários

  • alex_ikhelis

    May. 5, 2012

Vistos

Vistos totais

219.313

No Slideshare

0

De incorporações

0

Número de incorporações

214.364

Ações

Baixados

7

Compartilhados

0

Comentários

0

Curtir

1

×