【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

创建内部 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:221303
用户头像

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

关注

评论

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

日常数字生活中,手机里的隐私信息是如何被保护的?

最新动态

KubeEdge-Ianvs v0.2 发布:终身学习支持非结构化场景

华为云开发者联盟

云计算 云原生 后端 华为云 华为云开发者联盟

最常用的4种光纤接口结构有哪些?

小魏写代码

Docker打包前端vue代码推送镜像到远程仓库

javaNice

Java’ Docker 镜像

全网累计销量TOP 1的TCL超薄嵌入式冰箱,跟着选0出错!

科技热闻

一站式IT统一运维管理平台有哪些?大家都在用哪个?

行云管家

IT运维 运维管理 统一运维

MegEngine 9-10 双月报:新版本发布,AI 生态升级,不容错过!

MegEngineBot

深度学习 开发者 开源社区 MegEngine

Photoshop 2024 Mac最新资源 附 alpaca增效工具 可完美替代AI创成式填充

加油,小妞!

ps AI绘图 Photoshop 2024

人人用数不用愁,动态数据脱敏为您解忧

华为云开发者联盟

数据库 大数据 华为云 数仓 华为云开发者联盟

After Effects 2024 for Mac(ae视频特效制作工具)

展初云

Mac软件 视频编辑 AE After Effects

ps插件:Camera Raw for Mac 16.0中文版

加油,小妞!

ps插件 Camera Raw 16

「我在淘天做技术」1688的AIGC商业化落地实践探索

阿里技术

创意 校园招聘 1688 B端 AIGC

CodeWhisperer 的安装及体验

亚马逊云科技 (Amazon Web Services)

Java Python 人工智能 云上探索实验室 Amazon CodeWhisperer

可跨平台数据库多连管理工具:Navicat Premium 16 中文版

繁星

数据库管理 Navicat Premium 16

如何在嵌入式软件开发的过程中使用DevSecOps方法,提升开发效率与安全性

龙智—DevSecOps解决方案

DevOps DevSecOps

使用 Appilot 部署 Llama2,会聊天就行!

SEAL安全

Walrus llama-2 Appilot 企业号11月PK榜

企业数智化领先实践,学得会!

用友BIP

数智化转型

数智化营销——企业会员私域运营的成功路径

用友BIP

数智营销

深入理解 Dubbo 协议的调试方法与实践

Apifox

Java 程序员 dubbo 后端 RPC

犀牛Rhino 8 for Mac(3D建模软件)

展初云

Mac 建模软件 Rhino 犀牛

掌握项目管理:8大风险分析工具与技术全解析

PingCode

项目管理 产品经理 风险分析

大型企业财务共享建设避坑指南之场景化表单设计

用友BIP

财务共享

组态软件特点及工控组态软件应用

2D3D前端可视化开发

物联网 组态软件 PLC 工业控制系统 web组态编辑器

治理效率提升77%!揭秘基于DataLeap实时健康分的最佳实践

字节跳动数据平台

数据库 数据治理 数据安全 数据研发 企业号11月PK榜

Kontakt Factory Library 2(Kontakt原厂音色库)

展初云

Mac软件 音色库 Kontakt

人民网《外企谈信心》| Denodo:加强数据管理技术合作 护航数字经济高质量发展

科技汇

Parallels Desktop 19 虚拟机 一键激活 无需关闭sip

繁星

pd虚拟机 Parallels Desktop 19 pd虚拟机 19

深度开发者故事|API Explorer 助力教育行业 一站式搭建实验环境

华为云PaaS服务小智

云计算 软件开发 华为云

龙芯浏览器是哪家公司开发的?支持信创吗?

行云管家

浏览器 信创 国产化 龙芯浏览器

生态合作升级!用友Fast by BIP On 阿里云战略发布

用友BIP

数智化采购平台覆盖间接采购全流程,现金流优化的“小成大就”

用友BIP

数智采购

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