低代码到底是不是行业毒瘤?一线大厂怎么做的?戳此了解>>> 了解详情
写点什么

标准化对 Ruby 意味着什么

2010 年 3 月 11 日

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

2010 年 3 月 11 日 09:121634
用户头像

发布了 135 篇内容, 共 51.6 次阅读, 收获喜欢 32 次。

关注

评论

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

你不知道的 Web Workers (上)

阿宝哥

Java Web 前端开发 Web Worker

架构师训练营 第三周 设计模式作业

且听且吟

极客大学架构师训练营

架构师训练营第三周作业

James-Pang

极客大学架构师训练营

极客时间架构师训练营 - week3 - 作业 1

jjn0703

极客时间 极客大学架构师训练营

架构师训练营第三周总结

James-Pang

极客大学架构师训练营

架构师训练营第三周作业

王铭铭

极客大学架构师训练营

如果你想要说服别人,要诉诸利益,而非诉诸理性

Neco.W

理性 说服 利益 谈判

组合设计模式-打印窗口组件的树状结构

张磊

架构训练营 0 期总结 -- 第三周

互金从业者X

新来的"大神"用策略模式把if else给"优化"了,技术总监说:能不能想好了再改?

Hollis

Java 设计模式

架构师训练营第 3 周作业

Season

单例模式 极客大学架构师训练营 组合模式

MySQL-InnoDB 索引

Arthur

手握美团offer,结果背调红灯,哭了,网友:别小瞧背调公司

程序员生活志

面试 美团 offer 背调

数字化转型必读书单

华章IT

数据中台 中台 数字化转型 行业资讯 银行数字化转型

如何有效实现“科技抗疫”?这家科技巨头正在作出典范

最新动态

单例模式的实现方式

互金从业者X

架构师训练营 Week03 学习心得

架构师训练营第三周作业

sunnywhy

架构师训练营第三周总结

sunnywhy

大厂经验(2):多端可视化埋点解决方案

DeeperMan

前端 采集 埋点

第三周作业一

李海明

单例模式 组合模式

作业03-代码重构

梦子说

极客大学架构师训练营 命题作业

第三章作业

武鹏

只看到了别人28岁从字节跳动退休,背后的期权知识你知道吗?

四猿外

创业 程序员 字节跳动 个人成长 期权

作业-02

梦子说

极客大学架构师训练营 作业

总结-02-设计模式

梦子说

学习 极客大学架构师训练营

代码重构

dongge

架构师训练营第三周作业

hiqian

助力经济复苏 联想来酷"618"聚"惠"来袭

Geek_116789

设计模式的应用

李海明

总结

架构师训练营 - 学习总结 - 第三讲

吕浩

2021 ThoughtWorks 技术雷达峰会

2021 ThoughtWorks 技术雷达峰会

标准化对Ruby意味着什么-InfoQ