ECL 8.9.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.

;;; Local Variables: ***
;;; mode:text ***
;;; fill-column:79 ***
;;; End: ***
