From: "matz (Yukihiro Matsumoto)" Date: 2012-11-20T23:04:12+09:00 Subject: [ruby-core:49743] [ruby-trunk - Feature #5856][Rejected] Feature: Raise any object Issue #5856 has been updated by matz (Yukihiro Matsumoto). Status changed from Feedback to Rejected If we allow raising non Exception object, the library authors will catch Object (or even BasicObject), and this time we will have no work around. So, it's matter of disciplined exception raising/handling. As non-local exit not to be handled, use throw, and as exception handler, do not use Exception. Matz. ---------------------------------------- Feature #5856: Feature: Raise any object https://bugs.ruby-lang.org/issues/5856#change-33316 Author: kstephens (Kurt Stephens) Status: Rejected Priority: Normal Assignee: matz (Yukihiro Matsumoto) Category: core Target version: next minor Feature: Raise any object = Proposal The ability to raise any object that conforms to the protocol of Exception. = Problem * The Exception subclass hierarchy is well-established. * CRuby does not allow any object that behaves as an Exception to be raised, it must be a subclass of Exception. * 3rd-party code often rescues Exception; e.g. for error recovery, retry and/or logging. * Users need the ability to raise objects that would not normally be rescued by *any* code; e.g.: hard timeouts or custom signal handlers in an application. = Solution * ruby/eval.c: Remove make_exception() assertion rb_obj_is_kind_of(mesg, rb_mRaiseable). = Implementation * See attached patch or https://github.com/kstephens/ruby/tree/trunk-raise-any = Example * See test/ruby/test_raise_any.rb = See also * https://bugs.ruby-lang.org/issues/5818 -- http://bugs.ruby-lang.org/