ECL-Spain
=========
1) What it is
----------
ECoLisp stands for Embedded Common-Lisp and it is a small and very neat
implementation which deviates slightly from Cltl1 but offers several
intereting features: threads, CLX, CLOS among others.
ECL-Spain (ECLS for short) is a fork from the ECoLisp 0.23 release.
Beginning from the very clean set of sources that Giusseppe Attardi
provides, it has been easy to fix some bugs and get a different
versions with its own aims, namely
= Small size
= Compilation via C
Both objectives were already achieved by ECoLisp, specially
the one about memory: ECL takes as little as 424kb of memory
in my Linux box, and most of it (300kb) belong to the
executable.
* Mostly ANSI C core
This release already provides functions with ANSI
prototypes. In a near future I intend to remove some GCC
specifics, such as stack allocated arrays, change the compiler
to produce ANSI C code and clarify the user interface of the
library by hiding the internal functions.
* Cltl-1 compliance
* Cltl-2 compliance
* Partial ANSI-CL compliance
Currently, ECLS passes the testsuite from CLISP-1999-01-08, which
tests for Cltl-1, with only a few exceptions (see below). I
haven't found any other set of programs to test ECLS which means
that it will take some time to inspect every function and work out
the fixes, plus a newer test suite.
* Transition from GMP-1 to GMP-2
The first step has been grouping bignum routines in a single file
and hiding most of the low level details.
* Future implementation as a DLL
That was already achieved but I am not releasing a version which
supports it until the memory management is improved, and until I find
out what to do regarding unexec and the loading of object files.
* Better garbage collection.
* No hardcoded limits for the allocatable memory.
As of this release the memory that ECLS can allocate is
restricted to 16Mb. I have tried replacing the garbage
collector with a conservative one (Boehm's GC v 4.11) and that
did fix the problems, with two inconveniences: ECLS requires
more memory and it cannot unexec (dump itself to a new
executable). Since this is really undesirable, I have been
also thinking about revamping the current garbage collector
with an interface to mmap(). Time wil tell...
* Improve the compiler: more aggressive inlining, better operations among
numbers and unboxed arrays of complex numbers.
* Porting to 64-bit environments.
2) What standards does it adhere to?
---------------------------------
As I mentioned above, the problem I am finding here is the lack of test
suites which I can use to detect failures in the behavior of any
function. Currently I can assure that the beast passes the tests from CLISP
except for
+ CLOS
+ #'format
+ #'unread-char is too lax
+ vectors can always be adjusted
+ setf doesn't work as expected: it uses property lists
+ operations on floats differ slightly from CLISP. That makes
the "number.tst" fail but doesn't seem relevant.
If you find something that should be fixed or that the behavior of a
function is particularly misleading with respect to the standards, feel free
to tell me so.
3) What platforms does it run on?
------------------------------
I am developing this program under several boxes running Linux Debian
2.1. This means that ECLS compiles and runs in any Intel-x86 machine,
with a current version of the linux kernel, a GNU C compiler and the
GLIBC-2 library.
Nevertheless I have made no changes to the machine dependent part of the
code, so I would not be surprised if ECLS ran on the same platforms as
ECoLisp.
4) Known bugs
----------
+ Threads and sockets haven't been tested yet.
+ #'format doesn't pass the Cltl-1 tests and fails when the number of
arguments is large.
+ The implementation of setf needs to be reworked.
+ The implementation of CLOS needs more work.
+ Needs better support for wildcards.
Besides
+ Support for locatives and unification is likely to be removed in the
future to allow tag-less conses (Saves a 20% memory).
5) Installing
----------
Just unpack the tar file and run
./configure --prefix=$HOME --enable-clos
make
make install
and don't care much about the warnings. This should build and dump a
fresh copy of ECL, which is then installed in the $HOME/bin directory.
5) The author
----------
For the people who built the several pieces from ECoLisp, see the README.orig
file. To contact the author of ECL-Spain, use the following address
Juan Jose Garcia Ripoll
Univ. de Castilla-La Mancha
E.T.S.I. Industriales
Departamento de Matematicas
c/Camilo Jose Cela, 3
Ciudad Real, E-13071
Spain
········@ind-cr.uclm.es
You can get a current copy of the sources at
http://est202.sub37.uclm.es/jjgarcia/ecls.tgz
Since the tests are distributed under the GPL and ECLS is under LGPL, it
could be confusing to merge both packages. Thus I have placed them on a
separate tar file which can be unpacked right on top of the other one
http://est202.sub37.uclm.es/jjgarcia/ecls-tests.tgz
Changes in the current release (ECLS-0.0)
=========================================
I cite only the most relevant ones.
* Moved most function prototypes to ANSI C.
* Added a test suite stolen from CLISP-1999-08-01
* Most of the core of the library has been recoded with ANSI C prototypes
and better error checking.
* Fixes in #'floor, #'truncate and #'ceiling to handle special cases
with bignums.
* The garbage collector has been fixed to properly relocate bignums.
* The interface to GMP has been improved.
* Added #'nth-value and *gensym-counter*
* The reader for bignums has been fixed, but there is still space for
further optimization.
* Added a separate state for streams which corresponds to closed streams.
Some predicates work on them now (For instance, coerce_to_pathname(),
#'close-stream and #'open-stream-p).
* The elements of a composite stream are not implicitely closed. That was a
serious deviation from standard.
* #'print now outputs a trailing space.
* Fixes in the type checker: #'subtype and #'typep work better now.
For instance, formerly (subtypep 'list '(or cons (member nil))) => NIL
* Fixes in the frame and invocation history stacks. They were improperly
duplicated, I think.
* Keywords and symbols are grouped in a single file. This reduces the
space overhead for startup in a few Kb and makes it easy to track the most
important symbols during garbage collection.
* #'string-trim, #'string-left-trim and #'string-right-trim formerly
hanged the system when the character-bag had some non-character
objects.
* #'nstring-upcase and #'nstring-downcase and other routines now
reject NIL as the bound designator when compiled in ANSI
compatibility mode.
* Packages have been made case sensitive. #'package-name now accepts
strings and symbols.
--
Juan Jose Garcia Ripoll www: http://est202.sub37.uclm.es/jjgarcia
Univ. Castilla-La Mancha job: ········@ind-cr.uclm.es
ETSI. Industriales home: ····@arrakis.es
Departamento de Matematicas
c/Camilo Jose Cela, 3, Ciudad Real 13071 Spain