Experimental feature in GraalVM

TruffleRuby

TruffleRuby logo

TruffleRuby 是 GraalVM 的高效能 Ruby 程式設計語言實作。

開始使用 #

TruffleRuby 有兩種發行版

  • 原生獨立版:此版本僅包含 原生組態 中的 TruffleRuby。
  • JVM 獨立版:此版本僅包含 JVM 組態 中的 TruffleRuby。這包括對其他語言 (例如 Java、JavaScript、Python 和 WebAssembly) 的支援。

您可以安裝其中一種

  • 透過您的 Ruby 管理器/安裝程式 (RVM、rbenv、chruby、asdf、ruby-build、ruby-install)。
    我們建議您嘗試 TruffleRuby 開發建置,其中包含最新的修正和改進 (將 VERSION 取代為 dev)。

原生獨立版

RVM:    $ rvm install truffleruby # or truffleruby-head
rbenv:  $ rbenv install truffleruby-VERSION
asdf:   $ asdf install ruby truffleruby-VERSION
chruby: $ ruby-install truffleruby
        $ ruby-build truffleruby-VERSION ~/.rubies/truffleruby-VERSION

JVM 獨立版

rbenv:  $ rbenv install truffleruby+graalvm-VERSION
asdf:   $ asdf install ruby truffleruby+graalvm-VERSION
chruby: $ ruby-install truffleruby-graalvm
        $ ruby-build truffleruby+graalvm-VERSION ~/.rubies/truffleruby+graalvm-VERSION
- uses: ruby/setup-ruby@v1
  with:
    ruby-version: truffleruby # or truffleruby-head or truffleruby+graalvm or truffleruby+graalvm-head

您可以像平常一樣使用 gembundle 安裝 gem。

請在 GitHub 上回報您可能發現的任何問題。

目標 #

TruffleRuby 的目標是

  • 更快地執行慣用的 Ruby 程式碼。
  • 平行執行 Ruby 程式碼。
    • TruffleRuby 沒有全域解譯器鎖定,並且可以平行執行 Ruby 程式碼。
  • 支援 C 擴充功能。
    • 許多 C 擴充功能 (包括資料庫驅動程式) 都能立即使用。
  • 新增與 Java、JavaScript、Python 和 WebAssembly 等語言的快速低負擔互通性。
  • 提供新的工具,例如跨語言運作的除錯器和監控工具。
    • 包括效能分析器、除錯器、VisualVM 等。請參閱工具文件
  • 提供上述所有功能,同時維持與 Ruby 標準實作的高度相容性。

TruffleRuby 執行時組態 #

TruffleRuby 有兩種主要的執行時組態:原生和 JVM,這兩者各有不同的優缺點。

組態 原生 (--native,預設) JVM (--jvm)
啟動 TruffleRuby 的時間 與 MRI 啟動速度差不多 較慢
達到效能高峰的時間 較快 較慢
效能高峰 (也考慮到 GC) 良好 最佳
Java 主機互通性 需要反映組態 正常運作

若要找出目前使用的執行時組態,請在命令列上執行 ruby --version,或檢查 Ruby 程式碼中 RUBY_DESCRIPTIONTruffleRuby.native? 的值。執行時組態在部署 TruffleRuby 中有更詳細的說明。

系統相容性 #

TruffleRuby 會在下列系統上進行主動測試

  • Oracle Linux 7、8、9
  • Ubuntu 18.04、20.04、22.04 (所有 LTS)
  • Fedora 37、38
  • Debian 10、11、12
  • macOS 11 (Big Sur)

架構

  • AMD64 (又稱 x86_64):支援
  • AArch64 (又稱 arm64):在 Linux (從 21.2 開始) 和 macOS (從 22.2 開始) 上支援

如果您嚴重限制環境 (例如,卸載系統檔案系統 (例如 /dev/shm)),您可能會發現 TruffleRuby 無法運作。

相依性 #

如果沒有這些相依性,許多程式庫 (包括 RubyGems) 將無法運作。如果遺失相依性,TruffleRuby 會嘗試列印易讀的錯誤訊息,但這只能盡力而為。

如果尚未設定,您也需要設定 UTF-8 地區設定

如果您想要從原始碼建置 TruffleRuby,請參閱貢獻者工作流程文件。

目前狀態 #

我們建議嘗試在 gem 和應用程式上使用 TruffleRuby 的使用者與我們聯絡,以便獲得任何可能需要的協助。

TruffleRuby 可以執行 Rails,並與許多 gem 相容,包括 C 擴充功能。TruffleRuby 尚未 100% 與 MRI 3.2 相容。請回報您可能發現的任何相容性問題。TruffleRuby 通過大約 97% 的 ruby/spec,比任何其他 Ruby 實作都高。

關於效能,在包含 railsbench 等項目的 yjit-bench 基準測試套件上,TruffleRuby 遠遠地是最快的 Ruby 實作。為了達到此效能,TruffleRuby 需要相當多的暖機時間,就像其他進階 JIT 編譯器一樣。如果您發現任何效能問題,請參閱本指南

版本 #

TruffleRuby 會與 GraalVM 同時發行。TruffleRuby 繼續使用以日曆年度為基礎的版本編號,例如,21.x 和 22.x,與 2023 年之前的 GraalVM 相同。請參閱版本藍圖即將推出的版本清單,以瞭解發行日期和版本支援時間長度的相關資訊。GraalVM Community Edition 版本最多支援一年。Oracle GraalVM 提供更長的支援

從 MRI 移轉 #

在大多數情況下,TruffleRuby 應能作為 MRI 的直接替代方案,但您應閱讀我們的相容性

從 JRuby 移轉 #

對於許多使用案例,TruffleRuby 應能作為 JRuby 的直接替代方案。但是,我們整合 Java 的方法與 JRuby 不同,因此您應閱讀我們的移轉指南

聯絡方式 #

與我們聯絡的最佳方式是加入 GraalVM Slack 上的 #truffleruby 頻道。您也可以在 Twitter 上發送推文給 @TruffleRuby,或傳送電子郵件至 benoit.daloze@oracle.com

請透過回報漏洞指南中概述的程序來回報安全性漏洞,而不是透過 GitHub 問題或 Gitter 對話等公開方式回報。

郵件清單 #

關於 GraalVM (包括 TruffleRuby) 的公告會發布在 graal-dev 郵件清單上。

作者 #

TruffleRuby 的主要作者,依首次貢獻排序為:Chris Seaton、Benoit Daloze、Kevin Menard、Petr Chalupa、Brandon Fish、Duncan MacGregor、Christian Wirth、Rafael França、Alan Wu、Nicolas Laurent、Carol Chen、Nikolay Sverchkov、Lillian Zhang、Tom Stuart 和 Maple Ong。

安全性 #

請參閱 SECURITY,以瞭解如何向 Oracle 回報安全性漏洞。如需 Ruby 中已知的漏洞,請參閱known-cves 檔案。

授權條款 #

TruffleRuby 的版權為 (c) 2013-2024 Oracle 和/或其附屬公司所有,並依照下列三個授權條款中的任何一個授權給您

  • Eclipse Public License 2.0 版,或
  • GNU General Public License 2 版,或
  • GNU Lesser General Public License 2.1 版。

如需進一步的授權資訊,請參閱LICENCE3rd_party_licensesdoc/legal/legal

歸屬 #

TruffleRuby 包含來自 JRuby (例如剖析器、JCodings、Joni) 的基礎架構程式碼、來自 Rubinius 專案的核心程式庫程式碼,以及來自 Ruby 標準實作的程式碼 MRI

與我們連線