[Ecls-list] [ANN] ECL 8.12

Juan Jose Garcia-Ripoll juanjose.garciaripoll at googlemail.com
Wed Dec 17 15:52:18 UTC 2008


Notes for this release
======================

This release is the last one before a major redesign of ECL, which will affect
issues like Unicode streams and handling of interrupts.

This is also the first one to follow the new numbering scheme, inspired by that
of Ubuntu. The release number follows the scheme year.month.[0-9], where the
last digit marks the patch release. The numbering is now incorporated in the
library names, so that different versions of ECL may coexit on the same system.

ECL 8.12.0:
==========

* Visible changes:

 - The compiler now signals compiler-error, compiler-warning and compiler-note
   for errors, warnings and notes, respectively.

 - Printing of compiler messages is now ruled by *COMPILE-PRINT*,
*COMPILE-VERBOSE*
   and *SUPPRESS-COMPILER-MESSAGES*. The latter is either NIL or a
valid lisp type
   which denotes which compiler messages are suppressed. If
*SUPPRESS-COMPILER-MESSAGES*
   is NIL and *COMPILE-VERBOSE* is NIL, then no messages are shown.

 - *SUPPRESS-COMPILER-NOTES* and *SUPPRES-COMPILER-WARNINGS* are deprecated and
   will be removed in next release.

 - ECL allows the user to set up handlers for different compiler conditions,
   including errors, warnings and simple notes. The recommended procedure is to
   use HANDLER-BIND and _NOT_ to transfer control out of the compilation
   environment, but to defer to the default handlers or use the restarts ABORT
   and MUFFLE-WARNING.

	(use-package :c)
	(let ((warnings nil))
	  (handler-bind ((compiler-message #'(lambda (c)
					       (push c warnings))))
	    (compile-file "foo.lsp" :verbose nil :print nil))
	  (format t "~&;;; Printing compiler messages")
	  (loop for m in (nreverse warnings)
	     for i from 0
	     do (format t "~&~@<;;; ~@;Message #~D~%~A~:>" i m)))

 - On Windows, ECL recognizes the environment variables HOMEDRIVE and HOMEPATH
   and uses them to construct the output of user-homedir-pathname.

 - We switch to an Ubuntu-like versioning system, based on $(year).$(month).x
   where "x" is 0 for a release or any higher number for a patched version.

 - In Unix-type systems, ECL now installs with a "soname" and using versioned
   directory names, such as /usr/lib/ecl-8.9.0, /usr/lib/libecl.so.8.9, etc

 - New configuration flag, --without-fpe, to disable floating point exception
   code in platforms that have buggy implementations of feenableexcept().

 - Changes in the build process of the Microsoft Visual C++ port contributed
   by Muhammad Haggag.

 - All known C signals are now exported by ECL as constants in the EXT package,
   such as EXT:+SIGINT+, EXT:+SIGFPE+, etc.

 - Function (EXT:CATCH-SIGNAL signal-code boolean) can be used to tell ECL to
   trap or ignore certain signals. In a near future a function can be provided.

 - In platforms that support sigaltstack(), ECL may detect stack overflows and
   gracefully quit.

 - The help file now contains all functions in the library, including
   internal ones.

 - A new configuration flag, --with-signed-zero, determines whether ECL supports
   IEEE 754 signed zeros

 - EXT:RUN-PROGRAM now returns two values: the two way stream and the exit code
   of the process if :WAIT is T (Josh Elsasser)

 - Some symbols now belong in the EXT package: EXT:GETENV, EXT:SETENV,
   EXT:GETCWD, EXT:CHDIR.

 - EXT:GETCWD by default always update the value of *DEFAULT-PATHNAME-DEFAULTS*

 - *DEFAULT-PATHNAME-DEFAULTS* is initialized to the value of EXT:GETCWD.

 - A new command line option, -debug, enables the debugger whenever an error
   happens. The converse is -nodebug.

 - We now ship version 0.7.3 of the portable CLX library.

 - A new method, STREAM-FILE-POSITION, has been added to the Gray
streams package.

* Embedding:

 - ECL now implements a more transparent interface for setting and querying
   options related to signal trapping, stack sizes and general behavior. These
   are options that should be set before calling cl_boot() to customize later
   behavior. It does not make sense to change them at run time. The current
   list of options is set with ecl_set_option(code, value) and queried with
   ecl_get_option(code):
	ECL_OPT_INCREMENTAL_GC,
	ECL_OPT_TRAP_SIGSEGV,
	ECL_OPT_TRAP_SIGFPE,
	ECL_OPT_TRAP_SIGINT,
	ECL_OPT_TRAP_SIGILL,
	ECL_OPT_TRAP_SIGBUS,
	ECL_OPT_BOOTED, /* read only */
	ECL_OPT_BIND_STACK_SIZE,
	ECL_OPT_BIND_STACK_SAFETY_AREA,
	ECL_OPT_FRAME_STACK_SIZE,
	ECL_OPT_FRAME_STACK_SAFETY_AREA,
	ECL_OPT_LISP_STACK_SIZE,
	ECL_OPT_LISP_STACK_SAFETY_AREA,
	ECL_OPT_C_STACK_SIZE,
	ECL_OPT_C_STACK_SAFETY_AREA,
	ECL_OPT_SIGALTSTACK_SIZE,
	ECL_OPT_LIMIT

 - Two new convenience functions, ecl_defparameter() and ecl_defvar.

