Ar an ceathrú lá déag de mí Lúnasa, scríobh Stephen J. Turnbull:
Aidan Kehoe writes:
> 2009-08-13 Aidan Kehoe <kehoea(a)parhasard.net>
> * ilisp-snd.el:
> Transform #'values calls to #'list calls at compile time if the
> current XEmacs doesn't support true multiple values.
Wouldn't it be better to do this in the 21.4 byte-compiler? (I'm
referring to the whole sequence of package patches.)
Right, that’s what
However, Norbert’s quicker about making modified packages available than Vin
is about making modified 21.4 versions available (something which is as it
should be), and I’m more comfortable telling people who encounter the
incompatibility to install a package from the beta/experimental directory
than to wait until there’s a 21.4 release and there are new .tar.gz files
for all the affected packages.
Some of the package patches are distinct, though. They are examples where
multiple-value-bind was never conceptually correct (that is, there wasn’t a
corresponding #'values call, just one to #'list or something analogous), and
#'destructuring-bind or a non-erroring analogue is better code in those
The only code we really care about here, I think, is the code we put
the packages. Users who want to share across versions will just have to
upgrade their 21.4.
That reminds me; the multiple-values patch makes #'throw into a special
form, since it needs to examine its arguments into a way that functions
don’t (#'throw is also a special form, sorry, special operator in Common
Lisp, for the same reason.) It also has a special bytecode for throw. Now,
code compiled by 21.5 with the multiple-values patch that uses the
multiple-values functionality will refuse to run on 21.4; which is fair
enough, as far as I can see. Code that uses #'throw (that is, most code), is
also affected, though there is a separate check at the beginning of every
file; I wonder is it reasonable to add a minimal patch to 21.4 to support
the throw bytecode.
Doing this with an eval-when-compile is kind of evil, since it makes
the semantics of compiled code different from interpreted code.
Hmm? Not in a significant way; it’s just that the alias now takes effect at
compile time, not runtime, something we know worked fine in 21.5 for years.
¿Dónde estará ahora mi sobrino Yoghurtu Nghe, que tuvo que huir
precipitadamente de la aldea por culpa de la escasez de rinocerontes?
XEmacs-Patches mailing list