3 ms·
I'd recommend taking a look at Common Lisps condition system, which does exceptions right. The most important feature is that catch blocks are executed before
by lokedhs 10y ago
I'd recommend taking a look at Common Lisps condition system, which does exceptions right.
The most important feature is that catch blocks are executed before the stack is unwond, providing the ability for a handler to signal back to the context where the error occurred how it should be handled.
It's sad that no other languages implement this and instead simply decide that exceptions are bad.
- steveklabnik 10y agoFun trivia: Rust had conditions! Nobody used them, so they were removed.
- lokedhs 10y agoThat sounds short-sighted to me. Even in Lisp restarts (i.e. the feature that allows a handler to communicate back to the point where the exception was thrown) aren't used that often, but when they are, they are incredibly valuable.
- kazinator 10y agoIn TXR Lisp, a continuable exception occurs every time you see a warning about something in the code, like an unbound variable. It is intercepted higher up and automatically continued. The code expander has an entry point which allows the caller to be informed about what variables and functions are free in a block of code. The implementation of this entry point works by intercepting warning exceptions about unbound symbols, and accumulating them in in lists, which are then returned to the caller. This is a useful thing which reduces the need for users to write their own code walker in certain kinds of advanced macros.
- kbenson 10y agoPerl 6 does[1], referenced directly from CLOS (from which a lot of other stuff was cribbed from as well). 1: https://docs.perl6.org/language/exceptions https://docs.perl6.org/language/exceptions