bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#64391: buffer narrowing slowdown regression in emacs 29


From: Gregory Heytings
Subject: bug#64391: buffer narrowing slowdown regression in emacs 29
Date: Sat, 08 Jul 2023 20:58:44 +0000


I'm sorry, I don't understand your question. The only way (except by using internal functions) to enter a labeled restriction is to use the with-restriction special form with its optional label argument.

Nitpick: it's not a special form, it's a macro. There's a *big* difference because adding a special form requires changing `macroexpand-all`, the compiler, yadayada, and it introduces backward incompatibilities with packages doing their own code-walks.


TIL. I thought that "special form" and "macro" were more or less synonyms. The manual describes lambda, prog2, setq-default, dlet, letrec, named-let, with-suppressed-warnings, with-no-warnings, with-restriction and without-restriction as "special forms", although they are in fact macros. That being said, from a Elisp programmer viewpoint, special forms and macros are similar, and AFAIU one could say that a special form is a macro written in C, and a macro is a special form written in Elisp.

Should the above occurrences of "special form" be corrected in the manuals?

Indeed, but I'd say it's clear enough from the context that "symbol" means a quoted symbol here.

Other nitpick: nil can also be quoted :-)


I knew someone would say that ;-)


BTW, "LABEL is a symbol" sends the wrong message (a quoted symbol evaluates to a symbol but it's not itself a symbol). IOW the docstring should clarify that LABEL is an expression that's evaluated at runtime (and should return a symbol). While I'm here, is it important that LABEL evaluates to a symbol? Or is it like `catch/throw` where we expect most uses to use a symbol but where any other (non-nil) value works as well?


The latter: it's like catch/throw, it's intended to use with a symbol but it could be any non-nil value. So one could write something similar to what is found in the docstring of catch: "LABEL is evalled to get the label to use, it must not be nil".






reply via email to

[Prev in Thread] Current Thread [Next in Thread]