2017-06-12 39 views
0

我有一個Ruby VM的設置是這樣的:如何從Ruby C 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) 

我怎麼能要求從腳本標杆?

回答

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腳本的開始,我們需要添加此行:

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

哪裏"/gems/"就是寶石都存儲在子文件夾。也許可以通過C api來實現,但它可能與Ruby中的一樣,因爲與源代碼相關的api在Ruby源代碼中爲static,因此它與rb_funcallrb_intern中的一些相同。