写点什么

领域专用语言开源框架 Xtext 2.0 发布了

  • 2011-07-03
  • 本文字数:2376 字

    阅读完需:约 8 分钟

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

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

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

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

InfoQ:您给 Xtext 的定位是什么的?

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

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

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

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

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

InfoQ:有很多人在使用 Xtext 吗?这些人用 Xtext 主要做什么呢?Xtext 这种 DSL 框架的最佳用途是什么呢?

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

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

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

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

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

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

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

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

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

谢谢!

查看英文原文: Xtext 2.0 Released

2011-07-03 06:096215

评论

发布
暂无评论
发现更多内容

leetcode 304. Range Sum Query 2D - Immutable 二维区域和检索 - 矩阵不可变(中等)

okokabcd

LeetCode 数据结构与算法

消费大众网民的审丑心理,如何拯救扭曲化的自媒体行业

石头IT视角

C++多态的基本概念与原理刨析

CtrlX

c c++ 面向对象 代码 8月月更

头脑风暴:最长连续递增序列

HelloWorld杰少

算法 LeetCode 数据结构, 8月月更

加密市场由阴转晴,Zebec或成2022后半段黑马

鳄鱼视界

开源一夏|三步注册gitee

坚果

开源 8月月更

聚焦2022全球边缘计算大会·深圳站,揭秘火山引擎新一代边缘云解决方案

火山引擎边缘云

分布式 CDN 边缘计算 渲染 边缘云

坚叔:让科幻片的概念变成产品丨编程挑战赛 x 嘉宾分享

声网

人工智能 编程‘

开源一夏 | 阿里云ECS之Linux 文件管理命令

六月的雨在InfoQ

Linux 开源 8月月更 文件管理命令 磁盘命令

详解CAN总线:什么是CAN总线?

不脱发的程序猿

嵌入式 汽车电子 CAN总线协议

开源一夏 | 阿里云ECS之Linux 文本操作命令

六月的雨在InfoQ

vim Linux 开源 8月月更 more

flstudio21版本有什么新功能?

茶色酒

FL Studio

开源一夏 | 实战Node.js之GET/POST请求在Web 应用架构在客户端的使用

恒山其若陋兮

开源 8月月更

6.18秒杀系统架构设计

joak

智能化运维场景分析

阿泽🧸

智能运维 8月月更

《Dubbo3.0.8源码解析》15-Dubbo的三大中心之元数据中心源码解析

宋小生

dubbo Dubbo3

IPv4向IPv6的过渡技术

穿过生命散发芬芳

ipv6 8月月更

架构训练营毕业总结

joak

spark实战之:分析维基百科网站统计数据(java版)

程序员欣宸

Java spark 8月月更

Spring进阶(一):SpringMVC常用注解标签详解

No Silver Bullet

springmvc 注解 8月月更

详解CAN总线:常用CAN连接器的使用方法

不脱发的程序猿

汽车电子 嵌入式开发 CAN连接器

文件管理-Linux系统文件属性

Albert Edison

Linux centos 运维 文件管理 8月月更

MySQL数据库之数据查询

乌龟哥哥

8月月更

SpringMvc如何同时支持Jsp和Json接口?

xiaoxi666

RocketMQ高可用设计之同步刷盘

急需上岸的小谢

8月月更

LabVIEW LINX Toolkit控制Arduino设备(拓展篇—1)

不脱发的程序猿

嵌入式 单片机 LabVIEW Arduino LINX Toolkit

在线诺基亚短信图片生成器工具

入门小站

工具

在线XML转TSV工具

入门小站

工具

SAFe Day 2022 中国规模化敏捷大会即将开启

爱吃鱼的小雨

敏捷 safe 规模化敏捷 大规模敏捷 SAFeDay

三个线程交替打印ABC100次问题思考

越长大越悲伤

面试 线程 后端 JUC

开源一夏 | 阿里云ECS之Linux 系统工作命令

六月的雨在InfoQ

Linux 开源 8月月更 系统命令

领域专用语言开源框架Xtext 2.0 发布了_Scala_Jean-Jacques Dubray_InfoQ精选文章