为什么truffleruby需要C扩展?

时间:2017-01-21 12:28:18

标签: ruby jruby truffleruby graalvm

Current status of truffleruby says

  

TruffleRuby正在快速发展,但目前可能尚未准备好尝试运行完整的Ruby应用程序。缺少对OpenSSL和Nokogiri等关键C扩展的支持。

为什么truffleruby需要C扩展?它建立在构建于JVM之上的GraalVM上,it is in fact a fork of JRuby

  

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

他们不能使用JRuby世界宝石而不是依赖于他们的C变种吗?

编辑指向issue on github

的链接

2 个答案:

答案 0 :(得分:13)

运行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

答案 1 :(得分:3)

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

  

为什么truffleruby需要C扩展?

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