我正在阅读Rubinius source code,我不断遇到类似这样的方法:
def self.do_something
Rubinius.primitive :vm_do_something
raise SomeError, "primitive failed to do something"
end
例如,kernel/alpha.rb和kernel/bootstrap/rubinius.rb都有很多这些。他们到处都是,我似乎无法找到定义Rubinius.primitive
的地方。
因为我不知道它做了什么,所以我很难理解Rubinius如何完成任务。
答案 0 :(得分:3)
我在freenode.net
#rubinius
进行了IRC,并了解到Rubinius.primitive
的行为是通过调用C ++代码来替换它调用的方法。只有当原语以某种方式失败时才会执行引发通常跟随对原语的调用的调用。