BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

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

| 作者 宋玮 关注 0 他的粉丝 发布于 2009年6月13日. 估计阅读时间: 6 分钟 | 如何结合区块链技术,帮助企业降本增效?让我们深度了解几个成功的案例。

最近,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程序,那种感觉一定不错吧!

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

wow! by a ilangg

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

wow!

Re: wow! by 陈 建闽

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

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

2 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT