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
····@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