Плюсы/минусы различных инструментов языкового инструментария, такие как Xtext и MPS?
Есть ли у кого-нибудь опыт работы с инструментами языкового инструментария, такими как Xtext, Spoofax и MPS JetBrains? Я ищу попробовать, и мне трудно найти хорошее сравнение различных инструментов. Каковы плюсы и минусы каждого?
Я ищу для создания DSL, которые генерируют код Python, поэтому мне особенно интересно услышать от людей, которые использовали один из этих инструментов с python (все три кажутся довольно ориентированными на Java... почему?). DLS в основном предназначены для моего собственного использования, поэтому я не забочусь о создании действительно красивой среды IDE, чем о том, что KISS определяет синтаксис и записывает генератор кода. Возможность проверить тип/сделать статический анализ DLS тоже будет довольно крутой.
Я немного боюсь идти далеко по пути, ударяя о стену и понимая, что весь мой код находится в формате, который нельзя портировать ни на что другое - это риск с помощью этих инструментов? MPS, в частности, кажется немного пугающим, поскольку, насколько я понимаю, вы действительно не генерируете текстовые синтаксисы, а скорее создаете специализированные редакторы для АСТ.
Ответы
Ответ 1
Markus Voelter делает довольно хорошую работу, сравнивая эти три в се-радио и подпрограммах Software ArchitekTOUR.
Основная идея заключается в том, что Xtext наиболее часто используется, поэтому наиболее стабильный и документированный, и он основан на популярной платформе Eclipse и моделирующей экосистеме - EMF, которая ее окружает. С другой стороны, он основан на парсере и использует ANTLR внутри, что означает, что типы грамматик, которые вы можете определить, ограничены, а языки не могут быть легко скомбинированы.
Spoofax - это академический продукт с наименьшим усыновлением этих трех. Он также основан на синтаксическом анализаторе, но использует внутренний генератор парсера, который позволяет сочетать язык.
Jetbrains MPS ориентирована на проекцию, что дает большую свободу разработчикам языка и позволяет сочетать языки. * t также имеет твердую поддержку. Недостатком может быть кривая обучения.
Ни один из этих инструментов не является строго Java, ориентированным на целевой язык для генераторов кода. Xtext использует Xpand-шаблоны, которые являются обычным текстом. Я действительно не знаю, как работает генерация кода в Spoofax. MPS имеет базовый язык, который, как говорят, является подмножеством Java, но существуют разные альтернативы.
Я лично использую Xtext из-за его простоты и зрелости, но те сильные ограничения, которые дает его дизайн, делают его не очень перспективным выбором.
Ответ 2
Я выбрал XText в том же случае две недели назад, но я ничего не знаю о Spoofax.
Мое первое впечатление - Xtext очень прост и продуктивен.
Я сделал свой первый проект realife (но очень простой) за 30 минут, я создал график graphviz dot и html report.
Мне не нравится MPS, потому что я предпочитаю файлы с обычным текстом и файлы назначения.
Ответ 3
Возможно, сегодня лучшим местом для сравнения разных языковых инструментов является http://www.languageworkbenches.net/ и там http://www.languageworkbenches.net/past-editions/ показывает, как набор языковых Workbenches реализует аналогичную задачу: dsl для определенного домена.
Ответ 4
Существуют и другие системы для такого рода вещей. Если ваша цель заключается в создании инструментов, вам необязательно смотреть в среду разработки с интегрированным инструментом; иногда вы можете найти лучшие инструменты, которые сосредоточены на интеграции, а не интеграции IDE.
Рассмотрим любой инструмент чистых программных преобразований:
- TXL (практическая, единая парадигма)
- Stratego (Spoofax до того, как он был пересажен в Eclipse)
- Rascal (исследование, очень хорошо разработанное разными способами)
- Инструментарий для реинжиниринга программного обеспечения DMS (как известно, мой, коммерческий, используемый для сверхпрочного анализа DSL/обычного langauge и преобразования, в том числе на С++).
Все они обеспечивают хорошие механизмы для определения DSL и преобразования их.
Что действительно важно, так это поддержка механизма для "жизни после разбора".
Ответ 5
Взгляните на книгу Маркуса Фёльтера. Он делает очень полное сравнение этих трех технологий.
http://dslbook.org
XText очень хорошо поддерживается, но это не значит, что это проблема. Получение типа-системы, масштабирования и генерации выполняется не так просто, как рекламируется.
Spoofax без сканера (упрощение грамматического состава). Не так хорошо документировано, но кажется полным.
MPS является проекционным. Про за языковой состав и con для редактирования. Поддерживает несколько редакторов для AST и вскоре даже поддержит хороший редактор диаграмм. Документация на базовом языке не так уж хороша. Система управления, обзор, проверка очень хорошо обрабатываются. Решимость модели к модели выполняется решателем. Мои коллеги, использующие его, жалуются на модель на текстовые языки. (Мое мнение M2M тоже не было интуитивным).
Несколько лет назад у Microsoft был проект OSLO. MGrammar и особенно Quadrant были очень многообещающими. Можно было представить вашу модель в виде таблицы, формы, текста или диаграммы. Но вдруг они отменили проект (и, возможно, расстреляли людей, работающих над ним)
Ответ 6
Я экспериментировал в течение нескольких дней с Xtext, и, хотя инструмент выглядит многообещающим, я был в конечном итоге отстранен от тесной интеграции с экосистемой Eclipse и болью нужно пройти, чтобы решить, что нужно делать без проблем: безголовый запуск генератора кода, который вы реализовали. См. здесь для некоторых мелочей, которые нужно пройти (и это даже не задокументировано на веб-сайте Xtext а скорее в блоге, то есть в его специальном патче, который вполне может сломаться в следующем выпуске).
Будет выглядеть еще полгода, чтобы увидеть, есть ли улучшения на этом фронте.