Application Developer Days 2: Отчет Кудрявцева В.Б/Language Oriented Programming в действии
Докладчик из самой, вероятно, известной российской (условно) фирмы-производителя ПО рассказывал про среду разработки DSL, которая называется MPS (Meta Programming System).
Про DSL вообще
Я пришел не с начала, может быть поэтому мне показалось, что автор так и не смог объяснить, как же оно работает. Мое понимание основано скорее на чтении сайта JetBrains. Поэтому — только несколько отрывочных тезисов.
- Написание програм на DSL — это очень эффективно
- Разработка собственных DSL — очень дорого само по себе, кроме того порождает несколько проблем, которые только увеличивают затраты:
- Отсутствие поддержки со стороны IDE
- Разные расширения, основанные на макроподстановке, могут конфликтовать друг с другом
Пример с интерполяцией (подстановкой) строк:
Расширения 1:
int SomeCount = 1; var message = "Count is [SomeCount]";
Расширение 2:
int SomeCount = 1; var message = "Count is %[SomeCount]"
- Традиционный способ борьбы с этой проблемой — это работа через AST (Abstract Syntax Tree)
- Ранее использовали графические языки
- MPS — текстово-ориентированная среда для работы с AST
Про практическую работу в MPS
Как работают в MPS?
- Определяют элементы языка (AST)
- Определяют систему типов
- Определяют конкретный синтаксис языка
- (Опционально) Определяют трансляцию в другой язык (Java)
Основной целевой язык для MPS — конечно Java, хотя сейчас также поддерживаются CSS, XML, JavaScript. Флагманский продукт на MPS — приятный баг-трекер YouTrack
Докладчик сказал, что привыкание к программированию в MPS занимает около 3 недель.
Из всех наших проектов единственным явным кандидатом на применение является GL-XML