[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: The variables +, -, *, and /
> From: Tim McNerney <TIM@MIT-MC.ARPA>
> Subject: The variables +, -, *, and /
>
> It seems unfortunate that the variables +, -, *, and / were reserved
> for use by the Top-Level Loop. This choice of names makes it difficult
> to build the run-time environment for Scheme-like language that
> compiles into Common Lisp and that supports the illusion that there are
> no separate function and value cells. If these variables had not been
> reserved, one could
>
> (DEFCONSTANT + #'+)
> (DEFCONSTANT * #'*)
> etc...
>
> so that
>
> ((IF SUM? + *) X Y)
>
> could be simply compiled into
>
> (FUNCALL (IF SUM? + *) X Y)
Perhaps these symbols aren't the real problem: CL compilers tend to
have built-in knowledge about certain special forms that a user can't
easily modify. So if you're really scheming up a language with
different semantics for the functional position of a form, you'll
probably have to write new top-level loops for both compiler and
interpreter which preprocess all top-level forms appropriately. Your
top-level interpreter loop would probably have a reentrant top-level
unwind-protect so the user doesn't ever fall out into the CL one, even
during error recovery. Thus, the CLtL top-level loop won't be around
to mess with +, ++, etc.