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

时间:2017-06-12 19:03:51

标签: 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 'benchmark'

我有这个错误:

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

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

1 个答案:

答案 0 :(得分:0)

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

安装了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/"是存储宝石的子文件夹。也许它也可以从C api实现,但它可能与Ruby中的rb_funcallrb_intern相同,因为与加载路径相关的api是{{1在Ruby源代码中。