<story><title>The Common Lisp Condition System – Upcoming Book</title><url>https://www.apress.com/us/book/9781484261330</url></story><parent_chain><item><author>drcode</author><text>For those unaware, Common Lisp exception handling is heads and shoulders above almost any other programming language: Imagine having your program crash in the middle of a function, being able to inspect the call stack to find the bug, fixing it, then completing the function call from the middle of the function, at the exact point where the exception happened, with the fix in place.</text></item></parent_chain><comment><author>jwr</author><text>Expanding on that: the most impressive feature of CL&amp;#x27;s condition handling is that it doesn&amp;#x27;t unwind the stack for you automatically.&lt;p&gt;In languages with &amp;quot;exceptions&amp;quot;, when an exception gets thrown, you have a chance to catch it, but at that point the stack has already been unwound and there is no way to resume execution at the point where exception was thrown.&lt;p&gt;In CL, you can let someone else (the caller) make the decision on what to do in case of an exception, providing options. For example, if a value is a NaN, the caller could request to continue the computation using the caller-supplied value instead.&lt;p&gt;In practical terms, this system, while very impressive, it isn&amp;#x27;t widely understood or used in CL.&lt;p&gt;It&amp;#x27;s one of the very few things I miss after I moved from CL to Clojure. Rich Hickey wrote that he did consider it, but it was a lot of complexity for fairly little gain (all platforms where Clojure is hosted support thrown exceptions only), which I would agree with.</text></comment>
<story><title>The Common Lisp Condition System – Upcoming Book</title><url>https://www.apress.com/us/book/9781484261330</url></story><parent_chain><item><author>drcode</author><text>For those unaware, Common Lisp exception handling is heads and shoulders above almost any other programming language: Imagine having your program crash in the middle of a function, being able to inspect the call stack to find the bug, fixing it, then completing the function call from the middle of the function, at the exact point where the exception happened, with the fix in place.</text></item></parent_chain><comment><author>phoe-krk</author><text>Additionally, one of the most tasty facts about it is that the Common Lisp condition system is written in Common Lisp itself. It&amp;#x27;s literally a Lisp plugin that only needs to be integrated with the rest of the system at its end points: where the conditions are signaled and where the debugger is entered.</text></comment>