Плюсы / минусы различных языковых инструментов, таких как Xtext и MPS? - PullRequest
16 голосов
/ 07 декабря 2010

Есть ли у кого-нибудь опыт работы с инструментами языкового инструмента, такими как Xtext, Spoofax и JetBrains MPS?Я хочу попробовать один, и мне трудно найти хорошее сравнение различных инструментов.Каковы плюсы и минусы каждого из них?

Я ищу создание DSL, которые генерируют код на Python, поэтому мне особенно интересно узнать мнение людей, которые использовали один из этих инструментов с Python (все трикажется довольно Java-ориентированным ... почему это?).DLS в первую очередь предназначены для моего собственного использования, поэтому я меньше беспокоюсь о создании действительно красивой IDE, чем о том, чтобы быть KISS для определения синтаксиса и написания генератора кода.Способность проверять тип / выполнять статический анализ DLS также была бы очень полезной.

Я немного боюсь идти далеко по пути, врезаться в стену и понять, что весь мой код находится вформат, который нельзя перенести ни на что другое - это риск с этими инструментами?В частности, MPS кажется немного пугающим, поскольку, насколько я понимаю, вы на самом деле не генерируете текстовые синтаксисы, а создаете специализированные редакторы для AST.

Ответы [ 6 ]

16 голосов
/ 02 января 2011

Markus Voelter довольно хорошо сравнивает эти три в подкастах se-radio и Software ArchitekTOUR. Основная идея заключается в том, что Xtext является наиболее используемым, поэтому наиболее стабильным и документированным, и он основан на популярной платформе Eclipse и экосистеме моделирования - EMF, которая его окружает. С другой стороны, он основан на синтаксическом анализаторе и использует ANTLR для внутреннего использования, что означает, что вид грамматики, который вы можете определить, ограничен, и языки не могут быть легко объединены. Spoofax является академическим продуктом с наименьшим внедрением этих трех. Он также основан на синтаксическом анализаторе, но использует собственный генератор синтаксических анализаторов внутри, что позволяет использовать языковые комбинации. Jetbrains MPS основан на проектировании, что дает много возможностей для разработчика языков и позволяет сочетать языки. * т также имеет солидную поддержку. Недостатком может быть кривая обучения. Ни один из этих инструментов не ориентирован исключительно на Java как целевой язык для генераторов кода. Xtext использует шаблоны Xpand, которые являются простым текстом. Я действительно не знаю, как работает генерация кода в Spoofax. MPS имеет свой базовый язык, который называется подмножеством Java, но есть разные альтернативы. Я лично использую Xtext из-за его простоты и зрелости, но эти сильные ограничения, обусловленные его дизайном, делают его не очень перспективным выбором.

7 голосов
/ 23 декабря 2010

Я выбрал XText в том же случае две недели назад, но я ничего не знаю о Spoofax. Мое первое впечатление - Xtext очень прост и продуктивен. Я сделал свой первый настоящий (но очень простой) проект за 30 минут, я сгенерировал график graphviz и HTML-отчет. Мне не нравится MPS, потому что я предпочитаю исходный текст и файлы назначения.

5 голосов
/ 12 июня 2014

Существуют и другие системы для подобных вещей.Если ваша цель - создание инструментов, вам не обязательно искать интегрированную среду разработки;иногда вы можете найти более эффективные инструменты, ориентированные на утилиту, а не на интеграцию IDE.

. Рассмотрим любой из чисто программных инструментов трансформации:

  • TXL (практично, одна парадигма)
  • Stratego (Spoofax до того, как его пересадили в Eclipse)
  • Rascal (исследование, очень красиво спроектированное во многих отношениях)
  • Инструментарий реинжиниринга программного обеспечения DMS (случается, мой; коммерческий; используетсяусиленный анализ DSL / обычного языка и преобразование языка, включая C ++)

Все они обеспечивают хорошие механизмы для определения DSL и их преобразования.

Что действительно важно, так это вспомогательный механизм для проведения «жизни после разбора».

3 голосов
/ 12 июня 2014

Возможно, сегодня лучшее место для сравнения различных языковых рабочих мест - http://www.languageworkbenches.net/, а там http://www.languageworkbenches.net/past-editions/ показывает, как набор языковых рабочих мест выполняет аналогичную задачу: dsl для определенного домена.

2 голосов
/ 16 марта 2014

Взгляните на книгу Маркуса Фельтера. Это делает очень всестороннее сравнение этих 3 технологий. http://dslbook.org

XText очень хорошо поддерживается, но это не значит, что он без проблем. Получение системы типов, определения области действия и генерации не так просто, как рекламируется.

Spoofax не сканирует (упрощает грамматическую композицию). Не так хорошо документировано, но кажется законченным.

MPS является проекционным. Профи для языковой композиции и против для редактирования. Поддерживает несколько редакторов для AST и скоро даже поддержит хороший редактор диаграмм. Базовая языковая документация не так хороша. Система типов, область видимости, проверка очень хорошо обрабатываются. Преобразование модели в модель выполняется решателем. Мои коллеги, использующие его, жалуются на модель для текстовых языков. (Мое мнение, что M2M тоже не был настолько интуитивным.)

Несколько лет назад у Microsoft был проект OSLO. MGrammar и особенно Quadrant были очень перспективными. Можно было представить вашу модель в виде таблицы, формы, текста или диаграммы. Но вдруг они отменили проект (и, возможно, расстреляли людей, работающих над ним)

1 голос
/ 05 августа 2012

Я экспериментировал пару дней с Xtext , и, хотя инструмент выглядит многообещающе, я был в конечном итоге отрешен тесной интеграцией с экосистемой Eclipse и болью, которую он испытывает.пройти просто чтобы решить, что должно быть предоставлено без проблем из коробки: безголовый запуск генератора кода, который вы реализовали.См. здесь , чтобы ознакомиться с некоторыми подробностями, которые нужно пройти (и это даже не задокументировано должным образом на веб-сайте Xtext , а скорее в блоге, что означает специальное исправление, котороевполне может сломаться в следующем выпуске).

Еще раз через полгода посмотрю, было ли какое-то улучшение в этом направлении.

...