Плюсы/минусы различных инструментов языкового инструментария, такие как 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 а скорее в блоге, то есть в его специальном патче, который вполне может сломаться в следующем выпуске).

Будет выглядеть еще полгода, чтобы увидеть, есть ли улучшения на этом фронте.