`

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

阅读更多

Srini Penchikala译者 张龙 2008-10-23

 

查看英文原文: Is Groovy a Better Choice Than Java for Creating Internal DSLs?
来自:http://www.infoq.com/cn/news/2008/10/groovy-internal-dsl

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

 

最近越来越多的人使用像ScalaGroovyJRuby 这样的兼容于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)工具GSpeceasyb ,还有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的更多信息。


分享到:
评论

相关推荐

    Java Groovy

    - 包括了实际案例分析和最佳实践建议,帮助读者更好地理解Groovy的潜力和应用方式。 #### 知识点三:Groovy的核心特性 - **闭包**:Groovy中的闭包类似于其他语言中的匿名函数,但具有更强的灵活性和表达能力。...

    Groovy入门教程.doc

    Groovy还提供了许多其他特性,比如元编程(Metaprogramming)、领域特定语言(DSLs)构建能力,以及对Java库的无缝集成,使得Groovy成为Java开发者扩展工具箱的理想选择。在实际应用中,Groovy常用于自动化任务、...

    groovy program

    书中展示了Groovy的理论知识和实践应用,包括但不限于基础日常任务、编译时元编程和AST变换、方法拦截与合成以及创建DSLs(领域特定语言)。此外,书籍的独特之处在于,它为不同级别的读者提供了易于理解的实例,...

    groovy经典_资料

    Groovy之所以受到青睐,主要是因为它比Java更加抽象和高效,允许开发者编写更少的代码来实现同样的功能。以下是对Groovy的一些核心知识点的详细说明: **Groovy的优势:** 1. **更高的抽象程度**:Groovy简化了...

    apache-groovy-sdk-2.5.6.zip

    1. **简洁的语法**:Groovy的语法比Java更加简洁,它允许开发者使用更少的代码完成同样的任务。例如,省略了分号和大括号,以及支持闭包(closures)等。 2. **动态性**:Groovy是动态类型的,这意味着变量的类型是...

    apache-groovy-sdk-3.0.8.zip

    1. **简洁语法**:Groovy 的语法比Java更加简洁,它允许开发者使用更少的代码来实现同样的功能。例如,它省略了分号和大括号,支持闭包(closures),使得代码更易读写。 2. **动态类型**:与Java的静态类型不同,...

    Groovy轻松入门—搭建Groovy开发环境

    Groovy是一种基于Java平台的动态、灵活的编程语言,它扩展了Java的语法,提供了更加简洁和易读的代码编写方式。在Groovy中,你可以享受到脚本语言的便利,同时利用Java的强大生态系统。本文将深入探讨如何轻松入门...

    groovy_demo

    - **简洁性**:Groovy的语法比Java更为简洁,例如,不需要分号结束语句,类定义和方法声明也更加紧凑。 - **动态类型**:不同于Java的静态类型,Groovy是动态类型的,变量的类型在运行时确定。 - **GString(插值...

    groovy基础教程源码,很全面

    Groovy是一种基于Java平台的动态编程语言,它与Java语法高度兼容,但提供了更简洁、更灵活的语法,使得开发更为高效。Groovy基础教程源码涵盖了Groovy语言的各个方面,是学习和理解Groovy语言的宝贵资源。下面将详细...

    groovy经典资料汇集

    4. **Master+Groovy**:这可能是Groovy的进阶教程,涵盖了领域特定语言(DSLs)的创建、并发编程、Groovy与Java的互操作性、Spock测试框架的应用等内容,旨在帮助开发者将Groovy技能提升到一个更高的层次。...

    Learning Groovy(Apress,2016)

    You’ll also learn more advanced aspects of Groovy, such as using Groovy design patterns, writing DSLs in Groovy, and taking advantage of Groovy’s functional programming features. There is more to ...

    Groovy资料(英文版)

    1. **简洁的语法**:Groovy的语法比Java更加紧凑和易读,它允许开发者使用更少的代码实现同样的功能,如闭包和链式调用。 2. **动态性**:Groovy是动态类型的,这意味着变量的类型在运行时确定,这使得编程更加灵活...

    DSLs实战-DSLs in Action

    第五章聚焦于三种流行脚本语言——Ruby、Groovy和Clojure——并详细讲解了如何在这三种语言中设计和实现内部DSL。每个部分都包含了具体的代码实例和解释,帮助读者了解如何利用这些语言的特性来构建高效且易用的DSL...

    apache groovy-2.4.8

    Groovy的主要特点包括其简洁的语法,它比Java更易于阅读和编写。例如,Groovy支持闭包(closures),这是一种强大的代码块,可以用于函数式编程,使得处理集合和数据流变得更加简单。此外,Groovy的语法还允许开发者...

    Programming Groovy

    通过学习元编程,开发者可以更好地理解Groovy如何与Java平台交互,以及如何利用这种交互来优化代码结构和性能。 - **动态类型**:Groovy的动态特性允许对象在运行时改变其行为,这一点对于熟悉静态类型的Java开发者...

    Groovy中文教程

    在Java生态系统中,Groovy被广泛用于构建脚本、自动化任务、测试框架、Web应用以及领域特定语言(DSLs)的创建。 Groovy的语法特点包括: 1. 更简洁的类定义:Groovy允许省略分号、花括号,甚至类声明中的public...

    groovy

    Groovy是一种动态类型的语言,它是Java的超集,这意味着任何有效的Java代码也是Groovy的有效代码。Groovy的设计目的是为了提供一种更加简洁、易读且富有表现力的编程体验,尤其在构建Domain-Specific Languages...

    Groovy.for.Domain.Specific.Languages.pdf

    《Groovy for Domain-Specific Languages》一书由Fergal Dearle撰写,旨在探讨如何利用Groovy编程语言创建和优化领域特定语言(Domain-Specific Languages,简称DSLs),以增强和扩展Java应用程序的功能。...

Global site tag (gtag.js) - Google Analytics