写点什么

领域专用语言开源框架 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:095992

评论

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

精准医疗迎数字化新机遇,百奥利盟携手阿里云为创新生物药提速上市

云布道师

阿里云

IoT物联网平台运行监控最佳实践——设备管理运维类

阿里云AIoT

监控 物联网

华为阅读全新上线高品质男声,带来身临其境般听书体验

叶落便知秋

MetaForce佛萨奇2.0开发规则丨MetaForce佛萨奇2.0系统开发说明及案例

系统开发咨询1357O98O718

微信小程序自动化测试方案实践过程

Openlab_cosmoplat

开源社区 微信小程序测试

Go 闯进 Top 10、C++ 再次被 Java 反超,TIOBE 3 月榜单发布

博文视点Broadview

查询性能: TDengine 最高达到了 InfluxDB 的 37 倍、 TimescaleDB 的 28.6 倍

TDengine

大数据 tdengine 性能测试 时序数据库

软件测试/测试开发丨基于 Spring Boot 的 RESTful API 设计与实现

测试人

Spring Boot 软件测试 测试发开 RESTful API

BetterSnapTool for Mac 帮你整理窗口,提升效率

理理

BetterSnapTool 苹果电脑 窗口布局

SpringBoot整合ElasticSearch

Geek_7ubdnf

Java elasticsearch

一文上手图数据备份恢复工具 NebulaGraph BR

NebulaGraph

数据库 容灾备份

云原生+新技术,会碰撞出怎样的火花?

墨天轮

数据库 阿里云 Serverless 云原生 华为云

PS画画工具推荐:ps怎么黄金分割构图

理理

黄金分割插件 GoldenCurve插件 PS插件下载

寻找 Milvus 的第 N+1 种可能

Zilliz

Milvus Meet Up

马蹄链智能合约开发方案丨马蹄链智能合约系统开发(开发说明))

系统开发咨询1357O98O718

【活动报名】数据存储降本增效应用实践 PolarDB × ScaleFlux 线下 Meetup 来袭!(杭州站)

阿里云数据库开源

数据库 postgresql 阿里云 开源 polarDB

gRPC请求超时和异常处理

江南一点雨

Java gRPC

小程序无需编程,体验IoT物联网平台-物模型开发——设备接入类

阿里云AIoT

物联网

苹果软件Noir:为所有网站应用深色模式

理理

Safari 扩展 Noir – Dark Mode 暗模式

Java中restTemplate携带Header请求

Geek_7ubdnf

Java RestTemplate

苹果M1/M2电脑安装Lightroom Classic 2022(LRC2022) 后打开闪退怎么办?

理理

m1 LRC2022 闪退 M2 苹果软件

等保测评机构资质申请条件是什么?个人可以申请吗?

行云管家

等级保护 等保测评 等保测评机构

FDF循环互助游戏开发说明丨FDF循环互助游戏系统开发详细及案例源码

系统开发咨询1357O98O718

图片动画化应用中的动作分解方法

百度Geek说

深度学习 算法 计算机视觉 企业号 3 月 PK 榜

DAPP马蹄链智能合约系统丨DAPP马蹄链智能合约系统开发(开发规则))

系统开发咨询1357O98O718

DAPP众筹互助游戏开发详细丨DAPP众筹互助游戏系统开发(开发逻辑及案例)

系统开发咨询1357O98O718

OpenCloudOS 轻量级虚拟化引擎 LiKeX 介绍

OpenCloudOS

Linux 容器 rust

DAPP质押挖矿项目技术开发功能丨DeFI质押挖矿系统开发详细方案

I8O28578624

云智慧ITSM产品助力企业有效实现降本增效

云智慧AIOps社区

AIOPS ITSM 智能运维 工单 IT服务管理

国贸股份 x 袋鼠云:推进全链业务深度数字化,为产业综合服务插上数字化翅膀

袋鼠云数栈

数字化转型

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