[Ecls-list] ANN: ECL 9.6.0

Juan Jose Garcia-Ripoll juanjose.garciaripoll at googlemail.com
Fri Jun 12 13:15:29 UTC 2009


ECL 9.6:
========

Important changes related to the usability of the debugger and
inspector, debugging of compiled C code, handling of floating point
exceptions and creation and manipulation of NaNs and infinities, among
other things. Please reade the Changelog.

Support for Solaris/Intel has been added. The windows ports are right
now broken. Please stay with 9.4.0 if support for those platforms is
needed, until we fix the problems. Remaining ports, such as OSX,
Linux, *BSD are working fine.

* MOP:

 - CALL-METHOD has only one required argument. Affects only calls to this
   macro inside nonstandard method combinations.

* Visible changes:

 - Physical pathnames do not always have a namestring from which they can be
   reconstructed. This is the case of directory pathnames with version numbers,
   for instance. Formerly ECL would refuse to print those pathnames if
   *PRINT-READABLY* was true, but now it uses instead a #. form.
    > (write (make-pathname :directory '(:relative)
                            :name nil :type nil :version :newest)
             :readably t))
    #.(MAKE-PATHNAME :HOST NIL :DEVICE NIL :DIRECTORY '(:RELATIVE) :NAME NIL
                     :TYPE NIL :VERSION :NEWEST :DEFAULTS NIL)

 - WITH-CSTRING automatically coerces extended strings to base strings,
   signalling an error when this is not possible.

 - New command line arguments, --heap-size, --lisp-stack, --frame-stack and
   --c-stack control the different memory limits.

 - The stack size is now measured in bytes, not in lisp words.

 - The out of memory error (ext:storage-exhausted) can now be recovered.
   By default a correctable error is signaled and the user is given the
   chance to increase the heap size.

* Function names:

 - Added a new section in external.h for defining compatibility macros
   for functions that changed name.

 - make_longfloat() is renamed ecl_make_longfloat().

 - Some functions got new names: ecl_make_cfun, ecl_make_cfun_va,
   ecl_make_cclosure_va, ecl_def_c_function, ecl_def_c_function_va.

* Numerics:

 - A new configuration flag --with-ieee-fp adds support for NaN's, infinities
   and signed zeros, disabling certain floating point exceptions by default.
   In addition, when this is set, functions like LOG or ATAN will not
   signal errors when their arguments are not valid, but rather return NaN's
   (LOG 0) => -infinity, (ATAN 0.0 0.0) => NaN

 - A new command line option --trap-fpe / --no-trap-fpe tells whether ECL
   should ignore floating point exceptions and produce NaNs and infinities
   or either use the condition system to produce the associated errors.

 - Two new functions, EXT:FLOAT-NAN-P and EXT:FLOAT-INFINITY-P.

 - Eight new constants for the eight possible infinities
   EXT:{SHORT,SINGLE,DOUBLE,LONG}-FLOAT-{POSITIVE,NEGATIVE}-INFINITY

* Interrupt handling:

 - Under Mac OS/X, ECL now uses its own modified version of the Boehm-Weiser
   garbage collector that allows both --enable-gengc and our optimized
   code for signal handling.

 - New condition EXT:SEGMENTATION-VIOLATION signaled by SIGSEGV and SIGBUS
   events.

 - Added support for the floating point exception FE_INVALID, which is
   signalled when trying to do 0/0 or sqrt(-1) (A. Gavrilov)

 - SI:TRAP-FPE always returns an integer denoting the new active / inactive
   floating point traps. In particular, (SI:TRAP-FPE 'LAST T) returns the
   currently active traps. This value can be passed to SI:TRAP-FPE as first
   argument again. This is useful for performing a computation without traps
	(let* (( (si::trap-fpe 'last nil)))
	  (prog1 (/ 0.0 0.0) (si::trap-fpe bits t)))

 - A new configurable option ECL_OPT_THREAD_INTERRUPT_SIGNAL determines
   which Unix interrupt type is used to communicate between threads.

* Debugger:

 - Compiled functions now carry information about their source file
   (based on patches by Jean-Claude Beaudoin)

 - The compiler can now generate some Lisp constants as static C expressions
   (based on patches by JCB)

 - The debugger is now fit for multithreaded environments (JCB)

 - Compiled functions with DEBUG=3 now produce information about their
   arguments and variables, that can be inspected in the debugger
   (evolved from patches by JCB).

 - ECL records the file position of a compiled form / function instead of
   the form number in that file.

* Bugs fixed:

 - Remove an obsolete #if statement for Solaris that broke current builds
   with Solaris 10.

 - The mechanism for checking the existence of [u]int{16,32,64}_t or other
   replacement types was not used for [u]int8_t.

 - When COMPILE-FILE is invoked with a non-nil value of :OUTPUT-FILE, ECL
   now honors the file type supplied by the user, instead of overriding it
   with "fas" or "fasl". The same applies to COMPILE-FILE-PATHNAME.

 - When building ECL's C preprocessor (dpp), the value of CPPFLAGS was
   not used.

 - A wrong order in the list of libraries (-lpthread -lgc) prevented ECL
   from having multithread support in FreeBSD, OpenBSD and NetBSD.

 - Removed a shell command from src/Makefile.in The command used braces {}
   which FreeBSD does not understand.

 - Changed the way in which threads are created and registered with ECL to
   avoid certain race conditions and data loss when it takes a long time
   betwee calls to mp:make-proceess and mp:process-enable

 - ecl_import_current_thread() now properly stores the thread handle in
   the process object and can be called multiple times for the same thread.

 - When performing unoptimized function calls, the interpreter did not save
   actual value of the lexical environment, thus preventing the debugger from
   inspecting it (fixed by JCB).


-- 
Instituto de Física Fundamental, CSIC
c/ Serrano, 113b, Madrid 28006 (Spain)
http://juanjose.garciaripoll.googlepages.com




More information about the ecl-devel mailing list