Ruby 2.4.0 发布

我们很高兴地宣布 Ruby 2.4.0 的发布。

Ruby 2.4.0 是 Ruby 2.4 系列的第一个稳定版本。它引入了许多新功能,例如

引入哈希表改进 (由 Vladimir Makarov 提供)

通过引入开放寻址和包含顺序数组来改进哈希表 (st_table) 的内部结构。这个改进已经与许多人讨论过,特别是与 Yura Sokolov。

Binding#irb:启动一个类似于 binding.pry 的 REPL 会话

当您调试时,您可能经常使用 p 来查看变量的值。使用 pry,您可以在应用程序中使用 binding.pry 来启动 REPL 并运行任何 Ruby 代码。r56624 引入了 binding.irb,它的行为类似于 irb。

将 Fixnum 和 Bignum 统一为 Integer

虽然 ISO/IEC 30170:2012 没有详细说明 Integer 类,但 Ruby 有两个可见的 Integer 类:Fixnum 和 Bignum。Ruby 2.4 将它们统一为 Integer。所有接触 Fixnum 或 Bignum 类的 C 扩展都需要修复。

另请参阅 该工单akr 的幻灯片

String 支持 Unicode 大小写映射

String/Symbol#upcase/downcase/swapcase/capitalize(!) 现在处理 Unicode 大小写映射,而不仅仅是 ASCII 大小写映射。

性能改进

Ruby 2.4 还包含以下性能改进,包括语言更改

Array#max, Array#min

[x, y].max[x, y].min 经过优化,在某些条件下不会创建临时数组。

Regexp#match?

添加了 Regexp#match?,它执行正则表达式匹配而不创建反向引用对象并更改 $~ 以减少对象分配。

其他性能改进

调试

Thread#report_on_exception 和 Thread.report_on_exception

除非另一个线程显式加入它们,否则 Ruby 会忽略线程中的异常。使用 report_on_exception = true,您可以注意到线程是否由于未处理的异常而终止。

请向我们发送关于 report_on_exception 的默认值以及关于 report-on-GC 的反馈,它会在线程在没有 join 的情况下被垃圾回收时显示报告。

线程死锁检测现在显示带有回溯和依赖关系的线程

Ruby 在等待线程周围有死锁检测,但其报告不包含足够的调试信息。Ruby 2.4 的死锁检测显示带有回溯和依赖线程的线程。

自 2.3 以来的其他重要更改

  • 支持 OpenSSL 1.1.0 (放弃对 0.9.7 或更早版本的支持)
  • ext/tk 现在已从 stdlib 中移除 Feature #8539
  • XMLRPC 现在已从 stdlib 中移除 Feature #12160

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

有了这些更改,自 Ruby 2.3.0 以来,2523 个文件已更改,289129 个插入(+),84670 个删除(-)

圣诞快乐,节日快乐,并享受使用 Ruby 2.4 编程的乐趣!

下载

  • https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.0.tar.bz2

    SIZE:   12572424 bytes
    SHA1:   944d2588308391b20a89642472454d1dfe7b2360
    SHA256: 440bbbdc49d08d3650f340dccb35986d9399177ad69a204def56e5d3954600cf
    SHA512: bef7bb53f63fb74073d071cc125fb67b273ed0779ef43c2d2969089b9ca21fff1bd012281c5b748f7a3c24dd26e71730d7248c05a01cb23ab2089eb4d02115fe
    
  • https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.0.tar.gz

    SIZE:   14104044 bytes
    SHA1:   d44a3c50a0e742341ed3033d5db79d865151a4f4
    SHA256: 152fd0bd15a90b4a18213448f485d4b53e9f7662e1508190aa5b702446b29e3d
    SHA512: 21c9f596b42dd9cba7a53963a59fed0c2e0c1eb960a4ac7087ea3eaa991ce9252d32639e1edcb75b1d709bc07c4820a6dc336ab427d0643c6e6498e0eacdbc8b
    
  • https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.0.tar.xz

    SIZE:   9906880 bytes
    SHA1:   038804bbd0e77508dd2510b729a9f3b325489b2e
    SHA256: 3a87fef45cba48b9322236be60c455c13fd4220184ce7287600361319bb63690
    SHA512: 975a5388592adc038461e0acebb6c0efee242891b2ea8621476401458efe2bc0fdd317d3bf99beb745b0b3808410efdff33862da29c95c027f457943721e3ab6
    
  • https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.0.zip

    SIZE:   15758757 bytes
    SHA1:   29e1bab11551011718c35a51827edcb55bd656fc
    SHA256: 5c2bbfa26fd6a15a2d70961874b0f3a386206fcc5f698e240dd8b0c9f0f18c5e
    SHA512: 31d932372ce490eeac0a70bc8dcf842909a90435422398d069c05cf01d994936064b8f4e60879e28a8655c1296eb8e180e348cb95e001ed6ca73cda0ff77de23