Experimental feature in GraalVM

TruffleRuby

TruffleRuby logo

TruffleRuby 是 GraalVMRuby 编程语言的高性能实现。

开始使用 #

TruffleRuby 有两种分发版本

  • 原生独立版:此版本仅包含处于 原生配置 中的 TruffleRuby。
  • JVM 独立版:此版本仅包含处于 JVM 配置 中的 TruffleRuby。它支持其他语言,例如 Java、JavaScript、Python 和 WebAssembly。

您可以安装其中任何一个

  • 通过您的 Ruby 管理器/安装程序(RVM, rbenv, chruby, asdf, ruby-build, ruby-install)。
    我们建议尝试 TruffleRuby 开发版本(dev builds),其中包含最新的修复和改进(将 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 有两种主要的运行时配置:原生(Native)和 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 起) 上受支持

如果您严格限制环境,例如通过卸载 /latest/shm 等系统文件系统,您可能会发现 TruffleRuby 无法正常工作。

依赖项 #

如果没有这些依赖项,包括 RubyGems 在内的许多库将无法工作。如果缺少依赖项,TruffleRuby 将尝试打印一个友好的错误消息,但这只能尽力而为。

如果尚未完成,您还需要设置 UTF-8 区域设置

如果您希望从源代码构建 TruffleRuby,请参阅贡献者工作流程文档。

当前状态 #

我们建议那些在其 gem 和应用程序上尝试 TruffleRuby 的用户与我们联系以获取任何可能需要的帮助。

TruffleRuby 运行 Rails 并与许多 gem 兼容,包括 C 扩展。TruffleRuby 尚未与 MRI 3.2 完全兼容。请报告您可能发现的任何兼容性问题。TruffleRuby 通过了大约 97% 的 ruby/spec,超过了任何其他替代的 Ruby 实现。

在性能方面,TruffleRuby 是 yjit-bench 基准测试套件(包括 railsbench 等)上迄今为止最快的 Ruby 实现。为了达到此性能,TruffleRuby 需要进行足够的预热,就像其他高级 JIT 编译器一样。如果您发现任何性能问题,请参阅本指南

发布版本 #

TruffleRuby 与 GraalVM 同时发布。TruffleRuby 继续采用基于日历年的版本编号,例如 21.x 和 22.x,与 2023 年之前的 GraalVM 相同。有关发布日期和版本支持期限的信息,请参阅发布路线图即将发布的版本列表。GraalVM 社区版版本最长支持一年。更长的支持适用于 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。

安全 #

有关如何向 Oracle 报告安全漏洞的信息,请参阅SECURITY。对于 Ruby 中的已知漏洞,请参阅 known-cves 文件。

许可 #

TruffleRuby 版权所有 (c) 2013-2025 Oracle 和/或其关联公司,根据以下三项许可中的任何一项提供给您

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

有关更多许可信息,请参阅 LICENCE3rd_party_licensesdoc/legal/legal

致谢 #

TruffleRuby 包含来自 JRuby 的基础设施代码(例如解析器、JCodings、Joni),来自 Rubinius 项目的核心库代码,以及来自 Ruby 标准实现 MRI 的代码。

联系我们