ECL combines a bytecodes compiler/interpreter and a translator to C. The first one is specially suited for prototyping and debugging. The second one produces fast code that can be dynamically loaded into the interpreter or statically linked to build standalone executables.
ECL is distributed under the GNU Library General Public License (GNU LGPL).
ECL is not a brand new product. It has evolved from the EcoLisp implementation by Giuseppe Attardi which in turn was based on the Kyoto Common-Lisp implementation done by Taiichi Yuasa and Masami Hagiya, with contributions from several people. Nevertheless the program has been seriously modified and the current code base bears little resemblance to the previous implementations and the author of those implementations should not be blamed for the faults of ECL.
I have received several questions concerning why I work on ECL instead of improving GCL. The main reason for this is the simplicity of the code base. The EcoLisp implementation on which ECL is based already was Cltl2 compliant. It had low level support for CLOS, a LOOP package, DEFPACKAGE and the code in general was much more readable and easier to maintain. It would be a huge task to get all these improvements back and the code I put into ECL back into GCL.
ECL is released under the LGPL or GNU Library General Public Licence (See Copyright). This means that ECL can be used in commercial projects while keeping the implementation free.
ECL is already rather standards compliant. ECL was born as a fork from the ECL (Eco-Common-Lisp by Giusepe Attardi) which conformed to Cltl2 ("Common-Lisp the Language 2"), but which was shipped with some ANSI compatibility extensions. Currently the worst parts with respect to ANSI are the LOOP package and parts of CLOS.
ECL is made of a runtime library and an interpreter. The interpreter itself is small, at most three files of C code. Once the lisp environment is booted, it takes about 1Mb of code (although currently it is a bit more due to debuggin issues in the interpreter). If the whole of ECL is compiled from lisp to C, the resulting program is 1.5Mb. Nevertheless, there is room for improvement in this area.
ECL is shipped as a library that can be linked against arbitrary C programs. Arbitrary C/C++ code can be linked against ECL, either statically or at runtime.
ECL is currently supported in
ECL can translate lisp code to C code that can be dynamically loaded or linked to the runtime to produce a standalone executable. Currently this process relies on GCC as a target platform, but work is in progress to remove GCC dependencies.
As of this release the ECL fully relies on the Boehm-Weiser Garbage Collector. This increases the memory requirements of ECL with respect to the old garbage collector, but the whole environment results faster and more robust.
ECL currently can inline all operations that involve fixnums, characters and floating point numbers. However, the type inferencer is not very powerful and therefore some operations are not inlined because the compiler cannot actually tell the types of the arguments and of the output.