ECL 1.0:
========

* New platforms:

 - Support for GNU/kFreeBSD

 - ECL has additionally been ported to GNU/Hurd (Pierre Thierry) and
   HP NonStop S-Series (Craig McDaniel)

* New features:

 - New commands, :RESTART, :R1, :R2, etc, allow invoking restarts (contributed
   by Chui Tey).

 - Interpreted functions can now be disassembled in the debugger. The commands
   are :D and :DISASSEMBLE.

 - New (private) function EXT::FUNCTION-LAMBDA-LIST, returns the lambda list of
   a function whenever it was recorded.

 - Implemented finalization on the lisp level. Only available for the Boehm
   Weiser GC. Finalizers are closures which can be attached to objects
   using SI:SET-FINALIZER and SI:GET-FINALIZER. Only one closure per
   object is allowed.

 - [Win32] Command-line arguments are now available for programs compiled with
   :SYSTEM set to :WINDOWS (M. Goffioul)

 - MAPCAR, MAPLIST, MAPC, MAPL, MAPCAN, MAPCON have now compiler macro functions
   which create equivalent inlined forms.

 - Support for C "long double" as lisp long-double datatype (originated from
   a patch by Lars Brinkhoff). Still missing compiler support for unboxed
   long double types.

 - TIME outputs information about consed bytes and calls to the garbage
   collector.

 - MAKE-ARRAY accepts a foreign pointer as an argument to :DISPLACED-TO That
   creates a lisp array on top of the foreign data and can be used to directly
   scan C strings, or unboxed arrays of numbers.

 - DFFI works now on AMD64 or Intel EMT64 (DFFI stands for Dynamical Foreign
   Function Interface and it is the component that allows ECL call directly
   C functions and create C callbacks without the C compiler being around).
   (initial code by M. Goffioul)

 - Using version 6.8 of the Boehm-Weiser garbage collector.

 - Using version 4.2.1 of the GMP library.

