В чем разница между Acceleo и Xpand? - PullRequest
2 голосов
/ 13 сентября 2011

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

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

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

Ответы [ 5 ]

6 голосов
/ 13 сентября 2011

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

«FOREACH myAttributes AS a» «a.name» «ENDFOREACH»

и

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

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

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

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

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

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

1 голос
/ 26 октября 2012

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

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

1 голос
/ 13 сентября 2011

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

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

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

0 голосов
/ 17 марта 2014

В моем случае я использую собственную метамодель (производную от 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 (в моем случае).

0 голосов
/ 29 октября 2011

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

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

...