Ruby 3.1.0 发布

栏目: 软件资讯 · 发布时间: 2年前

内容简介:我们很高兴地宣布 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 编译器。

自从2018Ruby 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 支持。

Ruby 3.1.0 发布

vscode 扩展在每个方法定义上方显示一个猜测的(或明确写在 RBS 文件中的)方法签名,在可能导致名称错误或类型错误的代码下画一个红色下划线,并完成方法名称(即显示方法候选) . 详细看文档

此外,该版本还包括许多错误修复和性能改进。

性能改进

  • MJIT

     

    • 对于 Rails 等工作负载,默认值--jit-max-cache从 100 更改为 10000。JIT 编译器不再跳过长度超过 1000 条指令的方法的编译。
    • 为了支持 Rails 的 Zeitwerk,当启用类事件的 TracePoint 时,不再取消 JIT-ed 代码。

自 3.0 以来的其他显着变化

  • 单行模式匹配,例如 ,ary => [x, y, z]不再是实验性的。
  • 多重分配评估顺序略有变化。[错误 #4443]
    • foo[0], bar[0] = baz, qux评价为了bazquxfoo,然后bar在红宝石3.0。在 Ruby 3.1 中,它按照foobarbaz、 然后 的顺序进行计算qux
  • 可变宽度分配:字符串(实验性)[Bug #18239]

  • Psych 4.0 更改Psych.loadsafe_load默认设置。您可能需要使用 Psych 3.3.2 才能迁移到此行为。 [错误 #17866]

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

爆品战略

爆品战略

金错刀 / 北京联合出版公司 / 2016-7-1 / 56.00

◆ 划时代的商业著作!传统企业转型、互联网创业的实战指南! ◆ 爆品是一种极端的意志力,是一种信仰,是整个企业运转的灵魂! ◆ 小米创始人雷军亲自作序推荐!小米联合创始人黎万强、分众传媒创始人江南春、美的董事长方洪波、九阳董事长王旭宁等众多一线品牌创始人联袂推荐! ◆ 创图书类众筹新纪录!众筹上线2小时,金额达到10万元;上线1星期,金额突破100万元! ◆ 未售......一起来看看 《爆品战略》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具