InfoQ

InfoQ

新闻

我的书签

登录注册 以永久保存书签。

该内容已经被标记书签!

标记书签错误,请重试!

平台多样化:Gavin Grover的Groovy之路

作者 宋玮 发布于 2009年6月12日

领域
架构 & 设计,
运维 & 基础架构,
语言 & 开发
主题
开放源代码 ,
.NET ,
.NET框架 ,
Java ,
动态语言
标签
DLR ,
Groovy ,
C#

最近,Gavin Grover将其开发的Groovy-DLR 1.0的beta 04版源码上传到了codeflex站点,该版本对以前的版本作出了一些改进,包括就地(in-place)注释lex定义。

众所周知,Groovy是在借鉴了众多语言如Perl、Python、Ruby以及Smalltalk的基础上发展而来的,最初是在运行于Java平台的,而且其支持Java的大部分语法,与Java有着天然的集成性,被称为Super Java。在Grails出现之后,极大地推动了Groovy的发展。

随着Groovy的发展,一些Groovy的爱好者开始琢磨着扩展Groovy的生存空间,Gavin Grover就是其中一位,他开始考虑使Groovy语言在.NET的DLR环境下运行。从3月份开始,Gavin Grover陆续在codeplex上发布了Groovy-DLR-1.0的几个beta版本。他在其博客上是这样描述的:

最近,Gavin Grover开始给微软的动态语言运行时(DLR)增加Groovy语言。他的主要精力投入到用combinator parser创建一个全功能的句法外衣,这是(J)Groovy所缺乏的。Groovy的语法是下一代C语言语系,旨在给语言句法带来自称性(self-referentiality)。

Groovy未来的目标平台还包括Parrot VM、Google GWT AST以及Python VM。

不过,Gavin Grover似乎放弃了Groovy/DLR的后续发展:

……我正在把语言切回到JVM、(J)Groovy AST、SCALA上……

虽说Groovy-DLR还未成熟就面临夭折的可能,但无论如何,Gavin Grover给我们提供了一种在.NET平台上运行Groovy的尝试,也给希望使用DLR创建其他语言的人们提供了一个实例教材,Groovy-DLR 1.0 beta 04的源代码可以从这里下载。

Gavin Grover还在其博文Groovy's Groovier Roadmap中提到了其Groovy路线图,说明了他已经实现及以后想要实现的Groovy特性:

就地lex定义(In-place lexing definitions)
Beta-4提供了基本的就地注释lex定义。例如,源文件中的addcomment "(?s:#{4}.*)"语句会给whitespace lexer增加这一注释定义,使其可以用于后续要解析的语句和文件。此处这一特例可以让我们在源文件加入####以表示到达了文件尾部(文件在此注释之后的内容无需再解析)。

就地解析hooks(In-place parsing hooks)
我们还将在parser中提供hooks以使Groovy程序员可以定义自己的基本表达式、路径元素(Path element)、操作符以及语句。我们将把后缀操作符(++和--)修改到路径元素中。操作符将有4层定义良好的组:从右向左运算(right-associative)的一元前缀、从左向右运算(left-associative)的二元操作、从右向左运算的三元操作以及从右向左运算的赋值(assignment)。

