- 适用于 JDK 24 的 GraalVM(最新)
- 适用于 JDK 25 的 GraalVM(早期访问)
- 适用于 JDK 21 的 GraalVM
- 适用于 JDK 17 的 GraalVM
- 存档
- 开发构建
TruffleRuby
TruffleRuby 是 GraalVM 对 Ruby 编程语言的高性能实现。
开始使用 #
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
- 在 CI 中使用 GitHub Actions,有关更多详细信息和其他 CI,请参阅在 CI 中测试 TruffleRuby。
- uses: ruby/setup-ruby@v1
with:
ruby-version: truffleruby # or truffleruby-head or truffleruby+graalvm or truffleruby+graalvm-head
-
通过 Docker。对于原生独立版,请参阅官方发布镜像和每夜构建镜像。对于 JVM 独立版,目前还没有 Docker 镜像,但您可以轻松地下载它并借鉴原生独立版 Dockerfile 的经验。
-
手动安装,请按照文档进行操作。
您可以像往常一样使用 gem
和 bundle
来安装 gem。
请在 GitHub 上报告您发现的任何问题。
目标 #
TruffleRuby 的目标是
- 更快地运行惯用的 Ruby 代码。
- TruffleRuby 是许多 CPU 密集型基准测试的最快 Ruby 实现。
- 并行运行 Ruby 代码。
- TruffleRuby 没有全局解释器锁,并可并行运行 Ruby 代码。
- 支持 C 扩展。
- 许多 C 扩展开箱即用,包括数据库驱动程序。
- 添加与 Java、JavaScript、Python 和 WebAssembly 等语言的快速且低开销的互操作性。
- 由 GraalVM 提供,请参阅多语言文档。
- 提供新的工具,例如跨语言调试器和监控工具。
- 包括分析器、调试器、VisualVM 等。请参阅工具文档。
- 在提供上述所有功能的同时,保持与 Ruby 标准实现的高度兼容性。
TruffleRuby 运行时配置 #
TruffleRuby 有两种主要的运行时配置:原生(Native)和 JVM,它们具有不同的权衡。
配置 | 原生 (--native ,默认) |
JVM (--jvm ) |
---|---|---|
TruffleRuby 启动时间 | 与 MRI 启动速度相近 | 更慢 |
达到峰值性能的时间 | 更快 | 更慢 |
峰值性能(也考虑 GC) | 好 | 最佳 |
Java 主机互操作性 | 需要反射配置 | 开箱即用 |
要找出正在使用的运行时配置,请在命令行运行 ruby --version
,或在 Ruby 代码中检查 RUBY_DESCRIPTION
或 TruffleRuby.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 无法正常工作。
依赖项 #
- make、gcc 和 g++ 用于构建 C 和 C++ 扩展
- libssl 用于
openssl
C 扩展 - libyaml 用于
psych
C 扩展 - zlib 用于
zlib
C 扩展
如果没有这些依赖项,包括 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。
有关更多许可信息,请参阅 LICENCE、3rd_party_licenses 和 doc/legal/legal。
致谢 #
TruffleRuby 包含来自 JRuby 的基础设施代码(例如解析器、JCodings、Joni),来自 Rubinius 项目的核心库代码,以及来自 Ruby 标准实现 MRI 的代码。