Unfortunately, changing the exception kind or introducing a new exception kind 
is a significantly breaking change - this is the enum we have to live with.

I suspect the best thing we can do probably is ensure nobody ever actually uses 
the "plain" conversion: <https://github.com/nim-lang/Nim/issues/18430>

> The distinction between catchable exceptions and defects

Yes, it's quite arbitrary - at best, they're named `Defect` and `Error` though 
some of the standard library doesn't even do that leading to confusion over 
what can/should be caught and what cannot.

The other related issue here is that `except:` catches the "uncatchable" 
exceptions also depending on the dialect of Nim - ie the manual says one thing, 
the compiler does different things depending on flags passed to it, and 
different exceptions are raised, also depending on flags. It's quite a mess to 
try to use exceptions sanely in Nim, specially when creating libraries that 
don't have control over which dialect is used.

Also, when the compiler raises Defect, it also does so through a different 
mechanism that when user code raises Defect - this introduces yet more spice 
into the bug sauce. 

Reply via email to