ruby - 为什么 truffleruby 需要 C 扩展?

标签 ruby jruby truffleruby graalvm

Current status of truffleruby says :

TruffleRuby is progressing fast but is currently probably not ready for you to try running your full Ruby application on. Support for critical C extensions such as OpenSSL and Nokogiri is missing.

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

TruffleRuby is a fork of JRuby, combining it with code from the Rubinius project, and also containing code from the standard implementation of Ruby, MRI.

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

编辑链接到issue on github

最佳答案

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

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

我们计划最终以相同的方式解决这两个问题 - 即使用解释器在 C 或 Java 代码上添加另一个抽象级别或 JRuby 内部,但实际上我们将这些重定向到我们的内部。

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

这个视频解释了一切

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

关于ruby - 为什么 truffleruby 需要 C 扩展?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41779349/

相关文章:

ruby-on-rails - rails : accessing field value from model method

ruby - 如何在logstash过滤器中使用redis?

ruby-on-rails - 用于 Ruby on Rails 的 DB2 适配器与 ActiveRecord JDBC 适配器

ruby-on-rails - 如何在ruby-on-rails应用程序顶部使用dBpedia设置neo4j?

java - 为什么 JRuby ScriptManager.getEngineByName 返回 null?

mysql - 在查询随机简单查询期间丢失与 MySQL 服务器的连接

ruby - 以特定顺序运行 RSpec 任务