From: Juanjo
Subject: ANN: ECLS v0.1a -- new interpreter model
Date: 
Message-ID: <ab4b7d4.0105240620.6cdde0db@posting.google.com>
Dear lispers,

it's been a long time since I last posted an announcement to
comp.lang.lisp about the ECLS interpreter/compiler. Such a delay is
caused by academic reasons --I am defending my PhD next week-- and
because of a stupid memory leak that took me a long time to fix.

Since I have fixed that nasty bug, I have decided to place a new
release of ECLS in my web page
	http://matematicas.uclm.es/~jjgarcia/ecls.html

This new release represents a proof of concept that most of Common
Lisp can be implemented with a simple interpreter in less than 30
bytecodes. I am releasing this preliminary work in the hope that it
will help others. Even though it is in its infancy, the interpreter
already provides a reasonable performance.

FEATURES
========
* Supported platforms amount to three: Debian Linux >= 2.1, FreeBSD >=
4.0 with ELF and NetBSD >= 1.4 with AOUT or ELF. Unfortunately I have
lost access to both the Linux and NetBSD boxes, so I cannot release
binaries until late this summer.

* NEW INTERPRETER. Formerly, ECLS would work with code in the form of
lists, performing macroexpansion everytime each form was executed.
Right now the interpreter works with the "minimal compilation" model.
This means that ECLS now bytecompiles everything, and that macro
expansions are only performed once when an expression is bytecompiled.
The advantages are:

** The behavior of the interpreter is almost equivalent to that of the
compiler with respect to macroexpansion.
** Bytecodes occupy less space than lists. Furthermore, in a near
future the size of a bytecode will shrink from 32 bits to 16, making
ECLS even smaller.
** Function calls have become less expensive.
** The interpreter fits almost in a single file, which simplifies
development.
** The exists a disassembler.
** The whole of ECLS had to be revised to remove dependencies on the
old interpreter.
** In a near future I plan to make the bytecompiler extensible, so
that more of it is implemented in Lisp.

* New calling convention. Right now, lisp compiled functions output
its first argument, which allows for more compact calls under the x86
architecture.

* SETF has been revised. The implementation is a bit cleaner, due to
fact that no special optimizations are required in the interpreter and
everything is handled with macros.

* SYMBOL-MACROLET is supported now by both the bytecompiler and the
ordinary compiler. Formerly it was a sloooow macro built on top of the
code
walker. There are also plans to support DEFINE-SYMBOL-MACRO.

KNOWN BUGS
==========
* I thought that the LOOP implementation was more complete than it
actually is. For instance, LOOP does not support destructuring nor the
ACROSS keyword.

* It is not possible to COMPILE a function. Lambda expressions are
currently forgotten right after being transformed into bytecodes. This
will be fixed when the bytecodes design becomes frozen.

* To fix the memory leak, I had to remove some features from the
interpreter, such as direct access to local variables, GOTO
optimizations, etc. Hopefully this will be reimplemented during the
summer.

GABRIEL'S BENCHMARKS
====================
                CMUCLc     ECLSc    CLISPc    CMUCLi     ECLSi   
CLISPi
boyer            0.140    17.580     0.650    28.083     0.506    
3.523
browse           0.280    17.480     *****     9.050     0.544    
4.308
ctak             0.000     1.950     0.033     1.067     0.045    
0.571
dderiv           0.080     2.490     0.167     1.450     0.120    
0.583
deriv            0.080     2.190     0.167     1.267     0.117    
0.535
destru-mod       0.013     3.253     0.038     1.125     0.069    
1.886
destru           0.010     3.265     0.046     1.133     0.073    
1.888
div2             0.030     5.190     0.133     2.233     0.110    
1.221
fprint           0.020     0.020     0.071     0.071     0.029    
0.029
fread            0.007     0.007     0.021     0.021     0.011    
0.011
frpoly           0.250    18.760     5.733    22.567     0.770    
4.381
puzzle           0.030    19.860     0.050     6.100     0.699    
8.808
puzzle-mod       0.050    19.850     0.050     6.117     0.699    
9.370
puzzle-mod2      0.040    19.570     0.050     6.133     0.699    
8.839
stak             0.010     2.402     0.025     0.962     0.067    
0.529
tak              0.030    14.480     0.050    10.350     0.292    
4.621
tak-mod          0.040    14.530     0.050    10.433     0.292    
4.645
takl             0.020    11.830     0.017     7.133     0.146    
2.052
takr             0.005     2.195     0.008     1.058     0.037    
0.469
tprint           0.025     0.025     0.071     0.075     0.026    
0.027
traverse         0.320   141.180     1.100    79.650     2.434   
54.408
triang-mod       4.570   330.470     2.267   188.883    10.761  
107.180
triang           *****   312.160     0.967   169.883     8.336   
99.293
IMPLi = Implementation IMPL interpreted
IMPLc = Implementation IMPL compiled

CLISP = CLISP 1999-07-22 (July 1999)
CMUCL = CMUCL Common Lisp 18c
ECLS = ECLS 0.1a
From: Lyn A Headley
Subject: Re: ANN: ECLS v0.1a -- new interpreter model
Date: 
Message-ID: <71de7e29.0105250443.a1e83ad@posting.google.com>
····@arrakis.es (Juanjo) wrote in message news:<···························@posting.google.com>...

> 
> FEATURES
> ========
> * Supported platforms amount to three: Debian Linux >= 2.1, FreeBSD >=
> 4.0 with ELF and NetBSD >= 1.4 with AOUT or ELF. Unfortunately I have
> lost access to both the Linux and NetBSD boxes, so I cannot release
> binaries until late this summer.
> 

Just a quick note to say that I got it to build on Redhat 6.1 too.
nice work!

-Lyn