Diese Präsentation wurde erfolgreich gemeldet.
Die SlideShare-Präsentation wird heruntergeladen. ×

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

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Hier ansehen

1 von 35 Anzeige
Anzeige

Weitere Verwandte Inhalte

Diashows für Sie (20)

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

Anzeige

Weitere von Sergey Polazhenko (20)

Aktuellste (20)

Anzeige

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. Совместимость Грамматическая неоднозначность ● Расширение A int resultsCount = <some_code>; string s = "We found ${resultCount} results"; ● Расширение B int 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 / Groovy XText 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 lock Java 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. Ссылки Скачать MPS http://www.jetbrains.com/mps Блог про MPS http://blogs.jetbrains.com/mps
  35. 35. Вопросы?

×