From: Juan Jose Garcia Ripoll <worm@ar...> - 2001-07-31 20:13:15
Announcement of ECLS v0.3
ECLS stands for Embeddable Common-Lisp "Spain", and I usually read it
as "e-klos". It is a an implementation of the Common-Lisp language
which aims to comply to the ANSI X3J13 definition of the language.
ECLS is currently hosted at SourceForge. The home page of the project
is http://ecls.sourceforge.net, and in it you will find source code
releases, a CVS tree and an up to date documentation.
Notes about ECLS 0.3
This release represents a major improvement over previous ones in
- All special forms are implemented both in the compiler and in the
interpreter. Handling of toplevel forms has been thoroughly fixed.
- Loading of native code is handled with the "dlopen" routine, which
means that ECLS should be easier to port. As usual, this may imply
bugs which have not yet been discovered.
Changes in ECLS 0.3
* Errors fixed:
- The dynamic linker in eval.d (link_call) truncated addresses
larger than MOST_POSITIVE_FIXNUM.
- The routine that outputs addresses as hexadecimal numbers, and
which is used in print-unreadable, would only output the first
- Make sure that the proclamations in Gabriel's benchmark are
evaluated at compile time, too.
- Fix the native compiler and the bytecodes compiler so that when
they finds LOCALLY, MACROLET or SYMBOL-MACROLET at the top level,
it processes their bodies as top level forms as well. For
instance, this now works:
(LOCALLY (EVAL-WHEN (:COMPILE-TOPLEVEL) (PRINT "HELLO")))
* Add name mangling to ECLS:
- In the preprocessed files (*.d) @package::symbol can be used to
refer to a lisp function, while @'package::symbol can be used to
refer to a lisp symbol. The preprocessor translates these names
into valid C names.
- Function SI::MANGLE-NAME returns the C name for a lisp symbol
or function, and tells whether that symbol has been defined as
external C function already.
- A new proclamation
(proclaim '(si::c-export-fname union))
advises the lisp->C translator to produce a C function with
mangle named (clLunion in this case), that can be directly called
from other translated files and from user written code.
* Visible changes and ANSI compatibility:
- Remove variable si::*system-directory* and use logical hostname
- Remove *EVALHOOK*, *APPLYHOOK*, #'EVALHOOK and #'APPLYHOOK, which
make little sense when working in a early compilation environment.
- Stepper removed until we figure out how to implement this using
- The library function eval() now accepts an environment as a third
parameter. On top of this function, SI:EVAL-WITH-ENV, evaluates
a form on a given environment.
- New accessor ROW-MAJOR-AREF.
* System design and portability:
- Code has been revised so that it works in environments where stack
grows upwards, as well as in environments where the parameters to
a function cannot be accessed as an array and only va_list/va_arg
- Implement loading of object files using the native "dlopen"
function which is present in most operating systems. Support for
"dld" has been dropped and the whole of the CRS library has been
- Remove use of alloca() when printing circular structures. In a