Ruby 2.5.0 稳定版发布

Ruby 2.5 系列第一个稳定版本发布,新版包括了一系列新的特性和性能改进。主要变化包括:rescue/else/ensure 允许直接与 do/end 块使用,yield 增加 yield_self,Struct.new 能创建接受关键字参数的类,最高级常量查询不再可用,移除所有 trace 指令提升 5-10% 性能,SecureRandom 将更偏向使用操作系统提供的 SSL 库等。

此版本包括数个新特性和性能提升,例如:

新特性

  • 允许在 do/end 中直接使用 rescue/else/ensure。[功能 #12906]
  • 新增 yield_self 来使用当前上下文 yield 代码块。不同于 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 分配使 block 参数传递代码块(例如 def foo(&b); bar(&b); end)的性能相较于 Ruby 2.4 提升了约 3 倍。[功能 #14045]
  • 互斥锁的复写变得更轻量和快速。[功能 #13517]
  • ERB 现在模板生成代码的速度相较于 Ruby 2.4 提升 2 倍。
  • 提升了多个内置方法例如 Array#concatEnumerable#sort_byString#concatString#indexTime#+ 等。
  • IO.copy_stream 使用 copy_file_range(2) 来拷贝负载。[功能 #13867]

与 2.4 相比的重要变化

  • SecureRandom 倾向使用操作系统方法而非 OpenSSL。[漏洞 #9569]
  • 将 cmath, csv, date, dbm, etc, fcntl, fiddle, fileutils, gdbm, ipaddr, scanf, sdbm, stringio, strscan, webrick, zlib 从标准库中提升到默认 gem。
  • 升级 Onigmo 到 6.1.3。
  • 把 bundler 纳入标准库。
  • 更新到 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 的编程之旅吧!

下载

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏小勇DW3

redis cluster是如何做到集两家之长的

站在读写分离的层次看redis的时候,redis和master和slave存在明显的主从关系,也就是说master处于管理状态,salve跟着大哥混,maste...

27920
来自专栏FreeBuf

一个漏洞为何能影响数千万服务器以及66%安卓手机?

安全研究团队Perception Point发现Linux系统内核中存在一个高危级别的本地权限提升0day漏洞,编号为CVE-2016-0728。目前有超过66...

23050
来自专栏IT技术精选文摘

从Java视角理解系统结构(三)伪共享

从我的前一篇博文中, 我们知道了CPU缓存及缓存行的概念, 同时用一个例子说明了编写单线程Java代码时应该注意的问题. 下面我们讨论更为复杂, 而且更符合现实...

22370
来自专栏java一日一条

同步和异步的区别

答案一: 1.异步传输 通常,异步传输是以字符为传输单位,每个字符都要附加 1 位起始位和 1 位停止位,以标记一个字符的开始和结束,并以此实现数据传输同步...

9620
来自专栏工科狗和生物喵

【计算机本科补全计划】Java学习笔记(一) 安装配置 (Mac Sublime3) 红黄蓝

正文之前 标题后面为啥要加三个字呢。蹭热度不至于,就想着,让更多人知道么。毕竟我以后也会有当爸的一天~ 要是那些人渣站在悬崖上,旁边没啥人看着,我上去踢一脚是做...

40470
来自专栏零基础使用Django2.0.1打造在线教育网站

让 HTTP 服务人类的Requests库

今天要谈的是requests库,这是一个功能强大的库,也是唯一的一个非转基因的 Python HTTP 库,人类可以安全享用。为什么这么说呢,还是因为它真的太强...

20220
来自专栏王大锤

理解消息转发机制

11150
来自专栏枕边书

搭建自己的PHP框架心得(一)

前言 说到写PHP的MVC框架,大家想到的第一个词--“造轮子”,是的,一个还没有深厚功力的程序员,写出的PHP框架肯定不如那些出自大神们之手、经过时间和各种项...

43670
来自专栏魏琼东

一步一步教你使用AgileEAS.NET基础类库进行应用开发-基础篇-ORM访问器及其配置

系列回顾          本系列前面有三篇文章介绍和演示了AgileEAS.NET平台ORM组件的开发流程及其常见的使用方式,通过前面的三篇文章,大家都可以正...

20490
来自专栏微信公众号:Java团长

深入理解Java虚拟机到底是什么

作为一个Java程序员,我们每天都在写Java代码,我们写的代码都是在一个叫做Java虚拟机的东西上执行的。但是如果要问什么是虚拟机,恐怕很多人就会模棱两可了。...

18130

扫码关注云+社区

领取腾讯云代金券