在Ruby的延续了setjmp / longjmp的(Setjmp/longjmp in Ruby’

2019-10-21 22:25发布

我想知道这一点的同时通过代码挖掘cont.c在Ruby的当前版本。 的文档setjmp说,调用longjmp在jmp_buf结构的来电 setjmp返回是一个错误。 但是,似乎红宝石愉快地做到这一点并不会崩溃:

https://github.com/ruby/ruby/blob/05f087c844f0e1e7cfe323edcf591de64069a289/cont.c#L522 https://github.com/ruby/ruby/blob/05f087c844f0e1e7cfe323edcf591de64069a289/cont.c#L775 (+一对夫妇更用法与纤维)

我问:怎么可能?

我也注意到,相同的源代码的使用也set/getcontext ,但只能用纤维或者看起来是这样。 这似乎更合理的,我要使用这些功能,而不是set/longjmp

文章来源: Setjmp/longjmp in Ruby’s Continuation