Hello Andy & all! Thanks for the great summary.
I’ve taken a look at ‘wip-exceptions’, which is also remarkably easy to follow because all the changes are incremental and follow the path you explained in your message; thanks a lot for making it this clear! I’ve very much support this change, I always found the key+args convention to be poor compared to structured error condition objects. The changes in ‘wip-exceptions’ all make sense to me; some random comments below. 0. Do I get it right that ‘throw’ and ‘catch’ are not “deprecated” in the sense of (ice-9 deprecated) and are instead simply not the “preferred” exception mechanism? At least, that’s how I would view it :-), because ‘throw’ cannot (yet) disappear from C code, and because it’s a migration that could take more than two stable series to really complete. 1. I see things like: +(define (make-condition type . field+value) + "Return a new condition of type TYPE with fields initialized as specified +by FIELD+VALUE, a sequence of field names (symbols) and values." + (unless (exception-type? type) + (scm-error 'wrong-type-arg "make-condition" "Not a condition type: ~S" + (list type) #f)) and: + (unless (symbol? key) + (throw 'wrong-type-arg "throw" "Wrong type argument in position ~a: ~a" + (list 1 key) (list key))) I guess we could add a specific ‘&type-exception’ exception or similar, which would allow us to improve error reporting (that can come later, of course.) Guix has ‘&location’ error conditions, which I’ve found useful when combined with other error conditions in cases where location info from the stack isn’t useful: https://git.savannah.gnu.org/cgit/guix.git/tree/guix/utils.scm#n832 I wonder if (ice-9 exceptions) should provide something like that. 2. What are you thoughts regarding exposing structured exceptions to C? I’ve always been frustrated by ‘system-error’ :-). Guix has a hack to augment ‘system-error’ with information about the offending file name: https://git.savannah.gnu.org/cgit/guix.git/tree/guix/ui.scm#n520 If the POSIX bindings would emit a structured ‘&system-error’ record, that’d be pretty cool. 3. I wonder if we could take advantage of the new ‘&message’ exception to start i18n of error messages. It might be as simple as telling xgettext to recognize ‘make-exception-with-message’ as a keyword, though currently there are few calls to ‘make-exception-with-message’ followed by a literal. 4. Is ‘&warning’ actually used? Is the goal to make it continuable? That sounds great. Bah, you give us a present and I reply with an additional wishlist. ;-) Anyway, ‘wip-exceptions’ looks great to me as it is, so I’m all for merging it to ‘master’. Thanks a lot! Ludo’.