0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Ruby 3.2.0正式发布 新增多项改进

OSC开源社区 来源: OSC开源社区 2022-12-27 10:49 次阅读
Ruby 3.2.0 现已发布,该版本添加了许多功能和性能改进。具体更新内容如下:

基于 WASI 的 WebAssembly 支持

这是基于 WASI 的 WebAssembly 支持的初始移植。此项特性使得 CRuby 二进制文件可在 Web 浏览器、Serverless Edge 环境和其他 WebAssembly/WASI 嵌入器上使用。目前,此移植可在不使用 Thread API 的前提下通过基本和引导测试套件的测试。2cb1ef12-852e-11ed-bfe3-dac502259ad0.png

生产就绪的 YJIT

2cce2984-852e-11ed-bfe3-dac502259ad0.png
  • YJIT 不再是实验性的

    • 已经在生产工作负载上进行了一年多的测试,证明非常稳定。

  • YJIT 现在支持 Linux、MacOS、BSD 和其他 UNIX 平台上的 x86-64 和 arm64/aarch64 CPU

    • 此版本支持 Apple M1/M2、AWS Graviton、Raspberry Pi 4 等。

  • 构建 YJIT 现在需要 Rust 1.58.0+。[Feature #18481 ]

    • 为了确保 CRuby 是使用 YJIT 构建的,请在运行./configure脚本之前安装rustc>= 1.58.0 。

  • YJIT 3.2 版本比 3.1 更快,内存开销大约是 3.1 的 1/3。

    • 总体而言,YJIT 比 yjit-bench 上的 Ruby 解释器快 41%(几何平均值)。

    • JIT 代码的物理内存是延迟分配的。与 Ruby 3.1 不同,Ruby 进程的 RSS 被最小化,因为--yjit-exec-mem-size分配的虚拟内存页在 JIT 代码实际使用之前不会映射到物理内存页。

    • 引入 Code GC,当 JIT 代码的内存消耗达到--yjit-exec-mem-size时,释放所有代码页。

    • RubyVM::YJIT.runtime_stats在现有的inline_code_sizeoutlined_code_sizekeys 之外,还返回 Code GC metrics:code_gc_countlive_page_countfreed_page_countfreed_code_size

  • RubyVM::YJIT.runtime_stats生成的大部分统计数据现在都可以在发布版本中使用。

    • 只需使用--yjit-stats运行 ruby 来计算和转储统计信息(会产生一些运行时开销)。

  • YJIT 现在经过优化以利用 object shapes。[Feature #18776 ]

  • 在定义新常量时,利用更细粒度的常量失效来减少代码的无效化。[Feature #18589 ]

  • 默认--yjit-exec-mem-size更改为 64 (MiB)。

  • 默认--yjit-call-threshold更改为 30。

针对 ReDoS 的正则表达式改进

由于正则表达式匹配会耗费不少时间,当代码试图向不受信任的输入匹配低效的正则表达式时,攻击者可能会利用它进行 DoS 攻击(即正则表达式 DoS,或称作 ReDoS)。因此新版本引入了两项可显着缓解 ReDoS 攻击的改进。改进的正则表达式匹配算法从 Ruby 3.2 开始,Regexp 的匹配算法通过使用记忆技术得到了极大的改进。
# This match takes 10 sec. in Ruby 3.1, and 0.003 sec. in Ruby 3.2 /^a*b?a*$/ =~ "a" * 50000 + "x"
2ceafd02-852e-11ed-bfe3-dac502259ad0.png2d11e5c0-852e-11ed-bfe3-dac502259ad0.png改进后的匹配算法使得大多数 Regexp 匹配(实验中大约为 90%)在线性时间内完成。对于 3.2.0 预览版本的用户:此优化可能会消耗与每个匹配的输入长度成比例的内存。预计不会出现实际问题,因为此内存分配通常会延迟,并且正常的 Regexp 匹配最多应消耗 10 倍的内存输入长度。正则表达式超时退出机制此版本引入了正则表达式超时退出机制。
Regexp.timeout = 1.0

/^a*b?a*$/ =~ "a" * 50000 + "x"
#=> Regexp::TimeoutError is raised in one second
Regexp.timeout根据 Ruby 应用程序的要求进行配置,可以防止或显着降低 DoS 的风险。请注意,Regexp.timeout是全局配置项,如果希望对某些特殊的正则表达式使用不同的超时设置,需要使用timeout关键字Regexp.new
Regexp.timeout = 1.0

# This regexp has no timeout
long_time_re = Regexp.new("^a*b?a*$", timeout: nil)

long_time_re =~ "a" * 50000 + "x" # never interrupted
此项特性的最初提案:https://bugs.ruby-lang.org/issues/17837

其他值得注意的新功能

语法建议
  • syntax_suggest(以前的dead_end)的功能已集成到 Ruby 中,可以帮助找到错误的位置,例如丢失或多余的 end 。

Unmatched `end', missing keyword (`do', `def`, `if`, etc.) ?

  1  class Dog
> 2    defbark
> 4    end
  5  end
[Feature #18159]错误高亮
  • 现在它指向 TypeError 和 ArgumentError 的相关参数

test.rbin `+': nil can't be coerced into Integer (TypeError)

sum = ary[0] + ary[1]
               ^^^^^^
语言
  • 匿名 rest 和关键字 rest 参数可以作为参数传递,而不仅仅是在方法参数中使用。[Feature #18351]

  deffoo(*)
    bar(*)
  end
  defbaz(**)
    quux(**)
  end
更多详情可查看官方公告:https://www.ruby-lang.org/en/news/2022/12/25/ruby-3-2-0-released/

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • ruby
    +关注

    关注

    0

    文章

    44

    浏览量

    3442

原文标题:Ruby 3.2.0正式发布,新增多项改进

文章出处:【微信号:OSC开源社区,微信公众号:OSC开源社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    HyperLynx 2409新增功能和改进功能

    作为HyperLynx Schematic Analysis加入HyperLynx系列;Xpedition AMS即将作为HyperLynx AMS加入HyperLynx系列。我们的产品一如既往地出色,并具有以下新增功能和改进功能。
    的头像 发表于 11-04 11:15 136次阅读

    请问linux-3.2.0的内核支持TLV320AIC3104音频驱动吗?

    请问linux-3.2.0的内核支持TLV320AIC3104音频驱动么?
    发表于 10-15 06:29

    请问inux-3.2.0中tlv320aic3x.c驱动是否支持TLV320AIC3104这款芯片呢?

    TLV320AIC3104搜索到了,但是没有声音输出,量了下波形,时钟不对。是否是因为linux-3.2.0中tlv320aic3x.c这个驱动未支持TLV320AIC3104这款芯片呢?有其他人在linux-3.2.0上用过TLV320AIC3104这款芯片么? 电路
    发表于 10-14 06:53

    奇瑞星途汽车两款车型升级OTA,新增多项功能

     值得一提的是,星纪元ES/ET作为奇瑞首批搭载城市领航功能的车型,其NEP城市领航辅助功能已覆盖上海(部分区域)和芜湖两地。该功能采取邀请制内测,成功报名后即可体验。
    的头像 发表于 05-20 14:16 440次阅读

    STVD4.3.0与STVD3.2.0对比做了哪些改进

    STVD4.3.0与STVD3.2.0比较,做了哪些改进?请各位老师赐教。
    发表于 05-17 06:12

    iOS 17.5版本发布新增支持欧盟网络应用下载等多项功能

    行业资讯
    北京中科同志科技股份有限公司
    发布于 :2024年05月14日 11:38:50

    微信WCDB最新开源版本发布,优化数据库接口及核心逻辑,新增多项功能

    如今,微信已经发布此项重大技术升级的新版本 WCDB,以及其更为丰富的开发语言支持,如新增 C++以及对 Java 和 Kotlin 语言的 ORM 提供完整支援,覆盖越发广泛的终端平台;更强大的 SQL 表达能力,通过对 Winq 的重新书写和强化体现出来;
    的头像 发表于 04-09 15:59 576次阅读

    极氪007后驱增强版正式上市,新增多项豪华配置

    极氪官方推荐,新款车型将拥有前座14向电动调节、前排座椅通风/按摩/加热/记忆功能;后排座椅加热及靠背电动调节等舒适性设施。除此以外,车辆配备15.05英寸2.5KOLED显示屏,35.5英寸AR-HUD抬头显示系统;
    的头像 发表于 04-01 10:37 723次阅读

    阿维塔12发布3.2.0版本更新,新增多项功能并优化细节

    特殊车道智能通行功能:城市和乡村的智驾领航辅助(NCA)和车道巡航辅助(LCC)均新增此功能,支持通过潮汐车道、公交车道控制杆进入NCA模式,并实现自动驶出的操作。
    的头像 发表于 03-28 14:27 521次阅读

    OBS Studio 30.1发布新增多元功能,优化HDR色调映射滤镜

    在图像功能方面,HDR Tone Mapping 滤镜新增了用于 SDR 的 maxRGB 色调映射器,Image Slideshow 可异步加载文件,自动裁剪至边界框添新选项。流媒体与录制过程中的 GPU 重采样设置亦得到简化。
    的头像 发表于 03-14 14:53 1016次阅读

    SOLIDWORKS 3D CAD 2024的10大新增功能

    随着技术的不断进步,SOLIDWORKS,这一知名的3D CAD(计算机辅助设计)解决方案,也在不断发展和创新。近日,SOLIDWORKS发布了其新版本——SOLIDWORKS 2024,带来了许多令人兴奋的新功能和改进。下面,我们将深入探讨SOLIDWORKS 3D C
    的头像 发表于 01-17 14:01 1084次阅读

    解决方案工具包QE显示[RX,RA]V3.2.0:用于显示应用程序的开发辅助工具

    电子发烧友网站提供《解决方案工具包QE显示[RX,RA]V3.2.0:用于显示应用程序的开发辅助工具.pdf》资料免费下载
    发表于 01-03 09:59 0次下载
    解决方案工具包QE显示[RX,RA]V<b class='flag-5'>3.2.0</b>:用于显示应用程序的开发辅助工具

    QE显示[RX,RA]V3.2.0 发布说明

    电子发烧友网站提供《QE显示[RX,RA]V3.2.0 发布说明.pdf》资料免费下载
    发表于 12-21 10:11 0次下载
    QE显示[RX,RA]V<b class='flag-5'>3.2.0</b> <b class='flag-5'>发布</b>说明

    华为新增多项芯片制造设备及方法专利

    据这份专利陈述,其主题是关于晶圆处理设备及其操作方式。该设备包含晶圆载台,其可沿旋转轴线上进行转动;还有机械臂,其设有抓取晶圆的手部;此外还有一个控制器;
    的头像 发表于 12-14 14:19 570次阅读

    鸿蒙原生应用/元服务开发-AGC分发如何申请发布证书

    帐号已实名认证。每个帐号最多申请1个发布证书。 1.登录AppGallery Connect,选择“用户与访问”。 2.在左侧导航栏点击“证书管理”,进入“证书管理”页面,点击“新增证书”。 3.在
    发表于 11-27 15:56