我们很高兴地宣布发布 Ruby 2.7.0-preview1。
发布预览版本以收集计划于12月发布的最终版本的反馈,它引入了许多新功能和性能提升,其中最值得注意的是:

  • Compaction GC
  • 模式匹配(Pattern Matching)
  • REPL 增强

Compaction GC

这个版本引入了Compaction GC,可以整理碎片化内存空间。
某些多线程 Ruby 程序可能会导致内存碎片,从而导致高内存使用率和运行速度降低。
引入了 GC.compact 方法来压缩堆 (heap)。此函数压缩堆中的活动对象,以便可以使用更少的页 (page),并且堆可能更友好。 #15626

模式匹配 [实验]

模式匹配是函数式编程语言中广泛使用的特性,作为实验被引入。 #14912 它可以遍历指定对象并在其匹配模式时赋值。

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

更多详情参见 - Pattern matching - New feature in Ruby 2.7

REPL 增强

irb,捆绑的交互式环境(REPL; Read-Eval-Print-Loop),现在支持多行编辑。它由 relinereadline 兼容的纯 Ruby 实现。同时也提供 rdoc 集成。在 irb 中,您可以显示给定类,模块或方法的引用。 #14683#14787#14918 此外,binding.irb 中显示的源代码行和核心类对象的检查结果现在已着色。

irb_improved_with_key_take2.mp4 (1017.8KB)

其他值得注意的新功能

  • 一个方法引用运算符, .: , 作为实验功能引入。 #12125, #13581
  • Block 默认引入参数编号作为实验特征引入。 #4475
  • 实验性地采用 beginless range。它可能没有 endless range 那么有用,但对于 DSL 来说会很好。#14799
  1. ary[..3] # identical to ary[0..3]
  2. rel.where(sales: ..100)
  • 添加 Enumerable#tally,它计算每个元素的出现次数。
  1. ["a", "b", "c", "b"].tally
  2. #=> {"a"=>1, "b"=>2, "c"=>1}

性能提升

  • JIT [实验]
    • 当优化假设无效时,JIT-ed 代码将重新编译为优化程度较低的代码。
    • 当方法被认为是纯方法时,执行方法内联。这种优化仍然是实验性的,许多方法都不被认为是纯的。
    • --jit-min-calls 的默认值从 5 更改为 10000。
    • --jit-min-cache 的默认值从 1000 更改为 500。

自 2.6 以来的其他显着变化

  • Proc.new and proc with no block in a method called with a block is warned now.
  • lambda with no block in a method called with a block errs.
  • 将 Unicode 版本和表情符号版本从 11.0.0 更新为 12.0.0。 [Feature #15321]
  • 更新 Unicode 版本到 12.1.0,添加支持 U+32FF SQUARE ERA NAME REIWA。 [Feature #15195]
  • Date.jisx0301Date#jisx0301Date.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

  1. SIZE: 16021286 bytes
  2. SHA1: 2fbecf42b03a9d4391b81de42caec7fa497747cf
  3. SHA256: c44500af4a4a0c78a0b4d891272523f28e21176cf9bc1cc108977c5f270eaec2
  4. SHA512: f731bc9002edd3a61a4955e4cc46a75b5ab687a19c7964f02d3b5b07423d2360d25d7be5df340e884ca9945e3954e68e5eb11b209b65b3a687c71a1abc24b91f

https://cache.ruby-lang.org/pub/ruby/2.7/ruby-2.7.0-preview1.zip

  1. SIZE: 20283343 bytes
  2. SHA1: 7488346fa8e58203a38158752d03c8be6b1da65b
  3. SHA256: fdf25573e72e1769b51b8d541d0e1a894a5394dbfdf1b08215aa093079cca64c
  4. SHA512: b3b1f59dce94c242ef88a4e68381a4c3a6f90ba0af699083e5a1a00b0fb1dce580f057dad25571fe789ac9aa95aa6e9c071ebb330328dc822217ac9ea9fbeb3f

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

  1. SIZE: 14038296 bytes
  2. SHA1: f7e70cbc2604c53a9e818a2fc59cd0e2d6c859fa
  3. SHA256: d45b4a1712ec5c03a35e85e33bcb57c7426b856d35e4f04f7975ae3944d09952
  4. SHA512: a36b241fc1eccba121bb7c2cc5675b11609e0153e25a3a8961b67270c05414b1aa669ce5d4a5ebe4c6b2328ea2b8f8635fbba046b70de103320b3fdcb3d51248

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

  1. SIZE: 11442988 bytes
  2. SHA1: 45e467debc194847a9e3afefb20b11e6dc28ea31
  3. SHA256: 8c546df3345398b3edc9d0ab097846f033783d33762889fd0f3dc8bb465c3354
  4. SHA512: d416e90bfa3e49cc0675c4c13243c8ec319b7a0836add1bd16bd7662d09eaf46656d26e772ef3b097e10779896e643edd8a6e4f885147e3235257736adfdf3b5

什么是 Ruby

Ruby 最初由 Matz(Yukihiro Matsumoto)于 1993 年开发,现在开源开发。它可在多个平台上运行,并在世界各地使用,尤其适用于 Web 开发。