From: Juan Jose Garcia Ripoll
Subject: ECL-Spain (new version of ECoLisp)
Date: 
Message-ID: <38AECDF7.931C59F3@ind-cr.uclm.es>
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