技术开发 频道

领域专用语言开源框架Xtext2.0正式发布

  【IT168 评论】用于开发领域专用语言的获奖开源框架Eclipse Xtext最新版本2.0,作为代号为Indigo的Eclipse 3.7年度发行版的一部分,已于近日正式发布了。

  除了修正了上百个已知问题和增强性能外,Xtext2.0中还增加了以下新功能:

  •  重构框架及支持富悬浮(Rich Hover)信息;
  •  可以嵌入在任何一种DSL中的新表达式语言,以及允许用户在自己的语言中写计算逻辑;
  •  一个静态键入模板语言Xtend,该语言简化了代码生成器的开发和维护,它已经集成在Eclipse工具中。

  记者采访了Xtext的创始人、核心架构师Sven Efftinge先生。

  记者:您给Xtext的定位是什么的?

  Sven:Xtext是一个真正的实现编程语言的开源框架。它使用了人们熟知的方法来实现语言,比如解释器、符号表、编译器等。Xtext的目标是用很少的付出就能给任何一种语言带来像Eclipse的Java工具那样的东西。

  记者: 在Xtext2.0的新功能中,您觉得开发者最需要或者最想要的功能是哪一些?为什么?

  Sven:在这一版中,我们花了很多的精力进一步提高框架整体的品质和性能。此外,我们还在很多细节上做了一些努力,大大提高了整体编辑体验。Xtext现在支持重命名重构,这一功能甚至支持跨语言使用,包括Java在内。另外,简化悬浮功能的使用或许是很多人所喜欢的。

  让Xtext达到一个新高度的是可嵌入的表达式语言库。目前为止,用Xtext定义结构化语言已经非常的简单了。不幸的是,软件系统并不仅仅是由结构化信息组成的,一定程度上,你还需要定义各种行为和计算逻辑。定义结构化语言虽然很容易,实现支持全面的表达式却是非常复杂的,需要花费很多的精力。以前,比较实用的做法是扩展生成的代码,在其中添加行为,这么做可行但距离理想方式相距甚远。通过Xtext 2.0,你不仅可以复用完整的语法定义表达式,也可以复用和扩展所有必需的基础架构,包括编译器、键入系统、解释器、当然也包括纯净的Eclipse集成。所以,你终于可以把行为描述放在属于它的地方了:DSL脚本中合适的地方。

  Xtext 2.0还可包含一个静态键入模板语言Xtend,它尤其适合于写代码生成器。实际上它也是基于新的表达式库的,因此,它既是实现代码生成器的伟大语言,同时也是相当高级的例子,演示了使用Xtext可以构建什么类型的语言。

  记者:有很多人在使用Xtext吗?这些人用Xtext主要做什么呢?Xtext这种DSL框架的非常好的用途是什么呢?

  Sven:我见过各种疯狂的情况,比如编写算法的语言、可执行的音乐乐谱等。也有一些用于复杂语言的商业产品,如Sigasi的VHDL设计器,以及很多开源项目在使用Xtext。在DSL上,每种类型的应用程序都有自己的非常好的点。举例来说,我们看看Web应用程序,领域模型就是一个很好的方面,可以用DSL来定义的。Rails、Grails、SpringRoo和Play!框架也都在努力尝试着调整现有的语言,从而可以更精确地定义实体等。有了Xtext,就不用苦苦地在现有的语言上折磨了,你只需要定义领域模型有哪些内容组成,然后写一个代码生成器,把这些概念转换成你正在使用的应用程序平台所需的东西。相当简单,无需任何折中,同时你也得到了一个相当棒的Eclipse工具。

  数据驱动的移动应用也是一种让人感兴趣的应用类型。有很多方法可以解决跨平台移动开发的挑战。开源框架APPlause中带有一个用Xtext定义的DSL,它能让你很轻松地定义某种类型的移动应用,然后部署到不同的移动平台上,如iOS或者Android平台上。

  记者:表达式语言在GPPLs或3GLs和DSL之间搭起了一座桥梁,你怎么看待这二者在未来的5年、10年的发展?

  Sven:Scala语言之父Martin Odersky最近刚刚宣布:他们获得了一个5年的欧洲研究经费,用于使Scala语言更适合并行程序设计。如果你看过他们的提案,你就明白了,他们的做法是实现在DSL中嵌入Scala表达式,以产生应用特定的代码,从而达到并行的目的。Odersky在SE-Radio的一个非常有趣的采访中谈到了这一点,他解释说对于大量并行处理,通常目的的方法并不理想,但是,为专门领域定义DSL是一个可行的途径。他们允许在你的语言的领域特定概念中封装并行语义。你可以看到,Scala好像也在朝着和Xtext一致的方向发展,即现在的Xtext在新的表达式类库中已经体现出来的方向。

  记者:代码生成好像重新受到了追捧,部分原因是因为像Xtext和现在的Xtend之类的新框架,但也是因为软件架构变得更加复杂、更加国际化吗?这只是昙花一现呢?还是你看到了DSL和代码生成背后,意义更深远的针对抽象复杂软件架构的运动呢?

  Sven:代码生成和DSL已经是较长一段时间内的主流技术。Ruby on Rails和SpringRoo框架很大程度上基于代码生成的,而每一个XML schema或者DTD都用很笨拙的泛型语法有效地定义着领域特定语言。Xtext和Xtend是更适合于这种技术的工具。创建很好的抽象也有其他的方法和途径,但是对我来说,重要的是大家能明白DSL和代码生成并不能解决每一个问题。就像其他的每一种技术一样,他们也有自己的优点和缺点。作为开发者,你当然也会有像Xtext和Xtend这样的开发工具箱,但是必须要知道什么时候该使用,什么时候不该使用它们。

  记者:越来越多的DSL在一定程度上相互补充或者互相重叠,同时也互相竞争,那么Xtext如何帮助开发人员在项目中使用不同的DSL呢?

  Sven:DSL主要的价值在于高层次的抽象。然而,抽象越多,在其他场景中复用此抽象就会越少。所以,通常人们应当定义自己的、为一个项目而裁剪的简单语言。这样,你就不用必须定义一些无用的概念了。应当让该语言尽可能地专物专用。Xtext是特地设计成只需花费很少的精力就能定义和发展这类语言的。

  此外,自始至终Xtext都被设计成任意数量的语言都可能互相集成,甚至和其他非Xtext语言如Java集成也都不成问题。所以,你感觉不出来像是不同的语言,因为该工具可以无缝地跨不同语言工作。

  谢谢!

0
相关文章