写点什么

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

  • 2009-06-12
  • 本文字数:1770 字

    阅读完需:约 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 程序,那种感觉一定不错吧!

2009-06-12 00:022373
用户头像

发布了 150 篇内容, 共 53.0 次阅读, 收获喜欢 10 次。

关注

评论

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

上游思维:如何定义成功?

石云升

读书笔记 8月日更 上游思维

hadoop 基本原理与应用

神策技术社区

hadoop 程序员 Hadoop全分布式集群

科技的世界里没有“粉红税”

脑极体

从 0 到 1 ,不能忽略的「道」

非著名程序员

产品 产品经理 认知提升 8月日更

Python开发篇——RSA加密算法和SHA1计算文件校验码

吴脑的键客

Python

北鲲云计算:为药企研发的飞速发展提供助力

北鲲云

GrowingIO Design 组件库搭建之单元测试

GrowingIO技术专栏

单元测试 Jest Storybook

MySQL中FROM_UNIXTIME与UNIX_TIMESTAMP

一个大红包

8月日更

fil挖矿的规则是什么?fil挖矿收益如何?

区块链 分布式存储 IPFS fil收益 fil挖矿

第一次看房

escray

生活记录 8月日更

硬核技术,带你走进3D点云车道线自动识别

澳鹏Appen

自动驾驶 机器学习 训练数据 3D点云 车道线标注

基金这么赚钱!!编程实现基金从采集到分析通用模板!(白酒为例)

Python研究者

8月日更

【微积分的力量】芝诺悖论

LeifChen

8月日更 微积分 芝诺悖论

神策数据微信小程序 SDK 功能介绍

神策技术社区

小程序 微信 代码 神策数据 维护

基于 CODING CD + Nocalhost 在大型应用的 ChatOps 实践

CODING DevOps

DevOps 工具 CI/CD 开发测试 ChatOps

心态炸了!我的join查询多加了个过滤条件性能就崩了

林一

MySQL 查询优化 多表join

获取自己的公网 IP 地址

耳东@Erdong

IP地址 8月日更

云原生 | 混沌工程工具 ChaosBlade Operator Pod 篇

RadonDB

数据库 混沌工程

分享 6 个JavaScript学习资源

devpoint

JavaScript GitHub 8月日更

ASM 实现 Hook Lambda 和方法引用

神策技术社区

大前端 后端 asm 代码 神策数据

前端之算法(九)回溯算法

Augus

算法 8月日更

ipfs国家认可吗?ipfs挖矿靠谱吗?

IPFS国家认可吗 ipfs挖矿靠谱吗

三分钟了解大数据技术发展史

张浩_house

人工智能 机器学习 大数据

Flink 和流式应用运维(十-下)

Databri_AI

flink 监控 Web UI

网络攻防学习笔记 Day110

穿过生命散发芬芳

网络安全 8月日更

【前端 · 面试 】TCP 总结(一)—— 概述

编程三昧

8月日更

Springboot通过@WebFilter日志双份打印BUG分享

FunTester

性能测试 springboot bug

文化与科技的交织,华为P50 Pro与一曲长城谣

脑极体

Windows Server 2019 安装提要 (及 VS 2019 Build Tool) - 续

hedzr

DevOps vscode windows server 2019 server core visual studio 2019

[灵魂拷问]MySQL面试高频100问(工程师方向)

编程菌

Java 编程 程序员 面试 计算机

OceanBase 常见参数和变量究竟有什么本质区别?

OceanBase 数据库

数据库 oceanbase OceanBase 开源 OceanBase 社区版

平台多样化:Gavin Grover的Groovy之路_Java_宋玮_InfoQ精选文章