Experimental feature in GraalVM

TruffleRuby

TruffleRuby logo

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

入门 #

TruffleRuby 有两种发行版

  • 原生独立版:这仅包含 TruffleRuby 的 原生配置
  • JVM 独立版:这仅包含 TruffleRuby 的 JVM 配置。这包括对其他语言的支持,例如 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 尚未与 MRI 3.2 完全兼容。请 报告 您可能遇到的任何兼容性问题。TruffleRuby 通过了大约 97% 的 ruby/spec,比任何其他替代 Ruby 实现都要多。

在性能方面,TruffleRuby 迄今为止yjit-bench 基准测试套件中最快的 Ruby 实现,其中包括 railsbench 等。为了实现这种性能,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。

安全 #

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

许可证 #

TruffleRuby 受版权保护 (c) 2013-2024 Oracle 和/或其关联公司,并根据以下三种许可证之一的条款提供给您

  • Eclipse 公共许可证 2.0 版,或
  • GNU 通用公共许可证 2 版,或
  • GNU 宽通用公共许可证 2.1 版。

有关进一步的许可信息,请参阅 LICENCE3rd_party_licensesdoc/legal/legal

署名 #

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

与我们联系