* Bugs fixed:

 - STREAMP signals an error for Gray streams.

 - ENOUGH-NAMESTRING provided too large directory names (Contributed by Tim S)

 - ADJUST-ARRAY accepted a fill-pointer even for arrays that did not have any.

 - Instead of using SHORT-FLOAT and LONG-FLOAT as basic floating point types,
   we use SINGLE-FLOAT and DOUBLE-FLOAT now. The names of the C functions have
   changed accordingly (Contributed by Lars Brinkhoff).

 - There was a problem with the variable capture when creating accessors
   methods for classes.

 - [Win32] Processes are now correctly listed with MP:ALL-PROCESSES (M. Goffioul)

 - DIRECTORY behaves more according to people's expectations
	(DIRECTORY "*/") => List all directories in current path
	(DIRECTORY "*.*") => List all files in current path
   This means you need to make two calls to DIRECTORY to get all the content of
   it, but it allows you to select whether you want to list files or
   not. Furthermore, the paths returned by DIRECTORY are more or less
   guaranteed to match the mask -- the exception are links, for whose the
   truename is returned.

 - [Win32] DIRECTORY did not take the drive letter into account.

 - [Win32] si_trap_fpe is now exported by ecl.dll

 - Instead of sharing a single string buffer (cl_env.token), ECL now has a pool
   of small strings which can be used for temporary operations. This fixes a
   number of problems with the reader.

 - DIRECTORY would always match NIL entries, independent of the mask. Now, the
   following two statements differ:
	(directory "foo*")       => ("foo")
	(directory "foo*.*")     => ("foo" "foo.log")

 - The code in contrib/sockets.lisp was not compatible with C++ because of
   multiple implicit pointer conversions, and additionally it had some pointer
   miscalculations.

 - GET-INTERNAL-REAL-TIME now works on Windows with 1/60s precision
   (contributed by Dustin Long)

 - When :INITFORM was a constant variable but not self evaluating (i.e. not T,
   NIL, or a keyword), it was not processed properly
	(defclass a () ((a :initform most-positive-fixnum)))
	(slot-value (make-instance a) 'a) => most-positive-fixnum

 - The namestring "." was improperly parsed as having file type "".

 - Now the file type is determined by the last dot in the name.
	(pathname-type "foo.mpq.txt") => "txt"

 - When iterating over a hash table we now check that the argument is really a
   hash table.

 - *COMPILE-VERBOSE* and *COMPILE-PRINT* now also have effect when compiling
   isolated lambda forms using COMPILE. Additionally, these variables are
   defined even without the compiler loaded.

 - DESCRIBE was not prepare for the number range types returned by TYPE-OF.

 - In OS X, ECL can now load shared libraries (Extension *.dylib) thanks
   to using dlopen() instead of the obsolete NSLinkModule() function.

 - (CONCATENATE 'STRING ...) does no longer have an ad-hoc limit in the number
   of strings.

 - Reader for #( did not always read the last parenthesis, what lead to a warning:
	> #3(1 2 3)
	#(1 2 3)
	> ;;; Warning: Ignoring an unmatched right parenthesis.

 - RANDOM no longer overflows when the input is a bignum that does not fit in a
   double-float.

 - MAKE-PATHNAME should remove all occurrences of single dots "." in physical
   pathnames and does not interpret the directory component :BACK properly.

 - ENOUGH-NAMESTRING did not simplify a pathname when it had the same directory
   as the default pathname.

 - Some toplevel forms with closures caused the compiler to abort, for example
	(let ((data '(a b)))
	  (flet ((get-it ()
	          (second data)))
	    (defun print-it-1 ()
	      (print (get-it)))))

 - COPY-READTABLE did not copy entries when supplied a second argument.

* Unicode:

 - MAKE-STRING only allowed :ELEMENT-TYPE to be one of CHARACTER, BASE-CHAR, or
   STANDARD-CHAR.

 - The FFI will signal a type error when converting extended characters to
   the C types "char" or "unsigned char".

 - Unicode support for ALPHA-CHAR-P, ALPHANUMERICP, CHAR-UPCASE, CHAR-DOWNCASE,
   etc, based on the ISO C99 library functions for wide characters.

 - Following functions fixed to work with Unicode strings: EQUAL, EQUALP,
   PARSE-INTEGER, STRING-TRIM, STRING-LEFT-TRIM, STRING-RIGHT-TRIM,
   COPY-STRUCTURE, SHADOW.

 - Most functions dealing with sequences (REMOVE, DELETE, etc) would
   output a STRING even if the input was a BASE-STRING.

 - TYPE-OF did not recognized EXTENDED-CHARs.

 - Type BASE-STRING and STRING were defined as equivalent.

 - Pathnames now allow extended strings in the names. Errors are signalled,
   however, when a file name contains illegal characters. UTF-8 encoding
   of file names is not supported.

* Other visible changes:

 - EXT:PROCESS-COMMAND-ARGS now allows for a default rule.

 - Variable EXT:*HELP-MESSAGE* and EXT:+DEFAULT-COMMAND-ARG-RULES+ exported.

 - C:BUILD-PROGRAM now uses a unique prefix for the initialization function,
   init_ECL_PROGRAM, to avoid collisions when both the program and a component
   have the same name:
	(C:BUILD-PROGRAM "ls" :lisp-files '("ls.o"))

 - FFI:CLINES is no longer restricted to appear as a toplevel form. The
   following code is thus valid:
	(defun c-sin (x)
	  (ffi:clines "#include <math.h>")
	  (ffi:c-inline (x) (:double) :double "sin(#0)" :one-liner t))

 - Minimized the number of headers included by ecl/ecl.h. In particular,
   stdio.h, inittypes.h and pthread.h are no longer used.

 - When a compiler finds a literal standard object, the load and initialization
   forms it generates are now closer to the first reference to the object. This
   allows to have, in the same file, a class definition and a constant which
   is an object of that class.

 - Support for hierarchical package names, as in Allegro Common-Lisp.

 - The debugger now prints a list of available restarts.

 - Added restarts to the errors signaled by several functions: SIN, COS, EXP,
   EXPT, TAN, TANH, SINH, COSH, LOG, ATAN, RATIONAL, NUMERATOR, DENOMINATOR,
   FLOOR, CEILING, ROUND, TRUNCATE, FLOAT-PRECISION, FLOAT-SIGN, DECODE-FLOAT,
   SCALE-FLOAT, FLOAT-RADIX, FLOAT-DIGITS, INTEGER-DECODE-FLOAT, REALPART,
   IMAGPART, COMPLEX, etc

 - DIGIT-CHAR-P and DIGIT-CHAR will signal an error if the radix is not an
   integer value between 2 and 36, both included.

 - The slot accessors for structures with type VECTOR or LIST now rely on
   the standard function ELT, instead of si:list-nth and si:rplaca-nthcdr.

 - TYPE-OF returns expanded types for arrays. For instance,
   (ARRAY CHARACTER (12)) instead of (STRING 12).

 - C functions which disappear: si_set_compiled_function_name(),
   si_extended_string_concatenate(), assert_type_string(),
   assert_type_character(), assert_type_symbol(), make_symbol(),
   parse_number(), parse_integer(), adjust_displaced().

 - Lisp functions which disappear: si:set-compiled-function-name,
   si:extended-string-concatenate, si:list-nth, si:rplaca-nthcdr.

 - New C functions: ecl_stream_to_handle(), ecl_base_char_code(),
   ecl_type_error(), ecl_check_cl_type(), ecl_check_type_string(),
   ecl_fixnum_in_range(), ecl_stringp(), ecl_parse_number(),
   ecl_parse_integer(), ecl_char(), ecl_char_set(), ecl_base_char_p().

 - New Lisp functions: si:wrong-type-argument.

 - Functions renamed: backup_fopen() -> ecl_backup_fopen() char_code() ->
   ecl_char_code(), cl_log1() -> ecl_log1(), cl_log2() -> ecl_log2(),
   NUMBER_TYPE() -> ECL_NUMBER_TYPE_P().

 - Additionally, most functions have got now the prefix "ecl_"

 - LOAD-FOREIGN-LIBRARY accepts an additional keyword argument :SYSTEM-LIBRARY
   which, when true, tells ECL to link object files against the system version
   of that library instead of directly referencing the shared library: i.e. use
   linker flag -lmylib instead of libmylib.so (Brian Spilsbury)

 - When compiling lisp files, ECL now creates different entry functions
   depending on the file type. FASL, library and object files get a function
   with the prefix {init_fas, init_lib, init_} prepended to the file name.
   This solves the problem of a shared library having the same name as one
   of the components it is made of.

 - C:BUILDER searches the ASDF module list for libraries. (Thanks to F.R. Rideau)

* Contributed code:

 - New examples: cmdline/ls.lsp, ffi/uffi.lsp, ffi/cffi.lsp

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