由 naruse 于 2019 年 5 月 30 日发布
我们很高兴地宣布 Ruby 2.7.0-preview1 的发布。
此预览版本旨在收集最终版本(计划于 12 月发布)的反馈。它引入了许多新功能和性能改进,最值得注意的是:
- 压缩式 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 改进
irb
,捆绑的交互式环境(REPL;读取-求值-打印循环)现在支持多行编辑。它由 reline
提供支持,reline
是与 readline
兼容的纯 Ruby 实现。它还提供了 rdoc 集成。在 irb
中,您可以显示给定类、模块或方法的参考。#14683, #14787, #14918 此外,在 binding.irb
中显示的源代码行和核心类对象的检查结果现在都进行了着色。
其他值得注意的新功能
-
引入了编号参数作为默认块参数,作为实验性功能。#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 SQUARE ERA NAME REIWA 的支持。[Feature #15195]
-
Date.jisx0301
,Date#jisx0301
, 和Date.parse
临时支持新的日本时代作为非正式扩展,直到发布新的 JIS X 0301。[Feature #15742] -
要求编译器支持 C99 [Misc #15347]
有关更多详细信息,请参见 NEWS 或 commit 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 开发领域。