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
的链接答案 0 :(得分:13)
运行C扩展很难,因为C扩展API只是作为头文件暴露的整个MRI内部。您没有针对干净的API进行编程 - 您需要根据MRI的所有实现细节和内部设计决策进行编程。
JRuby的Java扩展有完全相同的问题! JRuby Java扩展API只是JRuby的整个内部,你不是针对API进行编程,而是针对JRuby的所有实现细节和设计决策进行编程。
我们计划最终以同样的方式处理这两个问题 - 即使用解释器在C或Java代码上添加另一个抽象级别,我们可以在需要时拦截和重定向,以便它认为它是针对MRI运行的或JRuby内部,但我们真的将它们重定向到我们的内部。
我们认为C扩展更为重要,因此我们首先要解决这些问题。我们还没有真正开始使用Java扩展,但我们已经启动了我们将使用的基础Java解释器。
此视频解释了所有
答案 1 :(得分:3)
你已经从项目负责人那里得到了一个很好的答案,但我想提出一个不同的观点:
为什么truffleruby需要C扩展?
它不需要它们。但是它们确实存在并且存在使用它们的代码,并且能够运行该代码肯定会很好。