Embeddable Common-Lisp Changelog

What's new in Embeddable Common-Lisp 15.3.7

Mar 10, 2015
  • My deep apologies to all Windows users for misfortunate unicode character at top screen, which caused an exception at the very start of ECL startup. Version 15.2.21 was released little prematurely. Proper fix is released a week after problem was noticed, because we did want to test it first, and to fix a few regressions between 13.5.1 and 15.2.21.
  • This release is at least as good as 15.2.21.
  • Enchantments include:
  • ECL now builds easily with Visual Studio 2012, including builds with custom codepages,
  • Autoconf scripts are upgraded to version 2.69,
  • Fixed stack direction, so builds against upcoming gcc 5.0 should work,
  • Broken --with-sse=yes configure flag works once again,
  • Fixed stable-sort bug (corner case on sorting strings).

New in Embeddable Common-Lisp 15.2.21 (Feb 23, 2015)

  • New release, which is mainly current state of git HEAD (plus a few fixes). Contains numerous bug-fixes in comparison to 13.5.1 and is last, which follows date-based version convention. It's time to finally release ECL 1.0 ;-).
  • Development moves to gitorious (https://gitorious.org/embeddable-common-lisp), same as wiki (previous content is inaccessible now, but once subscription is renewed, I'll start to migrate content from there). In GIT topic - current permissions will be preserved. Just drop me a line with gitorious login, and I'll add person on corresponding permission level to project.
  • Mailing list and website are staying at SF for now, but I'd really like to switch the latter to something more manageable. Also, SF have lately problems with stability, what is quite annoying.
  • More on maintainer topic:
  • My name is Daniel KochmaƄski (you may meet me on IRC and over internet under the nick "jackdaniel") and I'm willing to spare at least a few hours a week for this amazing project to keep it alive. More on progress ideas and myself might be found on mailing list archive - I ask for comments, suggestions and discussion (and forgiveness for some potential dumb ideas I might propose), to develop them better. Also, I do ask for help.
  • While I will try to set up Linux/Unix environment to check builds and try to fix problems on various operating systems (I'm thinking about putting vagrant in use), I have no access to neither Windows or OSX environments, so I will have no clue, if any commit will break builds on these. Testers for these platforms are crucial imo.

New in Embeddable Common-Lisp 13.5.1 (May 29, 2013)

  • Visible changes:
  • ECL now reports #+UNIX for all compatible systems, including *BSD ones.
  • Compiler fixes:
  • Minor readability improvements in the C code.
  • MULTIPLE-VALUE-BIND compiles using MULTIPLE-VALUE-SETQ and now both are
  • better optimized, generating simpler C code.
  • The type checking routine for LOGAND was producing spurious warnings.
  • (LDB (BYTE ...) ...) no longer conses a BYTE object.
  • Added optimizations for MASK-FIELD, DPB, DEPOSIT-FIELD, LDB-TEST and LDB.
  • CONSTANT-VALUE-P and friends now use the (compiler) environment.
  • No optional type check generated for constant values.
  • Declare the temporary variables in DEFMACRO/DESTRUCTURING-BIND as IGNORABLE
  • ECL now accepts WHILE/IF before FOR/AS, a construct that is not ANSI
  • An example: (LOOP FOR I IN LIST WHILE (SOME-TEST I) FOR X = (F I) ... )
  • Common Lisp fixes:
  • CONSTANTP now performs a bit more work, macroexpanding forms.
  • ENSURE-DIRECTORIES-EXIST ignores the host and device from the original
  • pathname when creating the directories.
  • In FORMAT, printing of floating point numbers could lead to an infinite loop.
  • ROUND, FLOOR, CEILING and TRUNCATE have been reorganized and work faster with
  • rational numbers.
  • (CONCATENATE 'SIMPLE-BASE-STRING ...) returned an ordinary string.
  • MAKE-ARRAY did not terminate strings with #\Null (needed internally by the C
  • code).
  • (SETF DOCUMENTATION) did not operate on functions because the function object
  • documentation had precedence over the annotation.
  • Added the whole Unicode character database to the C library. This means ECL
  • can now interpret all Unicode character names properly, and print them as
  • well. ECL now also recognizes all ASCII control-character abbreviations
  • Print integers using upcase letters for radix > 10
  • New functions RATIOP, {SINGLE,SHORT,DOUBLE,LONG}-FLOAT-P help avoid consing
  • in TYPEP
  • HASH-TABLE-COUNT did not work with weak hashes: it did not update the count
  • of live cells (Note, however, that this function is by definition not
  • reliable, just a hint, since a garbage collection may happen while the count
  • is being computed)
  • ECL no longer uses :READ-ONLY declarations in the SETF expansions because
  • there is code out there that modifies the values variables.
  • PROGV can now 'unbind' variables when the list of variables is longer than
  • the list of values.
  • CLOS:
  • Added built in classes FIXNUM and BIGNUM.
  • Eliminated code for accessing slots that was no longer used. Removed also
  • redundant code.
  • Updating a class (due to a change in metaclass) now forces updating its
  • children
  • UPDATE-INSTANCE-FOR-REDEFINED-CLASS received an alist instead of a
  • propertly-list as last argument
  • PRINT-OBJECT did not have a working default for built in classes.
  • Extensions:
  • SYSTEM must use the POSIX shell, which usually lives in /bin/sh.
  • CLX now uses recursive locks.
  • ASDF upgraded to version 2.32, including the ASDF-BUNDLE facility, which
  • supersedes ECL's own implementation of precompiled libraries.
  • MAKE-INSTANCE, SHARED-INITIALIZE, REINITIALIZE-INSTANCE now work on
  • structures as well.

New in Embeddable Common-Lisp 10.4.1 (Apr 6, 2010)

  • * Bugs fixed:
  • Fixed offset problems in READ/WRITE-SEQUENCE.
  • In multithreaded ECL, the signal servicing thread was not created due to
  • a stale debug statement.
  • The tool 'ecl-config' contained unsubstituted values, such as @LDRPATH@
  • because these variablesls had been renamed in the autoconf file.
  • The reimplementation of DIRECTORY introduced a bug in pathnames with ending
  • double wildcars, such as "/foo/**/".
  • EXT:SAFE-EVAL (or cl_safe_eval in C) would attempt to start the debugger
  • when an error was signaled.
  • The logical hostname EXT: did not have a pathname translation relative to
  • that of SRC:
  • After loading the compiler, the COMMON-LISP package was left unlocked
  • against changes.
  • ECL can build again itself using a C++ compiler (--with-cxx thus works).
  • ecl_make_file_stream_from_fd() did not set the right mode in the stream
  • structure.
  • ECL did not understand type declarations that involved symbol macros.
  • (SETF STREAM-EXTERNAL-FORMAT) inserted the wrong format type in some cases.
  • * Visible changes:
  • The source location annotator records the original pathnames instead of
  • truenames. This allows Slime to find out the ECL sources even if they
  • have been moved.
  • The signal servicing thread now carries the name SI:SIGNAL-SERVICING, which
  • is different from the name of the threads that are created to actually
  • handle those signals. Users should avoid killing SI:SIGNAL-SERVICING.
  • FFI:CLINES admits the notation @lisp-object, just like FFI:C-INLINE. The
  • result is that @lisp-object gets replaced with a pointer to the given
  • lisp object, created at run time.
  • Gray streams implement a new generic function, GRAY:STREAM-FILE-DESCRIPTOR
  • which is used by SERVE-EVENT to gather the C file descriptor or Windows
  • handle used to wait on input from the device.
  • ECL restores the habit of installing manual pages for ecl and ecl-config.
  • We have removed the obsolete versions of the documentation files. The
  • up to date documentation now lives in a separate source repository,
  • as explained in http://ecls.sourceforge.net/download.html
  • The encoding :DEFAULT implies looking up in the special variable
  • EXT:*DEFAULT-EXTERNAL-FORMAT* the actual value of the encoding, which may be
  • a known one, or :pass-through.
  • LOAD now accepts the keyword argument :EXTERNAL-FORMAT
  • * ASDF:
  • ECL's contributed modules and ECL's compiler can now be used in standalone
  • programs, for they are now stored both in FASL form and as statically linked
  • libraries.
  • ASDF:MAKE-BUILD takes a new keyword argument, :MOVE-HERE, that allows moving
  • the files that ASDF creates to the current directory. :MOVE-HERE can be the
  • boolean value T, in which case the files are output at ./asdf-output/ or a
  • pathname designator with the actual destination.
  • ASDF:MAKE-BUILD admits a new type, :BINARY, which creates a standalone
  • system (*.asd) accompanied by two binary files, statically linked library
  • (.a or .lib), and a FASL (*.fasb). This can be used, to replace existing
  • systems with precompiled ones.

New in Embeddable Common-Lisp 9.10.2 (Nov 2, 2009)

  • Bugs fixed:
  • Fixed typo in src/c/unixint.d that affected single-threaded builds
  • The GMP library did not build in OS X Snow Leopard in 64-bits mode.
  • The package MP is needed also in single-threaded versions (for fake
  • mp:with-lock, which is used in CLX).
  • In CLX, there were a couple of typos in the code related to locks and ECL.
  • These typos only revealed in multithreaded builds of the CLX library.
  • In Linux there is a problem with handlers for SIGFPE being totally ignored
  • by the system. The problem seems to be solved by avoiding the use of
  • feenableexcept() and restricting to C99 exception tests. That is bad because
  • we can not reliably and cheaply detect underflow exceptions.
  • Under OS X, --enable-rpath works again. It was broken for about a year
  • due to my misunderstanding of how -install_name works and the differences
  • between that and -rpath.

New in Embeddable Common-Lisp 9.8.4 (Sep 21, 2009)

  • Bugs fixed:
  • si_{set,get}_finalizer were not exported from ecl.dll and thus the library
  • TRIVIAL-GARBAGE failed to build in Windows
  • The MSVC port did not define @ECL_LDRPATH@ and failed to build ecl.dll
  • The sequence functions did not understand the newest specialized array types.
  • Visible changes:
  • The configuration flag --with-__thread now defaults to NO because many
  • platforms do not support it and GCC does not complain, making reliable
  • detection impossible.
  • For further compatibility with SBCL, ECL now supports two additional
  • buffer types :FULL and :LINE which are compatible with :FULLY-BUFFERED
  • and :LINE-BUFFERED (Thanks to Matthew Mondor)
  • The sockets library can now be loaded using either (REQUIRE 'SOCKETS)
  • or (REQUIRE 'SB-BSD-SOCKETS).

New in Embeddable Common-Lisp 9.4.1 (Apr 8, 2009)

  • Bugs fixed:
  • Symbol NIL was not exported from the GRAY package.
  • GRAY:STREAM-PEEK-CHAR was not used at all by ECL.
  • Changes:
  • Streams:
  • ECL has now a new and more easily extensible implementation of streams, based
  • on C structures with a method dispatch table. Apart from code reuse and better
  • maintainability, this allows a more sensible design of read/write-sequence.
  • *STANDARD-INPUT*, *{STANDARD,ERROR,TRACE}-OUTPUT* are no longer synonyms to
  • *TERMINAL-IO* but directly the input or output streams associated to stdin,
  • stdout and stderr.
  • Internally, ECL allows to work with POSIX file descriptors directly, without
  • using C streams.
  • POSIX files and C streams now support different external formats. ECL
  • understands right now :UTF-8, :UCS-2 (bigendian), :UCS-4 (bigendian),
  • :LATIN-1 and :ISO-8859-1. If built _without_ support for Unicode, only the
  • last two are available.
  • Readtables now include entries for extended characters.
  • When a string is read, if the characters are base-char, the string is read
  • as a base-string.
  • ECL supports external formats. They may be a symbol, denoting the encoding
  • or an encoding option, an association table between bytes and unicode codes
  • or a list of these. Some valid symbols are :DEFAULT, :LATIN-1, :ISO-8859-1,
  • :UTF-8, :UCS-{2,4}{,BE,LE}, :US-ASCII :CR, :LF, :CRLF, :BIG-ENDIAN and
  • :LITTLE-ENDIAN.
  • The external format options :BIG-ENDIAN or :LITTLE-ENDIAN also affect the
  • behavior of READ-BYTE and WRITE-BYTE. Default value is :BIG-ENDIAN.
  • The interpretation of newline characters defaults to CRLF in Windows and
  • LF elsewhere.
  • ECL accepts :UNSPECIFIC as a valid pathname type component.
  • Bugs fixed:
  • (FLOOR X X), (CEILING X X), etc, might return a second value which is a
  • signed zero if X is a float with a negative sign.
  • (SXHASH -0.0) != (SXHASH 0.0)
  • (UNREAD-CHAR c) did not decrease the file position accordingly.
  • FILE-STRING-LENGTH only works with file streams, for which it returns
  • the right value, and with Gray streams, which output NIL.
  • When ECL is built with --enable-unicode, it uses its own database for
  • Unicode properties instead of tolower, toupper, etc (Based on code
  • from SBCL)
  • A bug in the binary file loaded prevented loading a recompiled file.
  • READ-DELIMITED-LIST interpreted the value of :RECURSIVEP the wrong way.
  • A trivial bug in the compiler prevented ECL from considering many
  • unsafe inlined forms for AREF, (SETF AREF) and many other functions.
  • A bug in the bytecodes compiler prevented ECL's debugger from inspecting the
  • stack when there were local functions.
  • Fixed problems with C/C++ forward declarations of static arrays in compiled
  • code that prevented ECL from building with a C++ compiler.
  • The CLX module now adds itself to *MODULES* and also requires SOCKETS
  • automatically on startup.
  • AMOP:
  • In DEFCLASS, the :TYPE of slots was ignored.
  • ECL now sets the proper value for the SLOT-DEFINITION-INITFUNCTION and
  • SLOT-DEFINITION-INITFORM of each effective and direct slot definition.
  • The canonicalized default arguments list now contains functions instead
  • of the forms to be evaluated.
  • With null safety settings, the slot accessors for structures with
  • specialized vector types were not properly compiled.
  • DEFSTRUCT :INCLUDE did not work with read only slots.
  • EXT:SETENV now ensures that strings are null terminated.
  • For high safety settings, ECL produces a CHECK-TYPE for each declaration
  • at the beginning of a function. If the declaration has a function type,
  • these checks were wrong, for TYPEP cannot take an arbitrary function type
  • as argument.
  • Visible changes:
  • New function (EXT:HEAP-SIZE &optional NEW-MAX-HEAP-SIZE) can change the
  • memory limits.
  • LOG does not overflow on bignums (LOG (ASH 1 128) 2) => 128
  • Instead of internally using the format (ARRAY T), Unicode strings are
  • now stored using an (ARRAY (SIGNED-BYTE 32)). This saves memory on
  • systems with 64-bit pointers.
  • Faster calling conventions for function objects, generic functions, symbols
  • and interpreted bytecodes, reduce time by 50% in best cases.
  • New, more efficient bytecodes for parsing the function lambda list, instead
  • of using a common function.
  • ECL provides macros that define specialized integer types (ecl_uint8_t,
  • ecl_int32_t, ... up to ecl_int64_t). These macros can be used to check for
  • support of these specialized types in arrays and in compilers. There are
  • also companion functions or macros, ecl_make_[u]int*_t and ecl_to_[u]int*_t
  • that respectively convert to and from Lisp integers.
  • New specialized array types for signed and unsigned integers with 8, 16, 32
  • and 64 bits. They depend on the existence of the ecl_[u]int*_t macros
  • mentioned before.
  • Two new constants, a C macro ECL_VERSION_NUMBER, and Lisp constant
  • EXT:+ECL-VERSION-NUMBER+, allow determining the version of ECL with
  • a greater granurality. The constant is a decimal number, yymmaa,
  • matching the ECL versioning scheme.
  • The function EXT:EVAL-WITH-ENV can be used to bytecompile a lisp form for
  • later evaluation. The bytecompiled form is compiled like a toplevel form,
  • so that EVAL-WHEN understands :COMPILE-TOPLEVEL and :LOAD-TOPLEVEL
  • funcall (si::eval-with-env '(cos 1.0) nil nil nil nil))
  • This new feature is used by the module BYTECMP to implement a bytecodes
  • compiler that does not need the C compiler to be around.