内容简介:我们很高兴地宣布 Ruby 3.1.0 的发布。Ruby 3.1 保持与 Ruby 3.0 的兼容性,并添加了许多功能。 YJIT:新的实验性进程内 JIT 编译器 Ruby 3.1 合并了 YJIT,这是 Shopify 开发的一种新的进程内 JIT 编译器。 自从...
我们很高兴地宣布 Ruby 3.1.0 的发布。Ruby 3.1 保持与 Ruby 3.0 的兼容性,并添加了许多功能。
YJIT:新的实验性进程内 JIT 编译器
Ruby 3.1 合并了 YJIT,这是 Shopify 开发的一种新的进程内 JIT 编译器。
自从2018年Ruby 2.6 引入了 MJIT 后,它的性能有了很大的提升,最终我们在去年实现了 Ruby3x3。但是,尽管 Optcarrot 已经显示出令人印象深刻的加速,但 JIT 并没有使现实世界的业务应用程序受益。
最近 Shopify 贡献了许多 Ruby 改进来加速他们的 Rails 应用程序。YJIT 是一个重要的贡献,旨在提高 Rails 应用程序的性能。
尽管 MJIT 是基于方法的 JIT 编译器并使用外部 C 编译器,但 YJIT 使用基本块版本控制并在其中包含 JIT 编译器。使用 Lazy Basic Block Versioning (LBBV),它首先编译方法的开头,并在动态确定参数和变量的类型时增量编译其余部分。有关详细介绍,请参阅YJIT:用于 CRuby 的基本块版本控制 JIT 编译器。
通过这项技术,YJIT 在大多数现实世界的软件上实现了快速预热时间和性能改进,在 railsbench 上高达 22%,在液体渲染上高达 39%。
YJIT 仍然是一个实验性功能,因此默认情况下它是禁用的。如果要使用它,请指定--yjit
命令行选项以启用 YJIT。目前它也仅限于类 Unix 的 x86-64 平台。
- https://bugs.ruby-lang.org/issues/18229
- https://shopify.engineering/yjit-just-in-time-compiler-cruby
- https://www.youtube.com/watch?v=PBVLf3yfMs8
debug gem:一个新的调试器
捆绑了一个完全重写的调试器debug.gem。debug.gem 有以下特点:
- 提高调试性能(即使使用调试器也不会减慢应用程序的速度)
- 支持远程调试
- 支持丰富的调试前端(现在支持VSCode和Chrome浏览器)
- 支持多进程/多线程调试
- 多彩的REPL
- 以及其他有用的功能,如记录和重放功能、跟踪功能等。
Ruby 捆绑了 lib/debug.rb,但它没有得到很好的维护,并且在性能和特性方面存在问题。debug.gem 完全取代了 lib/debug.rb。
error_highlight:回溯中的细粒度错误位置
已引入内置 gem error_highlight。它包括回溯中的细粒度错误位置:
$ ruby test.rb test.rb:1:in `<main>': undefined method `time' for 1:Integer (NoMethodError) 1.time {} ^^^^^ Did you mean? times
目前,仅NameError
支持。
默认情况下启用此 gem。您可以使用命令行选项禁用它--disable-error_highlight
。详细查看存储库。
IRB 自动完成和文档显示
IRB 现在具有自动完成功能,您只需在其中输入代码,就会出现完成候选对话框。您可以使用 Tab 和 Shift+Tab 上下移动。
如果在选择完成候选时安装了文档,则完成候选对话框旁边将出现文档对话框,显示部分内容。您可以按 Alt+d 阅读完整文档。
其他值得注意的新功能
语法改进
- 哈希文字和关键字参数中的值可以省略。[功能#14579]
{x:, y:}
是 的语法糖{x: x, y: y}
。foo(x:, y:)
是 的语法糖foo(x: x, y: y)
。
- 模式匹配中的 Pin 运算符现在采用表达式。[功能#17411]
Prime.each_cons(2).lazy.find_all{_1 in [n, ^(n + 2)]}.take(3).to_a #=> [[3, 5], [5, 7], [11, 13]]
- 单行模式匹配中可以省略括号。[功能#16182]
[0, 1] => _, x {y: 2} => y: x #=> 1 y #=> 2
RBS
RBS 是一种描述 Ruby 程序结构的语言。有关详细信息,请参阅存储库。
自 Ruby 3.0.0 以来的更新:
- 泛型类型参数可以是有界的。(公关)
- 支持通用类型别名。(公关)
rbs collection
已被引入管理 gems 的 RBS。(文档)- 添加/更新了许多内置和标准库的签名。
- 它还包括许多错误修复和性能改进。
有关更多信息,请参阅CHANGELOG.md。
TypeProf
TypeProf 是 Ruby 的静态类型分析器。它从非类型注释的 Ruby 代码生成 RBS 的原型。有关详细信息,请参阅文档。
自 Ruby 3.0.0 以来的主要更新是一个名为“TypeProf for IDE”的实验性 IDE 支持。
vscode 扩展在每个方法定义上方显示一个猜测的(或明确写在 RBS 文件中的)方法签名,在可能导致名称错误或类型错误的代码下画一个红色下划线,并完成方法名称(即显示方法候选) . 详细看文档。
此外,该版本还包括许多错误修复和性能改进。
性能改进
- MJIT
- 对于 Rails 等工作负载,默认值
--jit-max-cache
从 100 更改为 10000。JIT 编译器不再跳过长度超过 1000 条指令的方法的编译。 - 为了支持 Rails 的 Zeitwerk,当启用类事件的 TracePoint 时,不再取消 JIT-ed 代码。
- 对于 Rails 等工作负载,默认值
自 3.0 以来的其他显着变化
- 单行模式匹配,例如 ,
ary => [x, y, z]
不再是实验性的。 - 多重分配评估顺序略有变化。[错误 #4443]
foo[0], bar[0] = baz, qux
评价为了baz
,qux
,foo
,然后bar
在红宝石3.0。在 Ruby 3.1 中,它按照foo
、bar
、baz
、 然后 的顺序进行计算qux
。
-
可变宽度分配:字符串(实验性)[Bug #18239]
- Psych 4.0 更改
Psych.load
为safe_load
默认设置。您可能需要使用 Psych 3.3.2 才能迁移到此行为。 [错误 #17866]
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- NPM包(模块)发布、更新、撤销发布
- 有赞灰度发布与蓝绿发布实践
- 【重磅发布】Linkis 0.10.0 版本发布
- BeetlSQL 3.0.9 发布,Idea 插件发布
- 贝密游戏 0.7.0 发布,发布斗地主
- 【重磅发布】DataSphere Studio 0.9.0 版本发布
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。