有没有人有使用Xtext,Spoofax和JetBrains的MPS等语言工作台工具的经验?我想尝试一下,并且很难找到不同工具的良好比较。各自的优点和缺点是什么?
我正在寻找构建生成python代码的DSL,所以我特别感兴趣的是听到那些使用python这些工具之一的人(这三个看起来都非常注重Java ......为什么会这样? )。 DLS主要供我自己使用,所以我不太关心构建一个非常漂亮的IDE,而不是关于它是KISS来定义语法和编写代码生成器。对DLS进行类型检查/静态分析的能力也很不错。
我有点害怕走上一条小路,撞墙,意识到我的所有代码都采用了无法移植到其他任何地方的格式 - 这些工具是否存在风险?特别是MPS看起来有点可怕,因为据我所知,你并没有真正生成基于文本的语法,而是为AST构建专门的编辑器。
答案 0 :(得分:15)
Markus Voelter在se-radio和Software ArchitekTOUR播客中比较这三者做得相当不错。 基本思想是,Xtext是最常用的,因此最稳定和最有文档,它基于流行的Eclipse平台和建模生态系统 - 围绕它的EMF。另一方面,它是基于解析器并在内部使用ANTLR,这意味着您可以定义的语法类型有限,语言不能轻松组合。 Spoofax是一种学术产品,最少采用这三种产品。它也是基于解析器的,但在内部使用自己的解析器生成器,允许语言组合。 Jetbrains MPS是基于投影的,它为语言设计者提供了很大的自由,并允许语言组合。 * t也有坚实的支持。缺点可能是学习曲线。 这些工具都不是严格地将Java作为代码生成器的目标语言。 Xtext使用Xpand模板,它们是纯文本。我真的不知道Spoofax中的代码生成是如何工作的。 MPS有它的基本语言,据说它是Java的子集,但有不同的选择。 我个人使用Xtext因为它的简单性和成熟性,但是它的设计给出的那些强大的限制使它不是一个非常适合未来的选择。
答案 1 :(得分:7)
两周前我在同一个案例中选择了XText,但我对Spoofax一无所知。 我的第一印象--Xtext非常简单而富有成效。 我在30分钟内制作了我的第一个realife(但非常简单)项目,我生成了一个graphviz点图和html报告。 我不喜欢MPS,因为我更喜欢纯文本源文件和目标文件。
答案 2 :(得分:5)
还有其他系统可以做这种事情。如果您的目标是构建工具,则不一定要使用集成工具来查看IDE;有时您可以找到更专注于实用程序而非IDE集成的更好工具
考虑任何纯程序转换工具:
这些都为定义DSL并对其进行转换提供了良好的机制。
真正重要的是实施“解析后的生活”的支持机制。
答案 3 :(得分:3)
今天比较不同语言工作台的最佳位置是http://www.languageworkbenches.net/,而http://www.languageworkbenches.net/past-editions/显示了一组语言工作台如何实现类似的任务:特定域的dsl。
答案 4 :(得分:2)
答案 5 :(得分:1)
我已经用 Xtext 进行了几天的实验,虽然这个工具看起来很有希望但最终还是被与 Eclipse 生态系统的紧密集成和痛苦所拖延了一个人必须经历一下才能解决开箱即用的问题:你实现的代码生成器的无头运行。请参阅here了解一些必须经历的细节(并且它甚至没有在 Xtext 网站上正确记录,而是在博客上,这意味着它可以是一个特殊的补丁,可以很好地打破下一个版本。)
半年后再看看,看看这方面是否有任何改善。