for me there is a clear problem in all those languages. The exception paradigma opens a second way to exit a function. This is clearly a burden for every programmer. it is also a burden for the machine. you have to have RTTI, Inconvinient stack undwindings and perhaps gerneric types. Also nullable types are a but of a letdown. first we specify a "reference" kind type to neverhave to deal with null violations, then we…
The function could return.
The function could be aborted by SIGKILL.
The function could be aborted by a non-SIGKILL signal that preserves subsequent execution invariants.
The function could be aborted by a non-SIGKILL signal that doesn't preserve subsequent execution invariants (SIGSEGV in most--but not all--cases).
The function could abort(2) (not always the same as SIGABRT, but usually).
The function could overflow its stack (not always the same as abort(2)).
The computer could lose power.
...and that's without violating the spirit of the law with weird instruction-level stuff (e.g. is pop/jmp the same as ret? If I move the stack pointer and re-set all the argument registers, did I return?)