Ruby 红宝石“退出!”函数似乎调用了与文档相反的退出处理程序

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处

以下代码在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处理程序

这是
exit中的一个bug


是否有其他方法可以实现不触发退出处理程序的预期结果,从而保证从内部杀死我的系统?

这看起来像是JRuby中已知的不兼容

Benoit Daloze(ruby/spec的维护者,
ruby/spec
,TruffleRuby的首席开发人员,JRuby团队成员)仅于2020年7月27日(35天前)添加了和的规范:

2020年7月28日,Benoit在JRuby
spec
目录中添加了标签,将这些新规范禁用为已知故障:


JRuby团队确实运行了
ruby/spec
s以确保与所有其他ruby实现的兼容性,但如果缺少规范,不兼容可能会不知不觉地消失。

在MRI 2.7.1中,您的代码不会产生任何输出。可能值得注意的是,JRuby和MRI是Ruby的不同实现,您发布的文档链接是针对MRI的。它的工作原理与MRI一致。因此,它看起来确实是JRuby的一个bug。我已经提出了一个关于JRuby的bug报告:考虑到19年来没有人注意到,它似乎不是一个高优先级的修复,但它是我的一个优先级。