* Bugs fixed:

 - The optimizer for COERCE might enter an infinite loop for certain
   type intervals.

 - The sharp macros #n# and #n=... did not work well with arrays of an
   specialized type.

 - Deactivate --enable-asmapply by default, because it is still an experimental
   feature.

 - In compiled files, externalize package objects using FIND-PACKAGE.

 - In RUN-PROGRAM, there were two bugs: first, the keyword :WAIT was not
   defined in the C core and caused an error when used; second, if the output
   stream was missing or directed to the standard output, it would fail.

 - SI:LOAD-FOREIGN-MODULE does not coerce the library name to a truename
   before loading. Instead, it leaves this task to the appropriate routine,
   dlopen or similar.

 - Bytecode objects created inside an eval-when had an invalid name.

 - SI:LOAD-FOREIGN-MODULE now relies on dlopen/LibraryLoad/... to find the
   foreign libraries. Nevertheless, duplicate libraries are still identified
	> (si::load-foreign-module "libm.dylib")
	#<codeblock "libm.dylib">
	> (si::load-foreign-module "/usr/lib/libm.dylib")
	#<codeblock "libm.dylib">

 - In reading functions, the value of :RECURSIVE-P should not interfere with
   that of :EOF-ERROR-P.

 - The MSVC port can be built with support for unicode characters.

 - PROCLAIM/DECLAIM now understand the abbreviated form of type declarations
   user-defined and complex types.

 - Sharp-dot macro reader (#.) gets its own sharp-equal context (#=) so that
   the following form
	(read-from-string "'#.(princ (list '#1=(1 2) '#1#))")
   actually prints the right list (#1=(1 2) #1#).

 - Inline/not-inline declarations for SETF-functions are not ignored (Josh
   Elsasser).

 - When a SETF place is a macro, it has to be expanded with MACROEXPAND-1.

 - In FTYPE proclamations and declarations, the type may now be a user defined
   function type (Josh Elsasser).

 - COMPILE would create an extra empty file which would not get deleted after
   finishing compilation (Josh Elsasser).

 - On overflow, binding and frame stack signal a correctable error with
   STACK-OVERFLOW condition.<
	(block faa
	      (labels ((foo (x)
			 (catch 'foo (foo (1+ x))))
		       (handle-overflow (c)
			 (let ((s (ext:stack-overflow-size c)))
				   (if (< s 2304)
			       (continue)
			       (return-from faa (ext::stack-overflow-type c))))))
		(handler-bind ((ext:stack-overflow #'handle-overflow))
		  (foo 1))))

 - New function (EXT:SET-STACK-SIZE type size) can resize type =
   EXT:BINDING-STACK, EXT:LISP-STACK and EXT:FRAME-STACK.

 - FLOAT-SIGN returns the right value on negative zeros.

 - The reader and the printer now understand negative zeros.

 - Negative and nonnegative zeros are not EQL.

 - ENSURE-DIRECTORIES first has to merge the path with *DEFAULT-PATH...*

 - SUBTYPEP does not support complex CONS type specifiers. This caused the
   compiler to choke on declaration such as (CONS INTEGER (CONS T T))
   and the like.

 - The value of *DEFAULT-PATHNAME-DEFAULTS* has to be of type pathname. Other
   pathname designators are not allowed and a correctable error is signaled
   when the value of this variable is found to be of the wrong type.

 - DIRECTORY would fail to handle symbolic links under certain conditions.

 - The optional type checks generated by the compiler are based on TYPEP and
   thus they fail when the declaration type contains a function type (FUNCTION
   (...) ...)  This is now solved by replacing parts of these types with the
   simple type FUNCTION.

 - Hash tables were not properly serialized.

 - WRITE/READ-LINE and READ-BYTE did not work with gray streams (A. Vodonosov)

 - When working with Gray streams, READ-LINE did not handle the EOF properly.

 - The routine that computed the class precedence list produced the wrong
   result for moderately complex class hierarchies. It has been replaced with
   a version that exactly implements the algorithm in the ANSI specification.

 - At the toplevel, the value of *read-suppress* is ignored, so that
   setting (setf *read-suppress* nil) does not prevent the user from entering
   new commands.

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


More information about the ecl-devel mailing list