發布 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。 該端口也不支持光纖、異常或垃圾收集。
  • 進程內 JIT 編譯器 YJIT 是由 Shopify 電子商務平台的開發人員創建的,作為提高使用 Rails 框架並調用大量方法的 Ruby 程序性能的計劃的一部分,已宣布穩定並準備就緒生產用途。 與之前使用的基於方法處理並使用外部 C 編譯器的 MJIT JIT 編譯器的主要區別在於,YJIT 使用惰性基本塊版本控制 (LBBV) 並包含集成的 JIT 編譯器。 由於 LBBV,JIT 首先僅編譯方法的開頭部分,並在一段時間後(在執行過程中確定使用的變量和參數的類型後)編譯其餘部分。 YJIT 可用於 Linux、MacOS、BSD 和其他 UNIX 平台上的 x86-64 和 arm64/aarch64 架構。

    與 CRuby 不同,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

添加評論