Ruby 2.5.0 发布

我们很高兴地宣布 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。
  • 更新到 Psych 3.0.2。
  • 更新到 RubyGems 2.7.3。
  • 更新到 RDoc 6.0.1。
  • 将支持的 Unicode 版本更新到 10.0.0。
  • Thread.report_on_exception 现在默认设置为 true。 此更改有助于调试多线程程序。 [特性 #14143]
  • IO#write 现在接收多个参数。 [特性 #9323]

有关详细信息,请参阅 NEWS提交日志

经过这些更改,自 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