InfoQ

新闻

Ruby.NET前途未卜

作者 Werner Schuster译者 李明(nasi) 发布于 2008年2月27日 下午7时41分

社区
.NET,
Ruby
主题
开放源代码,
动态语言,
Ruby on Rails
标签
Rails,
IronRuby,
Ruby.NET,
DLR
过去的两年里,在可选Ruby实现方面进展很大:在官方MRI及后续的Ruby 1.9之后,许多其他Ruby实现的项目被启动:基于JVM的JRubyXRuby、.NET平台的Ruby.NETIronRuby以及一个自托管的虚拟机Rubinius

现在看来一些合并已经发生了:XRuby的开发已经慢了下来——因为JRuby更大的动力和更广泛的使用,还因为它不能够像JRuby的扩展那样在Java中支持原生Ruby函数(例如:OpenSSL、Oniguruma正则表达式引擎等等)。

Ruby.NET的维护者Wayne Kelly博士现在看来已经在Ruby.NET和IronRuby之间做出了个人的决定。他在Ruby.NET的邮件列表中宣布:

上周在Lang.NET讨论会上,我展示了我们在Ruby.NET项目上的工作,同时也有机会了解到IronRuby项目的进展以及DLR的内部运作(Charles Nutter也展示了JRuby项目)。

我的结论是DLR无疑会一直走下去,它甚至已经成为微软平台的一个非常重要的部分。我也深信如果想达到产品级别的质量和性能, Ruby.NET必须要重新发明(或者采用)某种相当于DLR的东西。如果今天我们启动这个项目的话,我们没有理由不用DLR。尽管Ruby.NET起初 比起IronRuby项目来有一个很好的开端;在引入Ruby.NET的解析器和扫描器以及对充分利用DLR以后,我此时相信IronRuby作为. NET平台上的一个产品级别的Ruby实现将会更有可能取得成功。我认为在.NET上没有必要最终存在两个不同的Ruby实现。所以,如果Ruby.NET不可能是这个最终实现的话,那么我们就没有必要再浪费开发者的努力去徒劳地追求这个目标。

动态语言运行时(DLR)协助创建(动态)语言运行时的库。例如,它禁止开发者直接创建MS IL指令,而是通过DLR将开发者创建的DLR树转换成MS IL。

最近这种方法正逐渐被关注,因为它为语言制订人简化了许多工作。来自Ruby In Steel团队的Dermot Hogan描述了如何通过Antrl树语法来生成DLR树

现在,在Antlr方面我时常碰到的问题是,已经得到AST后接下来该做什么?通过Antlr得到一个简单的语法很容易,但是要 通过它做点儿什么可就得需要些神迹了,因为CLR代码并不简单。但是,通过树语法将Antlr的AST和DLR连接起来就方面多了——看看上面的代码。就 是编写DLR的“适配器”类而已。

部分对Kelly博士消息的反应集中在IronRuby是否真的是.NET平台唯一可行的Ruby实现。例如,JRuby团队的Ola Bini说道

我一点儿也不喜欢这些新闻。在很多时候拥有一个强劲的竞争者将会促进生态系统中的每一个人。现在IronRuby即将变成这个领 域唯一的玩家,除非其他人(比如Ted Neward和David Peterson)决定接手Ruby.NET。我希望有人这样做。这会让.NET的世界变得更好。 

关键问题并不在于我们是否相信John Lam关于IronRuby的想法,而是在于我们是否相信微软在做正确的事情。我们相信吗?

这里提到了重要的一点:因为Ruby.NET是一个开源项目,一个开发者的离开并意味着项目的结束——其他开发者们可以接手并继续开发。

同时,IronRuby的John Lam就此事说道

我们将会热烈欢迎Wayne,并邀请任何希望从事IronRuby的朋友加入我们的开源项目。微软研究院资助了部分Ruby.NET的开发,他们的解析器同时也应用于IronRuby。感谢Wayne在制作Gardens Point Parser Generator上杰出的工作。

[...]

在CLR只有一个单一的实现在.NET社区是可以理解的。Ruby不仅仅是语言,还有运行在其上的程序。我们项目中最难的部分并不是如何让语言正确 工作(尽管这也不容易),而是使得IronRuby可以运行Ruby的程序。不管Rails的反对者们过去都说了什么,Rails依然是一个重要的程序。

这和之前的帖子相印证,在其中John提到当前IronRuby的开发策略

最终,我们谈到了如何才能到达1.0。当前我们正在向全局驱动开发过程转换。我们的下一个目标是让“gem install hoe”工作起来。Rakefile中包含一个叫做“gap”的任务,可以让你针对目标应用程序通过set_trace_proc解释器钩子来进行gap 分析。

这和Kelly博士支持Rails的目标看上去很相似:

我依然觉得我们还有未完成的工作——我们将目标设定为可以在.NET上运行Rails,但是我们还没有达到。如果我们能贡献出我们的经验用来帮助IronRuby实现它的话,至少我个人对于可以帮助这个任务完成而感到非常满足。

注意:无论Rails对于.NET开发者来说有多么重要——其代码涉及到了Ruby的大部分特性,尤其是元编程特性。不凡的Rails应用在IronRuby上工作正常意味着Ruby特性的一大部分已经被正确的实现了。通过在IronRuby上运行Rubinius项目定义的可执行Ruby规格,将会客观地反映IronRuby的兼容性究竟如何。

查看英文原文:Ruby.NET future uncertain

没有回复

回复

深度内容

Flex与JSON及XML的互操作

平台需要互操作性。在这篇文章中,作者仔细研究了Flex和JSON及XML的互操作性。文章也包含了使用E4X库来将XML映射到图表和表格组件的内容,还演示了如何使用as3core库来解码JSON消息。

用Qi4j进行面向组合编程

本文将简要介绍面向组合编程(COP,Composite Oriented Programming)的概念,展示它如何规避OOP存在的一些问题,并重新点燃使用可重用部件组装领域模型(Domain Model)的希望。

系统开发——新学科,新教育

一门新的计算机学科——“系统开发”,强调人性化、匠艺、设计、创意、创新和新事物的涌现,并建议用被称为“bottega”的工作室替代乏善可陈的教室。

图书聚焦:Visual Studio 2008 揭秘

Mike Snell和Lars Powers用他们最近由Sams出版的新书《Visual Studio 2008揭秘》,试图帮助大家提高开发人员的生产力。本文包括一个下载样章——第10章调试。

BPEL为何不是BPM的圣杯?

Pierre Vigneras在本文中讨论了作为标准之一的BPEL所存在的问题。Pierre先给我们大致介绍了一个简单的并行流程,接着讨论了从业者在试图以一个结构化模型为基础表达非结构化流程时遇到的一系列问题。

基于范型的多语言编程

你是否仔细思考过,为什么人们总在讨论“要正确的语言做恰当的事情”?在这篇文章中,Sadek Drobi向你解释了为什么应该在系统内部混合使用多种语言。

采访与书摘《Pro Web 2.0 Application Development with GWT》

Jeff Dwyer就关于他的新书(《Pro Web 2.0 Application Development with GWT》)、GWT1.5以及创建可搜索的Ajax应用谈了一些他的见解。

时刻准备着,迎接IT业的春天

我们需要设身处地地为客户及客户的业务本身着想,与客户同舟共济。更多创新的思路、产品和模式也同样将为IT业带来新的出路。IT业并不需要坐以待毙,在春天到来之后,市场将会更加繁荣!