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,一种转换为 Hash 的新约定
    • Onigmo,一个新的正则表达式引擎(Oniguruma 的一个分支)
    • 异步异常处理 API
  • 调试支持
    • DTrace 支持,可以在生产环境中进行运行时诊断
    • TracePoint,一个改进的跟踪 API
  • 性能改进
    • 通过位图标记进行的 GC 优化
    • Kernel#require 优化,使得 Rails 启动速度非常快
    • VM 优化,例如方法分派
    • 浮点运算优化

此外,虽然作为实验性功能,2.0.0 包括 Refinements,它为 Ruby 的模块化添加了一个新概念。

有关更多功能、改进和详细信息,请参见 NEWS。

兼容性

我们还在 2.0.0 的设计中注意使其与 1.9 兼容。从 1.9 迁移到 2.0 将比从 1.8 迁移到 1.9 更容易。(值得注意的不兼容性将在后面描述。)

事实上,由于第三方的专注工作,据报道,一些流行的应用程序(如 Rails 和 tDiary)已可以在 2.0.0 的候选版本上运行。

文档

我们还对文档进行了改进,这是许多 Ruby 爱好者所要求的。我们为模块和方法添加了大量的 rdoc。2.0.0 的文档覆盖率约为 75%,而 1.9.3 约为 60%。此外,我们还添加了 Ruby 语法的描述。你可以查看

ri ruby:syntax

稳定性

请注意,与 1.9.0 不同,2.0.0 是一个稳定版本,即使其 TEENY 为 0。强烈建议所有库作者支持 2.0.0。如上所述,从 1.9 迁移到 2.0 将相对容易。

Ruby 2.0.0 已准备好投入实际使用,并且绝对会改善您的 Ruby 生活。

注释

介绍性文章

以下是一些第三方关于 2.0.0 功能的介绍性文章

以下文章也有帮助,但关于 refinement 已过时

此外,最近一期的《Rubyist Magazine》包括一些由功能作者本人撰写的文章,用于介绍 2.0.0 的一些新功能。

尽管它们将以日语书写,但未来计划进行英文翻译。

不兼容性

我们知道有五个值得注意的不兼容性

  • ruby 脚本的默认编码现在是 UTF-8 [#6679]。一些人报告说它会影响现有程序,例如某些基准程序变得非常慢 [ruby-dev:46547]。
  • Iconv 已被移除,当 ruby 1.9 中引入 M17N 时,它已被弃用。请改用 String#encode 等。
  • 存在 ABI 破坏 [ruby-core:48984]。我们认为普通用户可以/应该重新安装扩展库。您应该注意:请勿从 1.9 复制 .so 或 .bundle 文件。
  • #lines、#chars、#codepoints、#bytes 现在返回 Array 而不是 Enumerator [#6670]。此更改允许您避免常见的惯用方法“lines.to_a”。使用 #each_line 等来获取 Enumerator。
  • Object#inspect 始终返回类似于 #<ClassName:0x…> 的字符串,而不是委托给 #to_s。[#2152]

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

Refinements 的状态

我们添加了一个名为 Refinements 的功能,它为 Ruby 的模块化添加了一个新概念。但是,请注意 Refinements 仍然是一个实验性功能:我们可能会在未来更改其规范。尽管如此,我们希望您试用它并给我们您的想法。您的反馈将有助于塑造这个有趣的功能。

致谢

很多人为 2.0.0 做出了贡献。即使只对少数贡献进行不完整的致谢,也变得太大了,无法在此处插入。抱歉,请允许我添加一个指向特别感谢页面的链接。

感谢大家!