В чем разница между Acceleo и Xpand?

У меня есть DSL, основанный на пользовательской метамодели, которая, в свою очередь, основана на EMF/Ecore. Я пытаюсь выяснить, какое решение выбрать, и нигде не могу найти достойных сравнений.

У кого-нибудь есть причины, по которым я должен выбирать одну над другой?

До сих пор я знаю, что Acceleo использует стандартизированный язык OMG, но его использование сложнее, чем Xpand.

5 ответов

Решение

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

"FOREACH myAttributes AS a" "a.name" "ENDFOREACH"

а также

[for (a: Attribute|myAttributes)][a.name/][/for]

Оба языка основаны на шаблонах и поэтому имеют совершенно одинаковую структуру. Основное отличие Acceleo от Xpand заключается в том, что Acceleo основан на стандартах MOFM2T и OCL от OMG и оснастки.

Я не очень знаком с инструментами Xpand, но вы можете узнать больше об этом на их вики. Acceleo с другой стороны содержит редактор с подсветкой синтаксиса, дополнением кода, обнаружением ошибок, рефакторингом и многим другим. Он также содержит отладчик, профилировщик, поддержку Ant и Maven. Вы также можете легко развернуть ваши генераторы как плагин Eclipse для других пользователей или использовать их вне Eclipse в обычном приложении Java. Вы можете найти больше информации об Acceleo здесь. В видео вы можете увидеть большинство функций Acceleo в сети Obeo (требуется регистрация).

Наконец, последняя активность на xPand, произошедшая год назад, в то время как Acceleo активно развивается. Вы можете даже следить за развитием Acceleo на github, если хотите.

Стефан Бегодо

Отказ от ответственности: я являюсь одним из членов команды разработчиков Acceleo.

Я любитель, а не эксперт.

У меня сложилось впечатление, что если вам нужно немного больше, чем просто язык шаблонов, тогда Xpand - это то, что вам нужно. В противном случае выберите Acceleo - но, как вы говорите, кривая обучения очень крутая.

Когда вам нужно больше, чем на языке шаблонов? Мне кажется, что они исчерпывают газ, когда структура (а не содержание) выхода зависит от нескольких независимых частей ввода. Если вы не хотите входить в Acceleo, но имеете один из этих случаев, рассмотрите возможность создания автоматически сгенерированного языка "shim", который переводит вас на полпути от языка ввода к языку вывода, возможно, с большой избыточностью, чтобы избежать поиска во время генерации шаблона.

Я использовал старый 2.x Acceleo в полном масштабируемом проекте и провел несколько тестов с новым. Язык довольно прост в использовании, но с новой версией немного сложнее связать некоторый код Java с вашим шаблоном, когда язык сценариев не достаточно.

Я был очень большим поклонником 2.x, но с 3.x я добавил много неприятностей, чтобы он заработал. Вы должны написать код Java для обработки ресурсов затмения, например. Я полностью сдался при обновлении до juno, мои акселераторские проекты больше не работали, и мне не удалось исправить это за два дня. Я надеюсь, что они облегчат использование из коробки.

В моем случае я использую собственную метамодель (производную от UML2) с настраиваемыми свойствами стереотипов и стереотипов). Я попробовал оба языка шаблонов Acceleo и Xpand. Действительно, они очень похожи по структуре и возможностям.

Однако я вижу одно большое отличие (которое делает Xpand намного лучше в этом случае): вы можете использовать ваши собственные стереотипы в шаблонах Xpand. Движок Xpand блестяще выбирает "лучший соответствующий шаблон / правило" для каждого стереотипа (с учетом также наследования между стереотипами). Кроме того, очень легко получить свойства стереотипа. Эти две "особенности" делают шаблоны очень элегантными, компактными и удобочитаемыми. Например:

«DEFINE myTemplate FOR MyUmlProfile::MyStereoType»
MyValue: «this.myStereotypeProperty» or simply: «myStereotypeProperty»
«ENDDEFINE»

В Acceleo мне показалось неуклюжим добиться того же (более длинные операторы, больше кода), и мои шаблоны оказались длинными и сложными. Однако положительным моментом в Acceleo было то, что он удобно работал с IBM RSA (применяется непосредственно к моделям RSA (emx)). Он имеет подсветку кода и прекрасно работает с автозаполнением.

Xpand работал, только если я экспортировал свои модели RSA в формат ".uml" (~XML). Он не предлагает подсветку кода или автозаполнение (или, по крайней мере, я не понял, как).

Учитывая все плюсы и минусы, я все еще голосую за Xpand (в моем случае использования).

По сути, основное отличие состоит в том, что ACCELEO является реализацией языка преобразования моделей в текст MOF, который является стандартом OMG (группа управления объектами) для определения преобразования моделей в текст. Таким образом, это стандартный язык, разработанный той же группой, в которой работают MOF, UML, SysML и MDA в целом. XPAnd - это язык, который, как мне кажется, существовал до стандарта, но сейчас он отличается от него.

Если вы начинаете с нуля, тогда начните с Acceleo.

Другие вопросы по тегам