c - 如何从 Ruby C VM 中加载的脚本中获取基准测试?

标签 c ruby

我有一个像这样的 Ruby VM 设置:

int ruby_state = 0;
ruby_init();

// some rb_define

rb_protect(rb_require, (VALUE)"./script.rb", &ruby_state);
ruby_cleanup(ruby_state);

我想对我的 C 函数进行一些基准测试。我尝试在 script.rb 中添加 require,如下所示:

require 'benchmark'

我遇到了这个错误:

script.rb:1:in `require': cannot load such file -- benchmark (LoadError)

我如何从该脚本中获取基准测试?

最佳答案

我找到了两种方法来实现这一目标。

安装了 Ruby

就在ruby_init()之后,我需要添加ruby_init_loadpath() .

int ruby_state = 0;
ruby_init();
ruby_init_loadpath(); // !IMPORTANT

// some rb_define

rb_protect(rb_require, (VALUE)"./script.rb", &ruby_state);
ruby_cleanup(ruby_state);

未安装 Ruby

这一次,有点棘手。在所需的第一个 ruby​​ 脚本的开头,我们需要添加以下行:

$LOAD_PATH.unshift File.expand_path(File.join(__dir__, "/gems/"))

哪里"/gems/"是存储 gem 的子文件夹。也许也可以从 C api 实现这一点,但它可能与 Ruby 中的一些 rb_funcall 相同。和rb_intern因为加载路径相关的api是static在 Ruby 源代码中。

关于c - 如何从 Ruby C VM 中加载的脚本中获取基准测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44506937/

相关文章:

c - 指针、结构、传递参数、递归

ios - 在 obj c - ios 中使用 C Dll 和 lib

c - 如何在 gradle 中的构建类型中为 native 代码定义宏?

c - 对于多线程的只读访问,GLib 的 GHashTable 是线程安全的吗?

ruby-on-rails - Heroku 上不受信任的证书

ruby - 在 RSpec 测试中模拟 ActiveRecord 关系行为

c++ - 'continue' 使用标志作用于哪个循环?

arrays - 如何只选择数组中包含数字的参数?

ruby-on-rails - Ruby 中对象销毁的通知

ruby-on-rails - 如何从子哈希中删除空白值