ECL 10.3.1:<br>===========<br><br>This release has three important focuses: performance improvements in various<br>fronts (garbage collection and hash tables), extending the run-process function<br>and important fixes to let ECL work better with Slime. To quote one lisper<br>
"this feels like a real Lisp implementation now"<br><br>* Bugs fixed:<br><br> - DIRECTORY used stat() also on files that did not match the directory masks.<br><br> - The syntax for matching strings in DIRECTORY is now the same as in<br>
PATHNAME-MATCH-P. Formerly there were small differences, such as DIRECTORY<br> understanding characters #\? and #\\ and PATHNAME-MATCH-P not.<br><br> - Standalone executables do not require the existence of the ECLDIR directory<br>
to start up -- it may be required, though, for working Unicode because the<br> encodings are stored there.<br><br> - PROCESS-JOIN was exported from the wrong package.<br><br> - PROCESS-JOIN failed when invoked with a thread that was in the process of<br>
being set up.<br><br> - The output values of a process or thread are now collected in the process<br> object and returned by PROCESS-JOIN.<br><br> - ECL's interrupt servicing thread could not be shut down.<br><br>
- When compiling LET forms, ECL emitted warnings about removal of variables<br> even when they were declared IGNORABLE.<br><br> - An internal variable MP:*ALLOW-WITH-INTERRUPTS* was not declared special.<br><br> - The compiler now understands function type proclamations with &OPTIONAL<br>
values.<br><br> - The compiler now accepts THE special forms with a VALUES type.<br><br> - If file A.lsp explicitely loads B.lsp to use a package that is only defined<br> in B, then ECL signaled an error in the compiled version of A even after<br>
this one had required B.lsp.<br><br> - ECL accepts FTYPE proclamations for SETF-functions.<br><br> - On platforms where a stack overflow does not trigger a SIGSEGV, ECL was<br> unable to recover from the overflow. Now it jumps to the outermost<br>
protection frame (typically the toplevel).<br><br> - Socket streams are now two-way streams. This solves a problem with certain<br> platforms (OS X) where a C stream can not be used to read and write<br> simultaneously by two different threads.<br>
<br> - TRUENAME and PROBE-FILE were not thread safe.<br><br>* Visible changes:<br><br> - Hash tables now use hand-coded specialized loops for EQ, EQL, EQUAL, EQUALP<br> and package types, achieving a reduction of about 30% time in lookups.<br>
<br> - A new function EXT:ENVIRON returns the list of strings that makes up the<br> process environment. This is the equivalent of POSIX (char **environ)<br> and Windows' GetEnvironmentStrings.<br><br> - EXT:RUN-PROGRAM now accepts a keyword argument, :ENVIRON, with a list of<br>
strings used to configure the environment of the child process. For instance<br> '("PWD=/home" "PATH=/usr/bin")<br><br> - EXT:RUN-PROGRAM returns as third value an EXT:EXTERNAL-PROCESS structure,<br>
which supports the queries EXT:EXTERNAL-PROCESS-{PID,INPUT,OUTPUT,STATUS},<br> following CCL's conventions.<br><br> - The new function EXT:EXTERNAL-PROCESS-WAIT can be used to wait indefinitely<br> for termination of a process or simply to query its status.<br>
<br> - ECL implements a new garbage collector marking mode which at the overhead of<br> one word per object achieves precise marking of heap objects, reducing<br> accidental data retention and improving the time spent in garbage<br>
collection. This mode is only available when using --enable-boehm=system at<br> configuration time.<br><br> - ECL now ships with ASDF version 1.604<br><br> - The variables C:*USER-CC-FLAGS* and C:*USER-LD-FLAGS* are lists of strings<br>
which can used to change the behavior of the C compiler and the<br> linker. Note, however, that the flags that ECL uses may take priority.<br><br> - In the C code we are beginning to use GCC's attributes (__attribute__) and<br>
branch annotation (__builtin_expect). This decreases the size of code that<br> checks for errors and improves performance.<br><br> - When printing compiler notes, instead of printing the macroexpanded form,<br> ECL now prints the toplevel form, as follows<br>
;;; Warning: in file src:lsp;autoload.lsp.NEWEST, position 1178 and top form<br> ;;; (DEFMACRO WITH-COMPILATION-UNIT (OPTIONS &REST BODY) ...)<br> ;;; The variable OPTIONS is not used.<br><br> - ECL now implements EXT:*INVOKE-DEBUGGER-HOOK*, which works like *DEBUGGER-HOOK*<br>
but is also observed by BREAK. (SBCL extension adopted by ECL)<br> <br> - The UFFI interface now supports C99 types, such as :int8-t, :uint32-t, etc,<br> but only when the corresponding types do exist in the underlying C environment.<br>
<br> - SOCKET-MAKE-STREAM defaults :BUFFERING to :FULL and allows three new keyword<br> arguments, :INPUT, :OUTPUT and :EXTERNAL-FORMAT, as in SBCL.<br><br> - COMPILE-FILE admits the keyword argument :EXTERNAL-FORMAT.<br>
<br> - A new function EXT:ALL-ENCODINGS lists all encondings known to ECL.<br><br> - Improved readability of compiler messages.<br><br> - SERVE-EVENT now allows time resolution of less than one second.<br><br> - The PROFILE package now has an alias, SB-PROFILE.<br>
<br> - ECL now stores the location of its source files in a logical hostname,<br> "SRC:", which points to the directory where Announcement is located.<br><br> - When building ECL, if "etags" is installed, a file TAGS is created which<br>
contains references to the location of all C functions. This file can be<br> used to locate functions from the core library in Slime, using M-.<br><br> - Documentation files now allow for annotation of arbitrary symbols,<br>
based on a key and a sub-key which are both symbols.<br><br> - New function EXT:FUNCTION-LAMBDA-LIST which currently only works with<br> functions from the core ECL library, generic functions and interpreted<br> functions.<br>
<br> - The debugger now is capable of showing the special variable bindings<br> from a function, as well as the restarts newly bound by that function.<br><br> - When using git, a new function EXT:LISP-IMPLEMENTATION-VCS-ID returns a<br>
unique identifier denoting the last commit. This can be used to discriminate<br> between unstable releases and remove stale FASL files.<br><br> - COMPILE-FILE admits two new keyword arguments, :SOURCE-TRUENAME and<br>
:SOURCE-OFFSET which can be used to change the value returned by<br> EXT:COMPILED-FUNCTION-FILE when acting on compiled functions.<br><br>-- <br>Instituto de Física Fundamental, CSIC<br>c/ Serrano, 113b, Madrid 28006 (Spain) <br>
<a href="http://juanjose.garciaripoll.googlepages.com">http://juanjose.garciaripoll.googlepages.com</a><br>