truffleruby
的当前状态为:
TruffleRuby进展迅速,但目前可能还没有准备好让您尝试在上运行完整的Ruby应用程序。缺少对OpenSSL和Nokogiri等关键C扩展的支持。
为什么truffleruby
需要C扩展?它构建在GraalVM上,GraalVM构建在JVM之上,它实际上是JRuby:的分支
TruffleRuby是JRuby的一个分支,将其与Rubinius项目的代码相结合,还包含Ruby标准实现MRI的代码。
难道他们不能使用JRuby世界宝石而不是依赖于他们的C变体吗?
编辑github 上的问题链接
运行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
项目负责人自己已经给出了一个很好的答案,但我想提供一个不同的观点:
为什么truffleruby需要C扩展?
它不需要它们。但它们确实存在,而且有代码在使用它们,能够运行这些代码肯定会很好。