由 Yusuke Endoh 于 2013 年 2 月 24 日发布
我们很高兴地宣布 Ruby 2.0.0-p0 的发布。
Ruby 2.0.0 是 Ruby 2.0 系列的第一个稳定版本,它具有许多新功能和改进,以响应 Ruby 日益多样化和不断增长的需求。
尽情使用 Ruby 2.0.0 编程吧!
下载
-
<URL:https://cache.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-p0.tar.bz2>
SIZE: 10814890 bytes MD5: 895c1c581f8d28e8b3bb02472b2ccf6a SHA256: c680d392ccc4901c32067576f5b474ee186def2fcd3fcbfa485739168093295f
-
<URL:https://cache.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-p0.tar.gz>
SIZE: 13608925 bytes MD5: 50d307c4dc9297ae59952527be4e755d SHA256: aff85ba5ceb70303cb7fb616f5db8b95ec47a8820116198d1c866cc4fff151ed
-
<URL:https://cache.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-p0.zip>
SIZE: 15037340 bytes MD5: db5af5d6034646ad194cbdf6e50f49ee SHA256: 0d0af6a9c8788537efd8d7d2358ce9468e6e2b7703dacba9ebd064d8b7da5f99
什么是 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 功能的介绍性文章
- <URL:http://blog.marc-andre.ca/2013/02/23/ruby-2-by-example>(全面,推荐)
- <URL:https://speakerdeck.com/shyouhei/whats-new-in-ruby-2-dot-0>(全面,推荐)
- <URL:http://el.jibun.atmarkit.co.jp/rails/2012/11/ruby-20-8256.html>(简短,日语)
- <URL:https://speakerdeck.com/nagachika/rubyist-enumeratorlazy>(仅 Enumerator::Lazy,日语)
以下文章也有帮助,但关于 refinement 已过时
- <URL:http://rubysource.com/a-look-at-ruby-2-0/>
- <URL:https://speakerdeck.com/a_matsuda/ruby-2-dot-0-on-rails>
- <URL:http://globaldev.co.uk/2012/11/ruby-2-0-0-preview-features/>
- <URL:http://www.infoq.com/news/2012/11/ruby-20-preview1>
此外,最近一期的《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 做出了贡献。即使只对少数贡献进行不完整的致谢,也变得太大了,无法在此处插入。抱歉,请允许我添加一个指向特别感谢页面的链接。
感谢大家!