发布 Ruby 3.2 编程语言

Ruby 3.2.0 发布,一种动态的面向对象编程语言,程序开发效率极高,融合了 Perl、Java、Python、Smalltalk、Eiffel、Ada 和 Lisp 的最佳功能。 该项目代码在BSD(“2-clause BSDL”)和“Ruby”许可证下分发,这是指最新版本的GPL许可证,与GPLv3完全兼容。

主要改进:

  • 添加了 CRuby 解释器的初始端口,该端口编译为 WebAssembly 中间代码,以便在 Web 浏览器或独立运行时(例如 wasmtime)下运行。 为了在单独运行时与操作系统直接交互,使用 WASI(WebAssembly 系统接口)API。 除此之外,在 WASI 之上提供了一个 VFS 包装器,它允许您将整个 Ruby 应用程序打包成单个 wasm 文件形式的演示文稿。 在浏览器中运行可用于创建训练和演示 Web 服务,例如 TryRuby。 在当前的开发阶段,该端口成功通过了基本测试套件和引导测试套件,这些测试套件不使用Thread API。 该端口也不支持纤程、异常或垃圾收集。
  • YJIT 进程内 JIT 编译器由 Shopify 电子商务平台的开发人员创建,作为提高使用 Rails 框架并调用大量方法的 Ruby 程序性能计划的一部分,已宣布稳定并准备就绪生产用途。 与之前使用的 MJIT JIT 编译器(基于处理整个方法并使用 C 语言中的外部编译器)的主要区别在于,YJIT 使用惰性基本块版本控制 (LBBV) 并包含集成的 JIT 编译器。 使用 LBBV,JIT 首先仅编译方法的开头部分,并在执行过程中确定所使用的变量和参数的类型后,稍后编译其余部分。 YJIT 可用于 Linux、MacOS、BSD 和其他 UNIX 平台上的 x86-64 和 arm64/aarch64 架构。

    与 Ruby 不同,YJIT 代码是用 Rust 语言编写的,需要 rustc 1.58.0+ 编译器进行编译,因此 YJIT 构建默认禁用,是可选的。 使用 YJIT 时,与使用解释相比,运行 yjit-bench 测试时性能提高了 41%。

    发布 Ruby 3.2 编程语言

  • 在以低效且耗时的正则表达式 (ReDoS) 处理外部数据时,增加了针对拒绝服务攻击的额外保护。 使用记忆技术的匹配算法得到了显着改进。 例如,表达式 '/^a*b?a*$/ =~ "a" * 50000 + "x"' 的执行时间从 10 秒减少到 0.003 秒。 优化的代价是内存消耗的增加,其消耗大约是输入数据大小的10倍。 第二个安全措施是能够定义超时(例如,“Regexp.timeout = 1.0”),在此期间必须处理正则表达式。
  • 包含syntax_suggest模式,它有助于诊断与丢失或额外的结束“end”表达式相关的错误原因。 不匹配的“end”,缺少关键字(“do”、“def”、“if”等)? 1 类狗 > 2 剥皮 > 3 端 4 端
  • 错误位置显示模式中添加了标记与类型和参数相关的错误的参数的功能,例如: test.rb:2:in `+': nil can't be coerced into Integer (TypeError) sum = ary [0] + 元数 [1] ^^^^^^
  • 添加了用于将参数集重定向到其他方法的新语法: def foo(*) bar(*) end def baz(**) quux(**) end
  • 提出了 Ruby_vm/mjit/compiler - 旧 MJIT JIT 编译器的变体,用 Ruby 语言重写。 确保 MJIT 在单独的进程中运行,而不是在 MJIT 工作线程中运行。
  • 在 Bundler 2.4 中,依赖项处理使用 PubGrub 版本检测器,该检测器也用在 Dart 语言的 pub 包管理器中。 之前使用的 Molinillo 算法在 RubyGems 中继续使用,但将来也将被 PubGrub 取代。
  • 内置 gem 模块和标准库中包含的模块的更新版本。

来源: opennet.ru

添加评论