[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: guile 3 update, halloween edition
From: |
Ludovic Courtès |
Subject: |
Re: guile 3 update, halloween edition |
Date: |
Fri, 15 Nov 2019 10:03:49 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux) |
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’.