速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

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

评论

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

【YashanDB知识库】列与存储过程中重名变量/别名问题

YashanDB

yashandb 崖山数据库 崖山DB

喜报!望繁信科技CEO索强与CTO李进峰双双荣获2024上海软件企业技能人才奖

望繁信科技

人工智能 #大数据 流程智能 #流程挖掘 上海望繁信科技

高并发处理能力源码:选择体育直播软件平台开发公司的关键因素

软件开发-梦幻运营部

PostgreSQL成为最受欢迎的数据库; TiDB马拉松大赛开启

NineData

数据库 postgresql Serverless vector TiDB

基于Java+SpringBoot+Vue前后端分离反欺诈平台设计和实现

hunter_coder

后端开发

基于Java+SpringBoot+Vue前后端分离大学生一体化服务平台设计和实现

hunter_coder

后端开发

全新A/B实验能力,火山引擎数智平台上线广告营销实验

字节跳动数据平台

大数据 A/B测试 对比实验 数字化增长

宝塔Docker部署Nuxt3 BBS项目

源字节1号

开源

Comparing IPQ5332 and IPQ4029 WiFi Solutions for Data Center Efficiency

wallyslilly

ipq4029 IPQ5332

驾控更进阶 长安马自达MAZDA EZ-6树立合资新能源价值新标准

Geek_2d6073

分布式系统心跳机制(一)

天翼云开发者社区

架构 分布式系统

GPUStack正式发布: 为大模型而生的开源GPU集群管理器

SEAL安全

AI 大模型 AIGC LLM GenAI

2024年值得选择的十大多项目管理工具

爱吃小舅的鱼

项目管理 项目进度管理

TDengine 流计算实践指南:从平均风速到复杂流计算解析

TDengine

顶尖缺陷管理工具:小型团队的最佳选择

爱吃小舅的鱼

缺陷管理 缺陷管理软件推荐

亚信安慧AntDB数据库与用友Yon BIP商业创新平台完成兼容性互认证

亚信AntDB数据库

基于Java+SpringBoot+Vue前后端分离多媒体素材库设计和实现

hunter_coder

后端开发

全新征程,Pencils Protocol 成首个单链 TVL 突破 3 亿美元的项目

大瞿科技

CBR云备份与恢复管控简介

天翼云开发者社区

云计算 云服务 云备份

GPUStack正式发布: 为大模型而生的开源GPU集群管理器

GPUStack

AI 大模型 AIGC LLM GenAI

AccessLog| 一款开源的日志分析系统

ClkLog

数据分析 日志分析 埋点 开源软件

Prometheus Pushgateway 协议上报观测云最佳实践

观测云

监控

nvm报错解决:配置最新淘宝镜像源

源字节1号

开源

火山引擎边缘智能平台,让AI走进企业现场

火山引擎边缘云

物联网 智能IoT边缘服务 大模型 AI Agent #大模型

【YashanDB知识库】开源调度框架Quartz写入Boolean值到YashanDB报错

YashanDB

yashandb 崖山数据库 崖山DB

Footprint Analytics 助力 Core 区块链实现数据效率突破

Footprint Analytics

区块链 EVM

Milvus × RAG助力快看多业务应用

Zilliz

人工智能 AI Milvus Zilliz 向量数据库

Git的一些基本用法

天翼云开发者社区

git 存储

ceph数据重构原理

天翼云开发者社区

分布式系统 存储 硬盘故障

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