我正在使用C Ruby接口在swift应用程序中嵌入ruby解释器(但是,我使用的是swift与Imo无关)
我觉得Ruby 必须有一些完全重新初始化的方法。
我正在初始化vm:
var variable_in_this_stack_frame:UnsafeMutablePointer<VALUE>? = nil
ruby_init_stack(variable_in_this_stack_frame)
ruby_init()
ruby_init_loadpath()
rb_require("enc/encdb")
rb_require("enc/trans/transdb")
var node = ruby_options(Int32(options.count), &cargs)
评估一些代码:
var state: Int32 = 0;
if ruby_executable_node(node, &state) != 0 {
state = ruby_exec_node(node)
}
if state != 0 {
throw RubyError(err: RTypedValue(VALUE: rb_errinfo()))
}
并像这样摧毁vm:
var state: Int32 = 0
ruby_cleanup(state)
然而,第二次执行所有操作时,我在运行时获得EXC_BAD_ACCESS
:ruby_init_loadpath()
我该如何重新启动?
答案 0 :(得分:0)
关闭后,无法重新初始化Ruby的VM,因为ruby_cleanup
和ruby_finalize
不会将其返回到可重用的原始状态,而仅用于关闭它。优雅的方式。
唯一的真实选择是生成一个新进程,这可能不理想,具体取决于您的实现。我不确定100%是否在另一个线程上再次尝试是否可行,尽管我认为由于Ruby VM的单线程特性,这种可能性极小。