写点什么

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

  • 2011 年 7 月 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 年 7 月 03 日 06:095475

评论

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

重新强调完成的定义

Bob Jiang

Scrum 完成的定义 DoD definition of done

中小型城市商业银行数字化转型实践(一)整体技术架构转型(双态IT)

泡菜小仙

数字化转型 架构设计 技术架构

中小型城市商业银行数字化转型实践(二)集成关系ESB APIGateway ServiceMesh

泡菜小仙

架构设计 集成架构 ESB

产品周刊 | 第 15 期(20200517)

Herbert

产品 设计 产品经理 产品设计

MyBatis支持的jdbcType 枚举类型

Kevin Liao

npm下载electron缓慢的问题

玏佾

npm Electron

给苹果提醒APP配个助手

BabyKing

提醒助手 TODO 奇妙清单 Reminders Helper

换脸新潮流:BIGO风靡全球的人脸风格迁移技术

DT极客

中小型城市商业银行数字化转型实践(三)数据中台建设思路和路径

泡菜小仙

数据中台 数字化转型 数据架构

游戏夜读 | Two Sum问题的八个解

game1night

Kafka系列第7篇:你必须要知道集群内部工作原理的一些事!

z小赵

大数据 kafka 实时计算

JAVA主流锁

颇风

Java 多线程

部门最漂亮的妹子离职了

无箭的丘比特

团队管理 生涯规划 企业文化 职场

DDD 实践手册(番外篇: 事件风暴-概念)

Joshua

领域驱动设计 DDD 事件风暴 事件驱动 Event Storming

项目提升服务过程与总结稿

Geek_bc0aff

看得懂的区块链及智能合约概念

石君

区块链 智能合约

东哥和刘亦菲的故事

张利东

R

谁能让你安稳

Neco.W

工作 稳定性 努力工作

我的读书笔记-樊登读书法

lmymirror

学习 读书笔记 方法论 读书方式

Redis缓存三大问题

Bruce Duan

redis 缓存穿透 缓存击穿 缓存雪崩

Spring Security 中的授权操作原来这么简单

江南一点雨

Java spring Spring Boot spring security

设计模式前传——为什么要学设计模式

大头星

Java 面试 设计模式

识别代码中的坏味道(三)

Page

敏捷开发 面向对象 重构 代码质量 代码坏味道

单核小鸡上的Minikube实践(一)

摩登土狗

Docker Linux DevOps k8s minikube

在Gitlab-ce的Docker中使用自定义端口

天飞

Docker gitlab

如何更自信的写作

董一凡

写作

NIO看破也说破(四)—— Java的NIO

小眼睛聊技术

Java 学习 开源 架构 后端

Vue+SpringBoot+SpreadJS 实现的在线文档

葡萄城技术团队

Spring Boot Vue SpreadJS

ZooKeeper,到底如何选主?

奈学教育

MacOS 下使用VSCode进行GoLang Test报错

北纬32°

macos vscode Unit Test debug Go 语言

linux文件系统-inode学习整理

戈坞昂

Linux inode

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