[Ecls-list] Latest changes
Juan Jose Garcia-Ripoll
lisp at arrakis.es
Sat Jun 17 16:33:23 UTC 2006
These are the changes in CVS in the last weeks.
- The second value of MACROEXPAND-1 is true whenever a macroexpansion
happened; in other words, whenever an macro function was called. MACROEXPAND
additionally checks whether the macroexpanded form is eq to the
original one and complains of the infinite loop that results.
- Configuration flag --with-tcp defaults to true.
- [Win32] Add a :SYSTEM key argument to C::BUILDER, used when
building a program,
to specify the type of executable. Possible values are :CONSOLE, to build a
console program, and :WINDOWS, to build a Windows program. The
second case makes
only sense when the program contains some GUI (M. Goffioul).
- The compiler is slightly faster by avoiding use of EVAL.
- APROPOS, APROPOS-LIST and EXT:HELP* are now case insensitive.
- The compiler and the interpreter now share the same environment
structure. This is important for issues like shadowing. Take the
following code:
(defmacro foo () 2)
(defmacro test (symbol &environment env)
(and (macro-function symbol env) t))
(defun doit () (flet ((foo () 1)) (test foo))))
If interpreted, DOIT is properly defined to return NIL, because the function
FOO shadows the global macro definition. If compiled, MACRO-FUNCTION was
unable to detect the shadowing definition. (B. Spilsbury)
- The functions created by MACROLET must be compiled taking into account other
enclosing MACROLET and SYMBOL-MACRO definitions. This allows one to write
something like
(defun a ()
(symbol-macro ((x 1))
(macrolet ((m () x))
(m))))
(a) => 1
This has been achieved by merging the C and bytecodes compiler environments.
We have tried to implement this questionable feaure in the safest way, so
that references to local variables, functions, blocks and tags
cause an error.
> (defun a (x)
(macrolet ((m () x))
(m)))
In a MACROLET function you tried to access a local variable, X,
from the function in which it appears.
Top level.
>>
- The garbage collector has been updated to version 6.7
More information about the ecl-devel
mailing list