2

我有一个基于自定义元模型的 DSL,而后者又基于 EMF/Ecore。我试图弄清楚选择哪种解决方案,但我在任何地方都找不到任何体面的比较。

有没有人有任何理由让我选择一个而不是另一个?

到目前为止我所知道的是,Acceleo 使用 OMG 标准化语言,但它似乎比 Xpand 更难使用。

4

5 回答 5

6

首先,我想知道为什么您认为 Acceleo 比 Xpand 更难学习,虽然两种语言有差异(例如块和分隔符),但它们的结构非常相似。我不会详细说明这两种语言的所有元素,但是,例如,我看不出这样的区别:

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

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

两者都是基于模板的语言,因此它们具有完全相同的结构。Acceleo 和 Xpand 之间的主要区别在于 Acceleo 基于来自 OMG 和工具的标准 MOFM2T 和 OCL。

我对 Xpand 工具不是很熟悉,但你可以在他们的wiki上找到更多关于它的信息。另一方面,Acceleo 包含一个具有语法高亮、代码完成、错误检测、重构等功能的编辑器。它还包含调试器、分析器、Ant 和 Maven 支持。您还可以轻松地将您的生成器部署为其他用户的 Eclipse 插件,或者在常规 Java 应用程序中使用 Eclipse 之外的它们。您可以在此处找到有关 Acceleo 的更多信息。您可以在视频中看到Obeo 网络上 Acceleo 的大部分功能(需要注册)。

最后,xPand 上的最新活动发生在一年前,当时 Acceleo 正在积极开发中。如果您愿意,您甚至可以关注github上的 Acceleo 开发。

斯蒂芬·贝戈多

免责声明:我是 Acceleo 开发团队的成员之一。

于 2011-09-13T15:08:32.960 回答
1

我一直在一个完整的项目中使用旧的 2.x Acceleo,并对新的项目进行了一些测试。该语言非常易于使用,但是在新版本中,当脚本语言不够用时,将一些 java 代码绑定到您的模板有点困难。

我是 2.x 的忠实拥护者,但在 3.x 中,我增加了很多麻烦以使其正常工作。例如,您必须编写 java 代码来处理 eclipse 资源。更新到 juno 时我完全放弃了,我的 acceleo 项目不再起作用,而且我没能在两天内纠正它。我希望它们能让开箱即用变得更容易。

于 2012-10-26T11:19:38.103 回答
1

我是个涉猎者,不是专家。

我的印象是,如果您只需要一种模板语言,那么 Xpand 就是您的最佳选择。否则,选择 Acceleo - 但正如您所说,学习曲线非常陡峭。

您何时需要的不仅仅是模板语言?对我来说,当输出的结构(而非内容)依赖于输入的多个独立部分时,它们似乎耗尽了精力。如果您不想进入 Acceleo,但有其中一种情况,请考虑发明一种自动生成的“shim”语言,让您从输入语言到输出语言,可能有很多冗余以避免查找在模板生成时。

于 2011-09-13T13:20:57.677 回答
0

在我的例子中,我使用了一个自定义元模型(从 UML2 派生)和自定义原型和原型属性)。我尝试了 Acceleo 和 Xpand 模板语言。事实上,它们在结构和功能方面非常相似。

但是,我可以看到一个很大的不同(这使得 Xpand 在这个用例中变得更好):您可以在 Xpand 模板中使用您的自定义构造型。Xpand 引擎为每个原型巧妙地选择了“最佳匹配模板/规则”(还考虑了原型之间的继承)。此外,很容易获得刻板印象属性。这两个“特性”使模板非常优雅、紧凑和可读。例如:

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

在 Acceleo 中,我发现实现相同(更长的语句,更多的代码)很笨拙,而且我的模板最终变得冗长而复杂。然而,Acceleo 的积极之处在于它可以方便地从 IBM RSA(直接应用于 RSA (emx) 模型)中工作。它具有代码突出显示和自动完成功能,效果很好。

只有当我将 RSA 模型导出为“.uml”(~XML)格式时,Xpand 才有效。它不提供代码突出显示或自动完成功能(或者至少我不知道如何)。

考虑到所有利弊,我仍然投票支持 Xpand(在我的用例中)。

于 2014-03-17T10:09:07.537 回答
0

基本上主要区别在于 ACCELEO 是 MOF 模型到文本转换语言的实现,它是用于定义模型到文本转换的 OMG(对象管理组)标准。因此,它是由设计 MOF、UML、SysML 和 MDA 的同一组设计的标准语言。XPAnd 是一种我猜在标准之前就存在的语言,但现在与它不同。

如果您从头开始,请从 Acceleo 开始。

于 2011-10-29T07:15:29.033 回答