多种语法形式
Python使用了缩进吧语句组织成块(block),C语法语言使用大括号。Groovy将同时提供两种技术。在工作过程中,我们还将把该技术抽象到使用(:和[:的语法里的其他列表当中。Groovy开发者将能够选择语法形式,甚至在同一部分代码中混用两种形式,就像在自然语言中一样。

别名
别名是最初在为GrAST (Groovy AST)编写另一个lexer/parser过程中最能引起我兴趣的。我很早以前就希望用中文字符作为英语名字和程序关键字的别名,这样可以让代码更短。我不喜欢这样写程序:

content.tokenize().groupBy{ it }. collect{ ['key':it.key, 'value':it.value.size()] }. findAll{ it.value > 1 }.sort{ it.value }.reverse(). each{ println "${it.key.padLeft( 12 )} : $it.value" }

我想这样写(注:国人看着可能有些别扭,领会其意图即可):

物.割().组{它}.集{ ['钥':它.钥, '价':它.价.夵()] }. 都{它.价>1}.分{它.价}.向().每{打"${它.钥.左(12)}: $它.价"}

Groovy将允许程序的关键子及名字使用别名词汇。即使从右向左阅读的语言也将能够实现。所有Unicode的词汇将与Groovy语言紧密集成在一起。

自定义方法编辑器
我认为在Groovy提供CJK字符支持之后,CJK字符将快速流行起来,我还想提供一种输入方法,可以让向我这样的非中国人可以容易的学习和使用。为CJK字符通工程易用的IME这只是第一步;最终该IME将能够支持每一种Unicode字符。10年内,开发者就可以用埃及文字进行编程了!你能想像那是怎样的情景么?

虽然还有很长的路要走,但是Gavin Grover的一些思路也给了我们无限遐想,尤其是编写中文的Groovy程序,那种感觉一定不错吧!

宋玮 有多年软件开发经验,长期担任技术管理和项目管理工作,一直关心开源软件的发展动态以及软件过程和敏捷开发的实践探索。

wow! 发表人 yl alang 发表于
Re: wow! 发表人 陈 建闽 发表于
  1. 返回顶部

    wow!

    发表人 yl alang

    >>物.割().组{它}.集{ ['钥':它.钥, '价':它.价.夵()] }. 都{它.价>1}.分{它.价}.向().每{打"${它.钥.左(12)}: $它.价"}

    wow!

  2. 返回顶部

    Re: wow!

    发表人 陈 建闽

    这个看到过蛟龙居 里有个老外玩过!

深度内容

应用云平台的可用性——从新浪SAE看云平台设计

云计算平台的可用性,相比传统互联网服务而言,更加复杂和困难,也更具有挑战性。本文借助新浪SAE云平台为读者讲述了云平台可用性的定义、如何打造高可用的平台,以及对云计算的用户提出了建议。

JVM定制改进 @ 淘宝

淘宝高度重视Java平台的健康发展,组建了一个团队专注于Java平台的底层部分的性能、功能与稳定性改进;工作主要基于OpenJDK中的HotSpot VM开展,其中一些通用的功能随后也会逐渐反馈给OpenJDK社区。希望能与使用Java平台开发应用的大家交流经验。
本次演讲视频录制于QCon杭州2011

"伤得起"的云计算应用——对云端应用之架构的思考

2011年4月21日至22日是值得云计算从业者纪念的日子。Amazon的IaaS服务出现故障,导致许多商业网站的服务中断,影响非常严重。作为云计算用户,我们需要思考的是,如何保证即便在云服务不可用的情况,我们的应用架构仍然能够屹立不倒?本文正是站在云计算用户的角度试图探讨这一问题。

让交付的速度跟上思考的速度

12人的技术团队,4组刀片服务器,每月20亿的访问量,每日1次准时部署,99.9%的可用性。这可能吗?当然。想知道如何做的吗?百姓网将与您分享他们在DevOps实践过程中的经验和技巧。
本次演讲视频录制于QCon杭州2011

架构之路——穿行在产品和业务之间

篱笆作为一家起源于社区的电子商务公司,反映到技术层面就是同时要面对产品和业务,以及经营战略的变化调整。如何在产品和业务的夹缝之间完成技术架构的抽象与平衡,寻找更有效的价值定位,这当中有些经验教训和个人感悟愿与众人分享。
本次演讲视频录制于QCon杭州2011

特性注入:成功三部曲

本文将对特性注入以及相关方法做一个扫盲性的介绍。我们会解释这个框架的关键要素,并附上实例来证实它们。为了让文章保持相对较短,我们不会深入到某个工具或方法中,而是会给出一些参考资料,以便大家做进一步的研究。

解析JDK 7的动态类型语言支持

随着JDK 7的发布,字节码指令集终于迎来了第一位新成员——invokedynamic指令。这条新增加的指令是JDK 7实现“动态类型语言(Dynamically Typed Language)”支持而进行的改进之一,也是为JDK 8可以顺利实现Lambda表达式做技术准备。在这篇文章中,我们将去了解JDK 7这项新特性的出现前因后果和它的意义。

Java Remoting远程服务(下)

随着互联网应用的发展,Java分布式远程服务技术受到越来越多的关注,本文将对各种相关实现以示例的形式逐一介绍,并总结其中的优缺点,使读者能够在技术选型时有所准备。这是文章的下篇。