Ruby 2.0.0-p0 发布

我们非常荣幸地发布 Ruby 2.0.0-p0 版。

Ruby 2.0.0 是 Ruby 2.0 系列首个稳定版本。对于 Ruby 不断增加的需求及多样性方面的要求,此版本增加了许多新的特性并做出了相应改善。

希望您使用 Ruby 2.0.0 编程愉快!

下载

Ruby 2.0.0 简介

新特性

重要部分:

  • 语言的核心特性
    • 关键字参数:满足 API 设计的灵活性
    • Module#prepend:扩展类的新方式
    • %i 字面量:轻松地使用符号创建数组
    • __dir__:返回当前执行文件所在的目录名
    • 默认使用 UTF-8 编码:没必要再使用编码声明注释了
  • 内置库
    • Enumerable#lazy 和 Enumerator::Lazy,懒惰流(可能是无限的)
    • Enumerator#size 和 Range#size:对大小惰性求值
    • #to_h:转换成散列类型的新方式
    • Onigmo:新的正则表达式引擎(Oniguruma 的分支)
    • 异步异常处理 API
  • 调试支持
    • 支持 DTrace:可在生产环境中进行诊断
    • TracePoint:改进的跟踪 API
  • 性能改进
    • 以位图标记优化 GC
    • 优化了 Kernel#require,启动 Rails 程序更快了
    • 优化了虚拟机,比如方法调度
    • 优化了浮点数操作

此外,我们实验性地在 Ruby 2.0.0 中加入了 Refinements 功能,这是新一代模块化编程理念。

更多的性能,改良及细节请参见 NEWS。

兼容性

在规划 2.0.0 时,我们兼顾了与 1.9 的兼容性。从 1.9 移植到 2.0 要比从 1.8 移植到 1.9 更容易。(稍后将介绍已知的不兼容部分。)

在此,非常感谢第三方开发者的大力支持,一些著名的应用,例如 Rails 和 tDiary,在发布 2.0.0 候选版本时都给予了很多反馈。

文档

据很多 Ruby 爱好者的要求,我们也对文档做了改进,为大量模块和方法添加了 rdoc 文档。如果说 1.9 的文档覆盖率是 60%,那么 2.0.0 就达到了 75%。此外,我们还添加了一些针对 Ruby 语法的说明,可以使用下面的命令查看:

ri ruby:syntax

稳定性

请注意,和 1.9.0 版不同,尽管 2.0.0 版本号的最后一位是 0,却已经是个稳定版了。我们强烈建议所有代码库的开发者都要支持 2.0.0 版。正如前面所说,从 1.9 迁移到 2.0 更加容易。

Ruby 2.0.0 版是可以实际运用的,而且绝对能提高您使用 Ruby 编程的效率。

备注

特性介绍文章

下面是一些其他人撰写的文章,介绍了 2.0.0 版的特性:

以下文章也很有帮助,但是关于 refinement 的论述稍显陈旧:

此外,近期发行的《Rubyist Magazine》中有一些文章,由各功能的设计者编写,介绍了 2.0.0 版中的新功能。

虽然,这个杂志中的文章是日语的,但后续会有英文翻译。

不兼容性

据我们所知,Ruby 2.0.0 有以下五个明显的不兼容问题:

  • 现在 Ruby 脚本的默认编码是UTF-8 [#6679]。一些用户反馈,影响现有的程序,比如一些评测程序变得很慢[ruby-dev:46547]。
  • 在 Ruby 1.9 引入 M17N 时,就废弃了 Iconv,现在彻底删除了,请使用 String#encode 等代替。
  • 存在 ABI 损坏:[ruby-core:48984]。我们认为普通用户可以/应该只要重装扩展库即可。但请勿直接从 1.9 中复制 .so 或 .bundle 文件。
  • 现在#lines,#chars,#codepoints,#bytes 返回数组,而不是 Enumerator[#6670]。这些改变可以让您避免使用 lines.to_a。使用 #each_line 等,就能得到 Enumerator。
  • Object#inspect 的返回结果会是 #<ClassName:0x…> 的形式,不再分发给 #to_s 方法。[#2152]

还有一些相对较小的不兼容性。 [ruby-core:49119]

Refinements 的状况

我们新增的 Refinements 功能,提供了一种实现模块化的新方式。但是,请注意,Refinements 功能还处在实验阶段,今后可能会改动。尽管如此,我们仍希望您能尝试使用,并向我们反馈意见。您的反馈将对我们优化此项功能提供重大帮助。

致谢

很多朋友对 2.0.0 版做出了贡献。受篇幅限制,即便仅仅对其中部分人员的贡献做出感谢,也很难在此一一呈现。对此,我感到非常抱歉,请允许我在此附上一个链接,指向感谢页面。

感谢大家!