From: "João Távora" <joaotavora@gmail.com>
To: Stefan Monnier <monnier@iro.umontreal.ca>
Cc: emacs-devel@gnu.org
Subject: Re: Attaching context info to an error
Date: Fri, 29 Dec 2023 17:29:26 +0000 [thread overview]
Message-ID: <CALDnm51h8P6grV7gPOu2kTXVMt1tfm5AinqHF9_xtmvcm5smBw@mail.gmail.com> (raw)
In-Reply-To: <jwv5y0h9dwk.fsf-monnier+emacs@gnu.org>
On Fri, Dec 29, 2023 at 4:54 PM Stefan Monnier <monnier@iro.umontreal.ca> wrote:
>
> >> > What object exactly goes into the handler bind handlers?
> >> The same (even `eq`) as the one passed to the `condition-case` handler.
> > Would it matter if it weren't?
>
> I think we want to preserve the identity of an error as it
> passes through its various handlers, yes.
> That makes it possible to use `eq` hash tables and to mutate them.
First, I think that's a bad idea for the reasons I explained
at length. You should "remember" errors via restarts.
Most importantly, and idea quality apart, who can be doing that
today, before h-b? No-one or practically no-one, since it's useless
because currently the only place user code has access to
the signal also unwinds the stack, and resignalling will make a new
cons. Right?
So unless there's a specific use for it today, I recommend
specifically _not_ maintaining 'eq'ness. This prevents
people from making the job to transition to a non-cons
representation of errors easier.
> > - Printing? a cl-print-object would be sufficient, I think,
> > along with a (orthogonal) directive to 'format' for using
> > cl-prin1 (why doesn't cl-princ exist?)
>
> We cannot reliably distinguish an error object from random other cons
> cells, so things like `cl-print-object` are simply not an option: the
> caller needs to tell us that this is an error object.
> We could have a `print-error-object`, OTOH.
Indeed this representation is really bothersome.
> > - Getting the type for resignalling purposes? Unfortunately,
> > this returns 'cons'
> >
> > (condition-case err (error "bla") (error (type-of err)))
> >
> > Can it be made to return error?
>
> If it's only for resignaling purposes, why not have
> `error-resignal` instead which takes the error object itself?
This has to exist indeed. Should be called "condition-resignal"
though (and the byte-compiler should warn you should use a
handler-bind instead).
> > - Can we import a typep (similar to cl-typep) that understands
> > basic types EIEIO and also error hierarchy?
>
> Nope for the reason mentioned above.
> But we could have a `error-typep`. AFAIK this kind of operation is very
> rarely used in ELisp (it's only used internally in the C code which
> looks for the appropriate handler).
Let's hope so. Skipping that then.
> > - simple-condition-format-control and
> > simple-condition-format-arguments?
>
> I can't think of any ELisp code I've encountered that does something
> related, so I think it's a YAGNI.
Hard to add with that random data bag'o'things anyway.
> BTW, the best way to find what we need is probably to change the
> `signal_or_quit` code which does the `Fcons (error_symbol, data)` and
> make it build something else than a cons instead.
True! Let's just preload EIEIO and call make-instance. Ahaha
> Then go and fix all the things that break, introducing new `error-FOO`
> abstractions along the way.
>
> > - change manual to explain that resignalling is discouraged now
> > that handler-bind exists, but if resignalling _is_ done, then
> > definitely avoid car and cdr and some form of
> >
> > (signal (error-symbol err) (error-data err)
> >
> > introducing these new functions?
>
> We first want to help people make their existing code compatible with
> other representations of error objects which minimal changes.
> Changing the code to use `error-resignal` is trivial whereas making it
> use `handler-bind` can be difficult since the semantics is subtly
> different and it's not always easy to judge whether the difference
> matters in this particular case.
Makes sense, though 100% of the cases I've seen for resignalling are
equivalent functionally to a handler-bind.
> > - go through the hierarchy and add <error-name>-<data-slot>
> > accessors?
>
> I don't think we want to do that systematically, but yes (and I'm afraid
> we'll discover along the way that the representations we use are messy
> and don't always obey the subtyping suggested by the error hierarchy).
>
> It presumably needs to come with a "similar" change on the constructor
> side, so as long as we keep using (signal ERROR-TYPE ERROR-DATA) where
> ERROR-DATA is a bare list it's not super pressing.
I've also seen 0 examples so far where the DATA is searched inside
for actual properties.
João
next prev parent reply other threads:[~2023-12-29 17:29 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-12-21 22:30 Attaching context info to an error Stefan Monnier
2023-12-22 6:50 ` Gerd Möllmann
2023-12-22 8:37 ` Gerd Möllmann
2023-12-22 15:58 ` Stefan Monnier
2023-12-28 6:57 ` Gerd Möllmann
2023-12-22 20:56 ` Jens Schmidt
2023-12-22 22:37 ` Stefan Monnier
2023-12-23 3:02 ` João Távora
2023-12-23 3:28 ` João Távora
2023-12-26 20:12 ` Stefan Monnier
2023-12-26 20:47 ` Stefan Monnier
2023-12-26 22:43 ` João Távora
2023-12-27 6:50 ` Gerd Möllmann
2023-12-27 10:29 ` João Távora
2023-12-27 10:35 ` Gerd Möllmann
2023-12-27 17:50 ` Stefan Monnier
2023-12-27 18:08 ` João Távora
2023-12-27 18:28 ` João Távora
2023-12-27 19:08 ` Stefan Monnier
2023-12-27 19:27 ` João Távora
2023-12-27 20:27 ` Stefan Monnier
2023-12-27 23:08 ` João Távora
2023-12-28 7:05 ` Stefan Monnier
2023-12-28 14:12 ` João Távora
2023-12-28 16:03 ` Stefan Monnier
2023-12-28 17:15 ` João Távora
2023-12-28 19:22 ` Stefan Monnier
2023-12-28 23:53 ` João Távora
2023-12-29 2:54 ` Stefan Monnier
2023-12-29 3:43 ` João Távora
2023-12-29 16:54 ` Stefan Monnier
2023-12-29 17:29 ` João Távora [this message]
2023-12-29 17:39 ` João Távora
2023-12-30 4:29 ` Stefan Monnier
2023-12-30 16:45 ` João Távora
2023-12-29 17:19 ` Alan Mackenzie
2023-12-29 17:24 ` João Távora
2023-12-29 17:43 ` Alan Mackenzie
2023-12-29 17:54 ` João Távora
2023-12-29 18:08 ` Alan Mackenzie
2023-12-29 18:45 ` João Távora
2023-12-29 18:35 ` Stefan Monnier
2023-12-29 18:48 ` João Távora
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=CALDnm51h8P6grV7gPOu2kTXVMt1tfm5AinqHF9_xtmvcm5smBw@mail.gmail.com \
--to=joaotavora@gmail.com \
--cc=emacs-devel@gnu.org \
--cc=monnier@iro.umontreal.ca \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.