mirror of
https://gitlab.com/embeddable-common-lisp/ecl.git
synced 2026-01-14 05:12:38 -08:00
193 lines
6.4 KiB
Text
193 lines
6.4 KiB
Text
* Announcement of ECL
|
|
|
|
ECL stands for Embeddable Common-Lisp. The ECL project aims to
|
|
produce an implementation of the Common-Lisp language which complies
|
|
to the ANSI X3J13 definition of the language.
|
|
|
|
The term embeddable refers to the fact that ECL includes a lisp to C
|
|
compiler, which produces libraries (static or dynamic) that can be
|
|
called from C programs. Furthermore, ECL can produce standalone
|
|
executables from your lisp code and can itself be linked to your
|
|
programs as a shared library.
|
|
|
|
ECL supports the operating systems Linux, FreeBSD, NetBSD, OpenBSD,
|
|
Solaris (at least v. 9), Microsoft Windows and OSX, running on top of
|
|
the Intel, Sparc, Alpha, ARM and PowerPC processors. Porting to other
|
|
architectures should be rather easy.
|
|
|
|
* Known issues
|
|
|
|
- In Windows ECL comes with bytecodes compiler by default, because C
|
|
compilers are normally not available. Unfortunately several libraries
|
|
out there are not prepared for this. If you plan to use quicklisp
|
|
and have a C compiler accessible to ECL, you may use
|
|
(ext:install-c-compiler) to switch back to the Lisp-to-C compiler.
|
|
|
|
* Pending changes since 15.3.7
|
|
** API changes
|
|
|
|
- There is no UFFI nickname for FFI package - we piggyback on
|
|
cffi-uffi-compat for UFFI dependent systems (our UFFI wasn't version
|
|
2.0 compatible and there were problems with ADSF dependencies on
|
|
UFFI - it wasn't a system)
|
|
|
|
- CLOS has the new nickname "MOP"
|
|
|
|
- The new ext:run-program :error argument can automatically create a
|
|
separate stream if provided with the :stream keyword.
|
|
The external-process structure also has a new field to hold that
|
|
stream.
|
|
|
|
- ext:run-program accepts new arguments - :if-input-does-not-exist,
|
|
:if-error-exists and :external-format
|
|
|
|
- ext:system no longer binds *standard-input* and *standard-output* and
|
|
now ignores input and output (use ext:run-program for more control)
|
|
|
|
- methods can be specialized on both single-float and double-float
|
|
(built-in classes were added for them)
|
|
|
|
- LET/FLET/LABELS will signal error if parameter of the same name will
|
|
appear multiple times
|
|
|
|
- lambda lists with repeated required parameter name are considered
|
|
invalid
|
|
|
|
- deprecated configure options "--with-system-boehm=x" and
|
|
"--enable-slow-config" removed
|
|
|
|
** Enhancements:
|
|
|
|
- Verification if manual is up-to-date, providing corrections for
|
|
outdated parts
|
|
|
|
- Documentation is now included in the main repository under the
|
|
toplevel directory `doc'
|
|
|
|
- Update libffi to version 3.2.1
|
|
|
|
- Update asdf to version 3.1.5.4
|
|
|
|
- Update Boehm-Demers-Weiser garbage collector to version 7.4.2
|
|
|
|
- Pathname string-parts internal representation is now character, not
|
|
base-char
|
|
|
|
- Dead code removal, tabulators were replaced by spaces
|
|
|
|
- Better quality of generated code (explicit casting when necessary)
|
|
|
|
** Issues fixed:
|
|
|
|
- Various fixes of bogus declarations
|
|
|
|
- Remove deprecated GC calls
|
|
|
|
- ROTATEF, SHIFTF, PSETF reworked to conform to the ANSI standard.
|
|
Places were handled improperly in regard of multiple values.
|
|
|
|
- Improved unicode support in character handling
|
|
|
|
- Format handles floats and exponentials correctly (major format rework)
|
|
|
|
- Stack limits refinements and cleanup, inconsistency and bug fixes
|
|
|
|
- Duplicate large block deallocation with GMP 6.0.0a fixed
|
|
|
|
- ECL builds on OpenBSD with threads enabled
|
|
|
|
- Closures put in mapcar work as expected in both compiled and
|
|
interpreted code
|
|
|
|
- Improved readtable-case handling (:invert and character literals now
|
|
conform)
|
|
|
|
- Library initialization functions have unique names - no risk of
|
|
clashing symbol names in object files
|
|
|
|
- Format float bug fixed, when width and fdigits were not set, but k
|
|
was
|
|
|
|
- `logical-pathname-translations' now throws an error if logical
|
|
pathname wasn't defined yet, to conform with ANSI (it used to return
|
|
NIL)
|
|
|
|
- Wildcards in logical pathname translations are replaced correctly
|
|
|
|
- Regression testing framework and unit tests cleanup
|
|
|
|
- deftype ANSI conformity fix (deftype accepts macro labda-lists)
|
|
|
|
- Other minor tweaks
|
|
|
|
* 15.3.7 changes since 15.2.21
|
|
** Issues fixed:
|
|
|
|
- DEFUN functions not defined as toplevel forms were also directly
|
|
referenced by other code in the same file.
|
|
|
|
- STABLE-SORT works as desired (bogus optimization for strings
|
|
fixed).
|
|
|
|
- broken --with-sse=yes configure flag works once again.
|
|
|
|
** Enhancements:
|
|
|
|
- autoconf scripts are rewritten to support version 2.69 stack.
|
|
|
|
- stack direction is now correctly determined, fixing gcc 5.x builds.
|
|
|
|
- compilation of ECL under MSVC (2008/2010/2012) even with custom
|
|
code pages.
|
|
|
|
- In compiled code it is possible to declare variables to have a C
|
|
type such as in (declare (:double a)) and then the variable is
|
|
enforced to be unboxed to such type.
|
|
|
|
- New form FFI:C-PROGN used to interleave C statements with lisp
|
|
code, where the lisp code may refer to any number of
|
|
variables. Example:
|
|
#+BEGIN_SRC lisp
|
|
(lambda (i)
|
|
(let* ((limit i)
|
|
(iterator 0))
|
|
(declare (:int limit iterator))
|
|
(ffi:c-progn (limit iterator)
|
|
"for (#1 = 0; #1 < #0; #1++) {"
|
|
(print iterator)
|
|
"}")))
|
|
#+END_SRC
|
|
|
|
* 15.2.21 changes since 13.5.1
|
|
|
|
- Features coverity scan model, ffi-unload-module implementation,
|
|
probably more.
|
|
|
|
- Build system enhancements, parallel builds, fixes,
|
|
simplifications, cleanups, maintenance. minor cleanup,
|
|
maintenance.
|
|
|
|
- Numerous fixes.
|
|
|
|
* Changes since 12.7.1
|
|
|
|
Some highlights of this release are:
|
|
|
|
- ECL now ships with the whole of the Unicode names database,
|
|
optimally compressed using constant C tables. This means ECL now
|
|
recognizes all valid Unicode (and ASCII) names for the whole range
|
|
of characters, and can print them as well.
|
|
|
|
- ECL has changed the way it stores compiled data in the C files, so
|
|
that it works around the limit of 65k characters per string.
|
|
|
|
- ECL now builds with Microsoft Visual Studio C++ 2012.
|
|
|
|
- We bend the knee and accepted WHILE/IF statements intertwined with
|
|
FOR/AS, though this is still not valid ANSI Common Lisp.
|
|
|
|
* Settings
|
|
;;; Local Variables: ***
|
|
;;; mode:org ***
|
|
;;; fill-column:75 ***
|
|
;;; End: ***
|