InfoQ

InfoQ

新闻

我的书签

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

该内容已经被标记书签!

标记书签错误,请重试!

标准化对Ruby意味着什么

作者 Mirko Stocker 译者 丁雪丰 发布于 2010年3月11日

领域
架构 & 设计,
语言 & 开发
主题
规范 ,
Ruby ,
运行时
标签
Rubinius ,
Ruby 1.9 ,
MagLev ,
RubySpec

RubyKaigi 2008上,Ruby的创造者Matz宣布了Ruby标准化计划, 其旨在“改善不同Ruby实现之间的兼容性 [..] 以及为Ruby进入日本政府铺平道路”。标准化工作的第一份提案会提交给日本工业标准委员会(Japanese Industrial Standards Committee),下一步再提交给ISO,使之成为国际标准。现在,你能找到Ruby标准的第一版草稿(超过300页)以及官方声明。除此之外,还有一个正在建设中的Wiki,希望能以HTML格式提供该标准。

另一个截然不同的联合各个Ruby实现的方式是RubySpec项目(InfoQ上与RubySpec相关的新闻),它以社区驱动的方式构建了一个可执行的规范。它是Rubinius项目的产物:

RubySpec项目的目标是为Ruby编程语言提供一个完全可执行的规范,其语法兼容RSpec。[..] 总的来说,该规范服务于两个目标:1)驱动Ruby实现的开发,2)作为一种验证机制。

InfoQ采访了RubySpec之父Brain Ford,了解了他对标准化的看法,以及标准化工作对RubySpec意义何在。

我认为ISO标准化的工作对Ruby非常重要,不仅是对语言本身,对社区亦是如此,在我眼里这个社区包含Ruby程序员、使用由Ruby编写的软件的人,以及不断增长的基于或使用Ruby编写的软件的业务。

在我看来,标准化文档和RubySpec是相辅相成的。文档着重以文本的形式,搭配适当的格式来描述Ruby,更多的是给出Ruby的一个定义。

与此相反,RubySpec着重以代码的方式描述Ruby的行为。除此之外,它还强调用一种可执行的规范来描述Ruby,这也是我们使用RSpec兼容语法的原因。

RubySpec还试图去捕获全部Ruby实现的行为的并集,为文档中记录的各种实现之间的差异提供了可执行的保障机制。例如,并非所有实现Ruby的平台都支持fork进程,哪些实现提供了该特性,RubySpec会提供相应的保障。

这就阐明了ISO标准化文档与RubySpec的一个重要的不同之处。ISO文档可以简单地说语言中的某个方面是要“在实现中进行定义的”,并没有提供更进一步的说明。不幸的是,实现这样一个标准有时是很困难的,就像我们看到的不同浏览器厂商实现CSS标准的混乱局面一样。RubySpec会尝试将没有具体说明的Ruby行为数量降低到最小。

一旦ISO标准化文档成熟之后,我们会在RubySpec中添加一些标签,让某个实现能够运行所有标记了“ISO标准”的内容。这能让该Ruby实现宣称自己是完全遵循ISO文档中指明的行为的。我不知道像这样的结果会不会被那些希望验证一个实现是否遵循标准的机构(也许是政府机构)所接受。

InfoQ:Rubinius会与遵循标准吗?

绝对会的。打一开始,我开始做RubySpec就是为了保证Rubinius能尽可能地符合“标准实现”或MRI(Matz's Ruby Interpreter)。我们在这方面下了很多功夫,RubySpec中只有很少几个地方添加了“not_compliant_on :rubinius”标签。因为ISO标准比RubySpec更宽松一些,所以我希望Rubinius能完全符合"ISO标准"。

Ruby标准的草稿是基于Ruby 1.8.7的,但现在已经有了Ruby 1.9.2。我们向Ruby 1.9的版本管理员Yuki Sonoda了解了Ruby 1.9与标准化相关的一些计划:

JIS/ISO标准草案已经制定好了,Ruby 1.9会遵循该草案。草案设计得比较宽松,它将对Ruby处理程序的限制降到了最低,因此就算是1.8.7这样的版本也会需要类似RubySpec这样的更严格的规范来保证不同实现之间的兼容性。

关于其他的Ruby实现,Gemstone(MagLev背后的公司)的Monty Williams告诉了我们他对标准化工作的看法:

我们当然很赞同提出一个Ruby标准。站在更高的层面来看,有一个被认可的标准能帮助提高Ruby在某些特定部门的采用率。我们希望在Ruby标准最终定稿时能保证MagLev是符合该标准的。

InfoQ:Ruby标准对MagLev的开发有什么帮助吗?

MagLev的很多实现工作都先于标准草案,在这方面,对我们帮助最大的是能有一个兼容性测试套件,它能证明我们符合标准,有点类似于JCK。RubySpec项目就是在这个方向上跨出的一大步。

然而,Ruby标准对未来的实现者有着莫大的帮助,它指明了Ruby的各个细节。

我们的读者又会有何想法:如果Ruby有一个ISO标准,在自己的组织内引入Ruby时是否会更方便一些呢?

查看英文原文:What Standardization Will Mean For Ruby

译者 丁雪丰 是InfoQ中文站编辑,满江红翻译组核心成员,出版过《Spring攻略》、《JRuby实战》等多部译著。主要关注领域:企业级应用、海量数据计算、动态语言应用等。

深度内容

大规模视频网站的计费与流量管理

本次分享将会就大规模视频网站的计费与流量管理这个话题,从操作层面细细进行讲解和分析,为系统工程师们揭示平日里我们没有关心的另一些内容。同时也希望本次分享能揭示行业中的一些“潜规则”,让互联网行业的流量与带宽管理更为开放与简洁。
本次演讲视频录制于QCon杭州2011

专访Jeffrey Richter:Windows 8是微软的重中之重

Jeffrey Richter以其多本Windows核心技术的经典著作而闻名,同时,他深入掌握微软的.NET等一系列核心技术,2012年1月,Jeffrey Richter在北京接受了InfoQ中文站的专访,谈到Windows 8和WinRT编程,并就异步编程、Windows编程中的可扩展性、性能和安全性方面给出自己的建议。

应用云平台的可用性——从新浪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

特性注入:成功三部曲

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