Ruby 2.7.0-preview1 发布

naruse 发布于 2019 年 5 月 30 日

我们很高兴地宣布 Ruby 2.7.0-preview1 发布。

预览版本发布,以收集最终版本(计划于十二月发布)的反馈。它引入了许多新功能和性能改进,最显著的是:

  • 压缩 GC
  • 模式匹配
  • REPL 改进

压缩 GC

此版本引入了压缩 GC,它可以对碎片化的内存空间进行碎片整理。

一些多线程 Ruby 程序可能导致内存碎片化,从而导致内存使用量过高和速度下降。

引入了 `GC.compact` 方法来压缩堆。此函数压缩堆中的活动对象,以便可以使用更少的页面,并且堆可以更好地支持写时复制 (CoW)。#15626

模式匹配 [实验性]

模式匹配(一种在函数式编程语言中广泛使用的功能)被引入为一项实验性功能。#14912 它可以遍历给定对象并根据其值是否与模式匹配来赋值。

case JSON.parse('{...}', symbolize_names: true)
in {name: "Alice", children: [{name: "Bob", age: age}]}
  p age
  ...
end

有关更多详细信息,请参阅 Ruby 2.7 中的新特性:模式匹配

REPL 改进

绑定的交互式环境 (REPL;Read-Eval-Print-Loop) `irb` 现在支持多行编辑。它由 `reline` 提供支持,这是一个兼容 `readline` 的纯 Ruby 实现。它还提供了 rdoc 集成。在 `irb` 中,您可以显示给定类、模块或方法的参考。#14683#14787#14918 此外,`binding.irb` 中显示的源代码行以及核心类对象的检查结果现在已进行着色。

其他值得注意的新特性

  • 引入了方法引用运算符 `.:` 作为一项实验性功能。#12125#13581

  • 数字参数作为默认块参数被引入为一项实验性功能。#4475

  • 实验性地引入了无结束范围。它可能不像有结束范围那样有用,但对于 DSL 来说会很棒。#14799

    ary[..3]  # identical to ary[0..3]
    rel.where(sales: ..100)
    
  • 添加了 Enumerable#tally。它计算每个元素的出现次数。

    ["a", "b", "c", "b"].tally
    #=> {"a"=>1, "b"=>2, "c"=>1}
    

性能改进

  • JIT [实验性]

    • 当优化假设无效时,JIT 代码会被重新编译为优化程度较低的代码。

    • 当方法被认为是纯粹的时,会执行方法内联。此优化仍处于实验阶段,并且许多方法尚未被视为纯粹。

    • `--jit-min-calls` 的默认值从 5 更改为 10,000

    • `--jit-max-cache` 的默认值从 1,000 更改为 100

自 2.6 以来的其他显著更改

  • 现在会在方法调用一个块时,对 Proc.new 和没有块的 proc 发出警告。

  • 在调用了块的方法中,没有块的 lambda 会报错。

  • 将 Unicode 版本和 Emoji 版本从 11.0.0 更新到 12.0.0。 [Feature #15321]

  • 将 Unicode 版本更新到 12.1.0,增加了对 U+32FF 方形时代名称“令和”的支持。 [Feature #15195]

  • `Date.jisx0301`、`Date#jisx0301` 和 `Date.parse` 暂时支持新的日本年号作为非正式扩展,直到新的 JIS X 0301 发布。[Feature #15742]

  • 要求编译器支持 C99 [Misc #15347]

有关更多详细信息,请参阅 NEWScommit logs

通过这些更改,自 Ruby 2.6.0 以来,已更改 1727 个文件,新增 76022 行,删除 60286 行

享受使用 Ruby 2.7 编程的乐趣!

下载

  • https://cache.ruby-lang.org/pub/ruby/2.7/ruby-2.7.0-preview1.tar.gz

    SIZE:   16021286 bytes
    SHA1:   2fbecf42b03a9d4391b81de42caec7fa497747cf
    SHA256: c44500af4a4a0c78a0b4d891272523f28e21176cf9bc1cc108977c5f270eaec2
    SHA512: f731bc9002edd3a61a4955e4cc46a75b5ab687a19c7964f02d3b5b07423d2360d25d7be5df340e884ca9945e3954e68e5eb11b209b65b3a687c71a1abc24b91f
    
  • https://cache.ruby-lang.org/pub/ruby/2.7/ruby-2.7.0-preview1.zip

    SIZE:   20283343 bytes
    SHA1:   7488346fa8e58203a38158752d03c8be6b1da65b
    SHA256: fdf25573e72e1769b51b8d541d0e1a894a5394dbfdf1b08215aa093079cca64c
    SHA512: b3b1f59dce94c242ef88a4e68381a4c3a6f90ba0af699083e5a1a00b0fb1dce580f057dad25571fe789ac9aa95aa6e9c071ebb330328dc822217ac9ea9fbeb3f
    
  • https://cache.ruby-lang.org/pub/ruby/2.7/ruby-2.7.0-preview1.tar.bz2

    SIZE:   14038296 bytes
    SHA1:   f7e70cbc2604c53a9e818a2fc59cd0e2d6c859fa
    SHA256: d45b4a1712ec5c03a35e85e33bcb57c7426b856d35e4f04f7975ae3944d09952
    SHA512: a36b241fc1eccba121bb7c2cc5675b11609e0153e25a3a8961b67270c05414b1aa669ce5d4a5ebe4c6b2328ea2b8f8635fbba046b70de103320b3fdcb3d51248
    
  • https://cache.ruby-lang.org/pub/ruby/2.7/ruby-2.7.0-preview1.tar.xz

    SIZE:   11442988 bytes
    SHA1:   45e467debc194847a9e3afefb20b11e6dc28ea31
    SHA256: 8c546df3345398b3edc9d0ab097846f033783d33762889fd0f3dc8bb465c3354
    SHA512: d416e90bfa3e49cc0675c4c13243c8ec319b7a0836add1bd16bd7662d09eaf46656d26e772ef3b097e10779896e643edd8a6e4f885147e3235257736adfdf3b5
    

什么是 Ruby

Ruby 最初由 Matz (Yukihiro Matsumoto) 于 1993 年开发,现在作为开源项目进行开发。它运行在多个平台上,并在世界各地广泛使用,尤其是在 Web 开发领域。

近期新闻

Ruby 4.0.0 发布

我们很高兴地宣布 Ruby 4.0.0 的发布。Ruby 4.0 引入了“Ruby Box”和“ZJIT”,并增加了许多改进。

naruse 发布于 2025 年 12 月 25 日

Ruby 文档的全新外观

继 ruby-lang.org 重新设计之后,我们还有更多好消息来庆祝 Ruby 成立 30 周年:docs.ruby-lang.org 采用了 Aliki——RDoc 的新默认主题,焕然一新。

Stan Lo 发布于 2025 年 12 月 23 日

重新设计我们的网站标识

我们很高兴地宣布对我们的网站进行全面重新设计。此次更新的设计由 Akatsuka Taeko 创作。

Hiroshi SHIBATA 发布于 2025 年 12 月 22 日

Ruby 4.0.0 preview3 发布

我们很高兴地宣布 Ruby 4.0.0-preview3 的发布。Ruby 4.0 引入了 Ruby::Box 和“ZJIT”,并增加了许多改进。

naruse 发布于 2025 年 12 月 18 日

更多新闻...