写点什么

创建内部 DSLs——Groovy 比 Java 更好吗?

  • 2008-10-22
  • 本文字数:1263 字

    阅读完需:约 4 分钟

最近越来越多的人使用像 Scala Groovy JRuby 这样的兼容于 JVM 的语言来开发领域特定语言( Domain Specific Languages ,即 DSLs)。但他们真的比 Java 更适合创建内部 DSLs 么? Venkat Subramaniam 解释了为何像 Groovy 这样的动态语言中的“本质优于形式(Essence over ceremony)”及“元编程”特性有助于开发内部 DSLs。

他说相对于内部 DSLs,Java 更适合于创建外部 DSLs,因为内部 DSLs 更依赖于宿主语言的语法。Groovy 动态方法的强大功能使其更适合于创建内部 DSLs。Venkat 最近撰写了一篇关于Groovy 中的元编程特性及如何利用该技术编写内部DSLs 的文章,

元编程是像Groovy 及JRuby 这样新一代Java 平台语言所共有的一个特性,但Java 本身却不具备该特性,它有助于构建内部DSLs,允许开发者动态增加并调用方法。Groovy 针对每个Java 类都有一个元类(metaclass)。开发者可以轻松地在运行期将方法添加到类中。它还可以通过 methodMissing 方法轻松地在运行期对方法进行合成。Venkat 通过一个示例应用(基于一个简单的输入文件)阐述了创建基于 Groovy 的内部 DSL 所需的步骤。他还使用一个示例应用比较了 Groovy 代码与 Java 代码在处理 DSL 时的区别。

很多文档都谈到了如何使用Groovy 编写DSL,同时还有几个DSL 实现,如 behavior testing DSL 、基于 Groovy 的行为驱动开发(Behavior Driven Development,即 BDD)工具 GSpec easyb ,还有 Groovy Finite State Machine (FSM)DSL。

InfoQ 向 Venkat 问到当前 DSL(外部和内部)在企业应用中的使用情况及动态语言在创建 DSLs 中的未来角色。他说到:

DSLs 已经在企业应用中流行很长一段时间了。所谓的新东西无外乎就是对其认识的增强和更多可用的工具。当然动态语言背后的动力也在推进着内部 DSLs 的使用。

Groovy 中的元编程看起来很强大。在开发 Web 应用时该特性有哪些典型的应用场景?

当然很强大了。 GORM 已经在 Grails 中大量使用该特性进行 Web 开发了。如果你向表中增加一个字段,你就可以轻松地在相应的模型类上使用查找方法来查询基于该新增加的字段值的对象。这些方法基于约定被动态合成起来,不需要再手工去创建了。你还可以在任何需要类似的动态行为的地方使用元编程。在使用 AOP 的地方,你也可以使用元编程。

您觉得动态语言在创建内部 DSL 的发展中将会扮演怎样的角色呢?

当然会有一些挑战。一方面,动态语言使得解析和处理内部 DSLs 变得异常简单。然而验证内部 DSLs 却并不轻松。我相信支持工具和好的验证器会在未来几年出现。这当然是很好的研究和实验领域。假如不久后能跨越这些障碍,那么在相同的平台上如 Java 和.NET 将动态语言与传统语言混合起来所获得的这种能力会使得内部 DSLs 更棒。

之前的一篇文章中,Venkat 通过一个示例应用阐述了如何使用Java 创建外部和内部DSLs。我们可以从Venkat 所编写的中了解到关于Groovy 中的元编程更多的信息。请阅读这篇文章以了解Java 在创建内部DSL 中的角色。可以从这里了解InfoQ 上关于DSLs 的更多信息。

查看英文原文: Is Groovy a Better Choice Than Java for Creating Internal DSLs?

2008-10-22 15:221556
用户头像

发布了 88 篇内容, 共 268.9 次阅读, 收获喜欢 8 次。

关注

评论

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

Cisco Secure Network Analytics 7.5.1 发布下载,新增功能概览

sysin

Cisco NDR

多线程;顺序容器;智能指针

芯动大师

多线程 智能指针

一个小白如何靠这个 AI 工具修改公司代码?

极狐GitLab

gitlab #GitLab AI编程 驭码CodeRider

加入华为云开源共创,让优秀开发者支持更优秀开发者

华为云开发者联盟

云原生 GaussDB 大数据 开源

rEvolution收购WePlay,增强实力并扩大全球影响力

财见

一文读懂 Zypher Network Zytron 引擎:让链游从 Web2.5 过渡Web3

西柚子

Pencils Protocol 成市场新宠,生态通证$DAPP价值几何

股市老人

SecureCRT (专业终端SSH工具)附注册码 v9.4.3 Win&Mac版

你的猪会飞吗

SecureCRT下载 SecureCRT mac SecureCRT Mac破解版

什么是 JWT?它是如何工作的?

江南一点雨

全面解读舞台LED显示屏选型方法

Dylan

LED LED显示屏 全彩LED显示屏 舞台表演

读书笔记:告别拖延症的行动指南

老张

读书笔记 认知提升 职场成长

加速链游Web2.5过渡到 Web3,一文读懂 Zypher Network 的 Zytron 引擎

BlockChain先知

智驭未来金融:哈银消金入选银行业典型案例,重塑金融服务生态

极客天地

从“纸面算力”到“好用算力”,超聚变打通AI+“最后一公里”

Alter

万界星空科技机械加工行业MES系统功能介绍

万界星空科技

mes 万界星空科技mes 机械加工 机械加工mes

“算力好用”:数字中国的新黄河

脑极体

AI

预售价16万元起 长安马自达EZ-6引领合资B级轿车市场潮流

科技热闻

加速区块链游戏过渡到 Web3,一文读懂Zypher Network的Zytron引擎

石头财经

万界星空科技AI低代码平台:重塑数字化创新边界

万界星空科技

低代码 mes 万界星空科技mes 万界星空科技低代码平台

精通Java并发锁机制:24种锁技巧+业务锁匹配方案(第三部分)

肖哥弹架构

Java 高并发

Pencils Protocol 成市场新宠,生态通证$DAPP价值几何

加密眼界

Pencils Protocol 成 DeFi 赛道新宠 ,市场广泛看好$DAPP

BlockChain先知

Pencils Protocol 成市场新宠,生态通证$DAPP价值几何

石头财经

创建内部DSLs——Groovy比Java更好吗?_Java_Srini Penchikala_InfoQ精选文章