6

目前的状态truffleruby

TruffleRuby 进展很快,但目前可能还没有准备好让您尝试在其上运行完整的 Ruby 应用程序。缺少对 OpenSSL 和 Nokogiri 等关键 C 扩展的支持。

为什么truffleruby需要 C 扩展?它建立在 GraalVM 之上,GraalVM 建立在 JVM 之上,它实际上是JRuby的一个分支

TruffleRuby 是 JRuby 的一个分支,将它与来自 Rubinius 项目的代码相结合,还包含来自 Ruby 标准实现 MRI 的代码。

他们不能使用 JRuby 世界 gems 而不是依赖于他们的 C 变体吗?

编辑github上问题的链接

4

2 回答 2

14

运行 C 扩展很困难,因为 C 扩展 API 只是 MRI 的整个内部,作为头文件公开。您不是针对干净的 API 进行编程 - 您是针对 MRI 的所有实现细节和内部设计决策进行编程。

JRuby 的 Java 扩展也有同样的问题!JRuby Java 扩展 API 只是 JRuby 的整个内部结构,您不是针对 API 进行编程,而是针对 JRuby 的所有实现细节和设计决策进行编程。

我们计划最终以相同的方式解决这两个问题——即使用解释器在 C 或 Java 代码上添加另一个抽象级别,我们可以在需要时拦截和重定向,以便它相信它是针对 MRI 或 JRuby 内部运行的,但实际上我们将这些重定向到我们的内部。

我们认为 C 扩展更重要,所以我们首先解决这些问题。我们还没有真正开始使用 Java 扩展,但是我们已经启动了我们将使用的 Java 底层解释器。

这个视频解释了所有

https://youtu.be/YLtjkP9bD_U?t=1562

于 2017-01-21T14:18:47.033 回答
3

您已经从项目负责人那里得到了很好的回答,但我想提供一个不同的观点:

为什么 truffleruby 需要 C 扩展?

它不需要它们。但是它们确实存在,并且有使用它们的代码,并且能够运行该代码肯定会很好。

于 2017-01-22T04:43:44.020 回答