Ruby 红宝石“退出!”函数似乎调用了与文档相反的退出处理程序
以下代码在Windows上的JRuby 9.1.17.0和9.2.13.0上运行:Ruby 红宝石“退出!”函数似乎调用了与文档相反的退出处理程序,ruby,jruby,Ruby,Jruby,以下代码在Windows上的JRuby 9.1.17.0和9.2.13.0上运行: at_exit { puts "at_exit function" } ObjectSpace.define_finalizer("string", proc { puts "in finalizer" }) exit! 产生以下结果: at_exit function in finalizer 我的期望是,不应该按照exit!的文档调用exit处
at_exit { puts "at_exit function" }
ObjectSpace.define_finalizer("string", proc { puts "in finalizer" })
exit!
产生以下结果:
at_exit function
in finalizer
我的期望是,不应该按照exit!的文档调用exit处理程序代码>:
这是exit中的一个bug代码>
是否有其他方法可以实现不触发退出处理程序的预期结果,从而保证从内部杀死我的系统?这看起来像是JRuby中已知的不兼容
Benoit Daloze(ruby/spec的维护者,ruby/spec
,TruffleRuby的首席开发人员,JRuby团队成员)仅于2020年7月27日(35天前)添加了和的规范:
2020年7月28日,Benoit在JRubyspec
目录中添加了标签,将这些新规范禁用为已知故障:
JRuby团队确实运行了ruby/spec
s以确保与所有其他ruby实现的兼容性,但如果缺少规范,不兼容可能会不知不觉地消失。在MRI 2.7.1中,您的代码不会产生任何输出。可能值得注意的是,JRuby和MRI是Ruby的不同实现,您发布的文档链接是针对MRI的。它的工作原理与MRI一致。因此,它看起来确实是JRuby的一个bug。我已经提出了一个关于JRuby的bug报告:考虑到19年来没有人注意到,它似乎不是一个高优先级的修复,但它是我的一个优先级。