由 naruse 发布于 2017年12月25日
我们很高兴地宣布 Ruby 2.5.0 版本的发布。
Ruby 2.5.0 是 Ruby 2.5 系列的第一个稳定版本。它引入了许多新特性和性能改进。值得注意的更改如下:
新特性
rescue
/else
/ensure
现在可以直接与do
/end
代码块一起使用。 [特性 #12906]- 添加
yield_self
以在其上下文中产生给定的代码块。与tap
不同,它返回代码块的结果。 [特性 #6721] - 支持分支覆盖率和方法覆盖率测量。分支覆盖率指示哪些分支被执行,哪些没有被执行。方法覆盖率指示哪些方法被调用,哪些没有被调用。通过使用这些新功能运行测试套件,您将知道哪些分支和方法被执行,并更严格地评估测试套件的整体覆盖率。 [特性 #13901]
Hash#slice
[特性 #8499] 和Hash#transform_keys
[特性 #13583]Struct.new
可以创建接受关键字参数的类。 [特性 #11925]Enumerable#any?
,all?
,none?
和one?
接受模式参数。 [特性 #11286]- 不再提供顶层常量查找。 [特性 #11547]
- 我们最受欢迎的库之一
pp.rb
现在自动加载。您不再需要编写require "pp"
。 [特性 #14123] - 以相反的顺序打印回溯和错误消息(最早的调用在先,最近的调用在后)。当终端(TTY)上出现长回溯时,您可以很容易地在回溯的底部找到导致错误的代码行。请注意,只有当回溯直接输出到终端时,才会反转顺序。 [特性 #8661] [实验性]
性能改进
- 通过从整个字节码(指令序列)中移除所有
trace
指令,性能提高了大约 5-10%。 添加trace
指令是为了支持TracePoint
。然而,在大多数情况下,TracePoint
没有被使用,而trace
指令是纯粹的开销。现在,我们使用动态检测技术。 详情请参阅 [特性 #14104]。 - 通过“延迟 Proc 分配”技术,通过代码块参数传递代码块(例如
def foo(&b); bar(&b); end
)比 Ruby 2.4 快大约 3 倍。 [特性 #14045] Mutex
被重写为更小更快。 [特性 #13517]- 现在 ERB 从模板生成代码的速度是 Ruby 2.4 的两倍。
- 改进了一些内置方法的性能,包括
Array#concat
,Enumerable#sort_by
,String#concat
,String#index
,Time#+
等。 IO.copy_stream
使用copy_file_range(2)
来复制卸载。 [特性 #13867]
自 2.4 以来的其他值得注意的更改
SecureRandom
现在优先选择操作系统提供的源而不是 OpenSSL。 [Bug #9569]- 将 cmath、csv、date、dbm 等、fcntl、fiddle、fileutils、gdbm、ipaddr、scanf、sdbm、stringio、strscan、webrick、zlib 从标准库提升为默认 gems。
- 更新到 Onigmo 6.1.3。
- 它添加了不存在运算符。
- 请注意,Ruby 2.4.1 也包含了此更改。
- 更新到 Psych 3.0.2。
- 更新到 RubyGems 2.7.3。
- 更新到 RDoc 6.0.1。
- 将词法分析器从基于 IRB 的词法分析器切换到 Ripper。这大大提高了文档生成的性能。
- 修复了许多存在了十多年的重大错误。
- 添加了对最新版本中的新 Ruby 语法的支持。
- 将支持的 Unicode 版本更新到 10.0.0。
Thread.report_on_exception
现在默认设置为 true。 此更改有助于调试多线程程序。 [特性 #14143]IO#write
现在接收多个参数。 [特性 #9323]
经过这些更改,自 Ruby 2.4.0 以来,更改了 6158 个文件,插入了 348484 行 (+),删除了 82747 行 (-)!
圣诞快乐,节日快乐,并享受使用 Ruby 2.5 编程的乐趣!
下载
-
https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.0.tar.gz
SIZE: 15834941 bytes SHA1: 58f77301c891c1c4a08f301861c26b1ea46509f6 SHA256: 46e6f3630f1888eb653b15fa811d77b5b1df6fd7a3af436b343cfe4f4503f2ab SHA512: 0712fe68611f5d0cd6dd54b814f825478e64b6a62bdf67bce431f4dca2dc00b1a33f77bebfbcd0a151118a1152554ab457decde435b424aa1f004bc0aa40580d
-
https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.0.zip
SIZE: 19495617 bytes SHA1: 700b6f55d689a5c8051c8c292b9e77a1b50bf96e SHA256: 94559ea6e3c619423da604e503ce1dc1c465d6e0747a07fbdc5f294acaf14c24 SHA512: e4324064cee8c65b80192e3eff287e915d2d40464d300744c36fb326ae4b1846911400a99d4332192d8a217009d3a5209b43eb5e8bc0b739035bef89cc493e84
-
https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.0.tar.bz2
SIZE: 13955820 bytes SHA1: 827b9a3bcffa86d1fc9ed96d403cb9dc37731688 SHA256: d87eb3021f71d4f62e5a5329628ac9a6665902173296e551667edd94362325cc SHA512: 8f6fdf6708e7470f55bc009db2567cd8d4e633ad0678d83a015441ecf5b5d88bd7da8fb8533a42157ff83b74d00b6dc617d39bbb17fc2c6c12287a1d8eaa0f2c
-
https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.0.tar.xz
SIZE: 11292472 bytes SHA1: 9c7babcf9e299be3f197d9091024ae458f1a1273 SHA256: 1da0afed833a0dab94075221a615c14487b05d0c407f991c8080d576d985b49b SHA512: 55714a33d7661fe8b432f73c34fd67b49699f8b79df1cbd680a74899124d31111ab0f444677672aac1ba725820182940d485efb2db0bf2bc96737c5d40c54578