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>