写点什么

JetBrains 元编程系统支持面向语言编程和 DSL

  • 2009-01-03
  • 本文字数:1989 字

    阅读完需:约 7 分钟

Meta Programming System( MPS )是 JetBrains 开发的面向语言编程的新工具。开发者可以用它扩展编程语言,也可以用它为企业应用创建领域特定语言( DSLs )。JetBrains 开发团队近日宣布推出 MPS 的 beta 版。

MPS 提供的软件开发环境可以创建新的定制语言,也可以扩展现有语言,然后用它们开发面向领域的应用。MPS 还可以定义新语言的类型系统、约束和专门的编辑器。MPS 用一棵抽象句法树( AST )来维护代码。AST 由节点组成,节点又包含属性、子节点和引用,程序代码就靠 AST 和这些节点完整地表达出来。创建新语言的时候,开发者定义代码编排和表达的规则,还可以规定语言类型系统的组成元素。MPS 凭借这些规则即时检查程序代码,减少用新语言编程的出错机会。MPS 还采用了代码生成的办法:用新语言在更高的层次上表达,然后 MPS 生成 Java、XML、HTML、JavaScript 等语言的可编译代码。用 MPS 建立新语言的时候,必须从 BaseLanguage 扩展。MPS 已经提供了一些常用的 BaseLanguage 扩展,协助开发者处理字符串、容器、日期、正则表达式等语言成分。

面向语言编程( LOP )是一种新的编程风格。在 LOP 里,语言好比传统编程中的类和方法,是搭建软件所用的建筑材料,开发者根据需要,或创建专门的新语言,或对旧语言作扩展。Martin Fowler 曾撰文说明用语言工作台作为IDE 工具去实现面向语言编程,也介绍过用MPS 作为语言工作台。

MPS 还适合用来创建 DSL,因为它可以为任意新语言实现定制的语言编辑器和其他约束条件。不熟悉传统编程的领域专家,可以用本行专业术语构成的 DSL 在 MPS 里工作。

MPS 软件对所有人免费,其中大部分代码还会以 Apache 2.0 许可开源。MPS 起初是 JetBrains 从 2003 年开始的一个研究项目,JetBrains 员工已经用它开发过一些新产品。目前团队的主要目标是下个月的 Beta 2 版,以及 2009 年第一季度的 1.0 版。11 月的时候 JetBrains 还发布过 IDE 产品 IntelliJ IDEA 的 8.0 版,团队协作工具的 TeamCity 的 4.0 版。MPS beta 版下载概念说明,请参阅他们的网站。网站上还有用户指南教程和专门的博客站点介绍MPS 工具的详细信息。

InfoQ 采访了 JetBrains 公司 MPS 核心开发者 Konstantin Solomatov,向他询问 MPS 的软件功能和项目未来的路线图。InfoQ 问及 MPS 与其它建模及代码生成工具的对比,比如 Eclipse Modeling Framework( EMF )、openArchitectureWare( oAW )。

MPS 所依据的概念与 EMF、oAWE 类似。三种技术都可以创建元模型,也都可以描述编辑器、自动完成、模型转换(MPS 称之为“生成器”)等方面。EMF 模型通常用图形编辑器来编辑,你可以用方框线条绘制出代表各实体的图解。这种做法对某些领域很有效,比如绘制 ER 图。但我们认为不适宜用 EMF 创建任何相对复杂的软件。 oAW 最值得注意的部分的 xText 框架,它定义的文字型 DSL 可以被解析成 EMF 模型。不过用这种方式创建语言有其局限。如果在同一个文件里混用多种语言,必须保证文法不会出现二义性,也就是说所有的输入都只能存在一种解释。文本型的语言很难保证这一点。比方说有两家厂商都想为 Java 补充一种支持金融货币的语言,而两家厂商都在语言里新增了 Money 类型。那么,如果代码里两种类型都用到了,我们解析文件的时候就无法分辨一个 Money 类型的变量到底属于哪一种语言。

MPS 把模型表示成一棵可以直接编辑的抽象句法树。在 MPS 里,代码看似文本,在很多方面的表现也如同文本,但由于我们从不需要在代码和文本之间来回转换,也就完全不用担心文法上的二义性。

好像 MPS 还可以编排语言的文法。这项功能与 Oslo OMeta 等工具的类似功能有何异同?

因为 MPS 不是基于文本的,它没有任何文本上的文法。定义语言就是定义它的抽象句法树,它的抽象文法。而没有文本上的文法,也就没有语言兼容的问题,语言从定义上就是兼容的。Oslo 和 Ometa 都是基于文本的,因此都有类似于 xText 的问题。 Oslo 和 Ometa 只能定义语言的解析器,与之相比,MPS 的功能更多,能定义语言的编辑器、约束、类型系统、数据流分析,还有生成器。

JetBrains 开发团队在那些产品中采用了 MPS 作为建模和开发工具?

其中一个是代号为“Charisma”的问题跟踪系统,它也会在 2009 年第一季度公开发布。它是完全用 MPS 编写的。 Charisma 也成了 MPS 本身所用的问题跟踪系统,还被用到 TeamCity 凳产品中。在创建 Charisma 的时候,我们开发了一门完整的 Web 开发语言,在 MPS 中扮演相当于 J2EE 的角色。

MPS 项目的未来路线图如何,有何新特性?

本次 Beta 的主要目的是收集 MPS 用户的反馈,并且决定将来的路线图。我们已经有 1.0 的计划,不过 1.0 版不会有任何大的变动和新特性。我们将在 2009 第一季度发布完 MPS 1.0 之后,再公布更长远的路线图。届时计划中应该会包括调试器和用于定义 UI 的若干新语言。

查看英文原文: JetBrains Meta Programming System Supports Language Oriented Programming and DSLs

2009-01-03 12:476326
用户头像

发布了 225 篇内容, 共 70.1 次阅读, 收获喜欢 52 次。

关注

评论

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

鸿蒙5开发宝藏案例分享---一多开发实例(便捷生活)

莓创技术

鸿蒙5开发隐藏案例分享---自由流转的浏览进度接续

莓创技术

Github霸榜的SpringBoot全套学习教程,从入门到实战,内容超详细!

程序员高级码农

程序员 springboot

闲鱼打定金,满意后收货打尾款,你能接受吗

程序员郭顺发

2025北京机器人展

AIOTE智博会

机器人展 智能机器人展 人形机器人展

.NET Dump 中的 Linux信号机制

秃头小帅oi

大模型落地企业研发的正确姿势——暨《DevData25研发效能基准报告》核心数据发布

思码逸研发效能

人工智能 研发效能 API 测试 研发效能管理

基于YOLOv8的路面缺陷(路面裂缝、井盖、坑洼路面)识别项目【完整源码数据集+PyQt5界面+完整训练流程+开箱即用!】

申公豹

yolov8

湖仓一体,不只是技术升级,更是企业决策力再造

Databend

VL 中间语言:进化之路,如何在效率与深度间架起桥梁?

代码制造者

重磅!SpringBoot4发布,11项重大变更全解析!

电子尖叫食人鱼

springboot

PD分离推理的加速大招,百度智能云网络基础设施和通信组件的优化实践

科技热闻

昆仑芯超节点创新设计:1U 4 卡高密算力,无缝适配各类机房环境

科技热闻

IP地址交换如何让车联网效率翻倍?

郑州埃文科技

鸿蒙5开发宝藏案例分享---一多开发实例(游戏)

莓创技术

鸿蒙5开发宝藏案例分享---自由流转的拖拽多屏联动

莓创技术

数据分析与AI丨AI+数据,助力企业实现全生命周期智能运营

Altair RapidMiner

人工智能 机器学习 AI 数据分析 数字孪生

更快速度、更省空间、灵活恢复!YMatrix 增量备份功能重磅发布!

YMatrix 超融合数据库

数据资产 超融合数据库 YMatrix 增量备份

鸿蒙5开发宝藏案例分享---一多开发实例(旅行订票)

莓创技术

广州某科技公司遭境外黑客攻击?真实的安全防护,这几点不容错过

塞讯科技

AI 网络安全 CVE 安全验证

鸿蒙5开发宝藏案例分享---应用接续提升内容发布体验

莓创技术

行业沙龙 | 博睿数据联合承办2025 湾区金科(FinTech)沙龙——智能运维专场,分享主题演讲

博睿数据

AI对低代码技术的影响

不在线第一只蜗牛

AI 低代码

鸿蒙5开发案例分享揭秘---一多开发实例(商务办公)

莓创技术

1688商品详情API接口指南

tbapi

1688商品详情接口 1688数据采集 1688商品详情API

全网最全的Java面试八股文合集!【附答案】

Geek_Yin

Java 程序员 java面试 Java面试题 Java面试八股文

Java面试八股文(精简、纯手打)

Geek_Yin

Java 程序员 java面试 Java面试题 Java面试八股文

鸿蒙5开发宝藏案例分享---一多开发实例(地图导航)

莓创技术

NFT 市场或在 BTC 达到周期顶峰之后卷土重来

PowerVerse

代币 区块链+ BTC NFT DePIN

精彩回顾丨Altair携手汽车工程学会举办主题网络研讨会,共探AI与无网格技术助力汽车行业智能未来

Altair RapidMiner

机器学习 AI SimSolid 汽车工程 无网格仿真

秒杀系统—架构设计和方案简介

量贩潮汐·WholesaleTide

架构

JetBrains元编程系统支持面向语言编程和DSL_JetBrains_Srini Penchikala_InfoQ精选文章