From: Juan Jose Garcia Ripoll
Subject: [ANN] ECL 0.9e
Date: 
Message-ID: <34l720F4ddi41U2@individual.net>
Announcement of ECL v0.9e
=========================

ECL stands for Embeddable Common-Lisp. The ECL project is an effort to
modernize Giuseppe Attardi's ECL (ECoLisp) environment to produce an
implementation of the Common-Lisp language which complies to the ANSI
X3J13 definition of the language.

ECL supports the operating systems Linux, FreeBSD, NetBSD, Solaris,
Microsoft Windows and OSX, running on top of the Intel, Sparc, Alpha
and PowerPC processors. Porting to other architectures should be
rather easy.

ECL is currently hosted at SourceForge. The home page of the project
is http://ecls.sourceforge.net, and in it you will find source code
releases, a CVS tree and an up to date documentation.

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

This release consists mainly of bug fixes, and improvements in the
compliance both to the ANSI specification and to the MetaObject Protocol
as described in "The Art of the Metaobject Protocol".

ECL 0.9e
========

* Errors fixed:

   - Under unix-like systems, relative symbolink links (such as the ones
     produced by "ln -sf ../tmp/foo faa") are now properly recognized and
     followed by TRUENAME.

   - The routines for writing bignums had a size limit that has been
     removed. Besides the library does not rely on GMP for printing bignums.

   - PEEK-CHAR works now for concatenated streams (M.Goffioul)

   - Fixes in the documentation and error messages (J. Stecklina)

   - The reader was not able to interpret RANDOM-STATE objects.

   - The routines in the pretty printer now check the type of the arguments.

   - The parser for #* did not accept #0* and also did not signal errors 
when
     invalid characters were found.

   - The parser for #( did not accept empty vectors.

   - The parser for #C did not accept whitespaces between #\C and the list.

   - The reader macros for sharp-single-quote (#') and single-quote (')
     did not pay attention to the end of file condition.

   - LISTEN did not work on files and consoles under windows (M. Goffioul).

   - Special declarations in LET/LET*/DO/DO*/LAMDBA now take place even 
if the
     declared variable is not bound in the associated form.

   - In the compiled code, special declarations affected the expressions in
     the binding forms as well.

   - MAKE-STRING-OUTPUT-STREAM now checks the validity of the :ELEMENT-TYPE.

* Visible changes:

   - SI:MKSTEMP now accepts and returns pathnames.

   - A new logical hostname TMP points to a suitable directory for temporary
     files. The value is guessed using environment variables TMPDIR, 
TEMP and
     TMP. In some systems this directory might need to have execution
     permissions.

   - Automatic deletion of DLLs under the MSVC port.

   - ECL now checks whether the lambda list of a DEFMETHOD is compatible in
     length with a previously specified one.

   - When parsing a physical pathname, version is NIL unless the pathname
     has a name or a type components, in which case version is :NEWEST.

   - The stream mode smm_closed disappears. Instead we add a flag called
     stream.closed. Besides this fulfills the fact that CLOSE cannot change
     the class of the stream

   - ENSURE-GENERIC-FUNCTION, DEFGENERIC and DEFMETHOD now can operate
     on functions which are being traced.

   - INTERACTIVE-STREAM-P now outputs T for ttys (terminals, consoles, etc).

   - DO/DO* are no longer primitives, but rather macros that build on top
     of the SI::WHILE iteration primitive.

   - LISTEN and CLEAR-INPUT-STREAM now work with the Windows console and
     pipes as expected.

   - User break with Ctrl+C is now also capture under Windows.

   - Temporary files are now also cleaned up when exiting via #'QUIT.

* Internals:

   - The compiler now uses a more detailed tree to represent the code, 
keeping
     track of where variables are referenced and changed, and which are the
     parent forms of a given one.

   - The compiler structures now print unreadably to simplify inspection.

   - New algorithm for computing whether a function has to have a
     stack-allocated lexical environment, a full environment or none.

   - Do not replace LET/LET* variables whose value has side effects.

* ANSI compliance:

   - The value of *READTABLE* can now be modified by the user.

   - Implemented READTABLE-CASE, including the appropiate changes to the
     reader and the printer.

   - Floats are properly read even when *read-base* is not 10.

   - Support for binary streams of arbitrary byte size. By default, binary
     streams are written with an octet as header, which is used to determine
     the actual length of the file. However, if you pass the argument
     :use-header-p = NIL to the function OPEN, the header is not used and
     instead the size in bits of the stream element type is rounded to a
     multiple of 8 (M. Goffioul)

   - Fixed the order of evaluation of arguments in INCF,DECF,etc 
(M.Goffioul).

   - Default methods for CLOS streams signal now a type error, which is the
     expected error when an object which is not of type stream is passed 
to the
     functions dealing with streams.

   - By default READ-BYTE signals an error when EOF is reached.

   - The space should print as #\  instead of #\Space.

   - The implementation of (SETF VALUES) now produces the right result
     when there are nested (SETF VALUES) forms.

   - DEFGENERIC now signals a PROGRAM-ERROR when the syntax is incorrect.

   - The sequence functions now also accept class objects.

   - DESCRIBE takes an additional (in ECL optional) argument denoting the
     stream to which the description is written (M. Goffioul)

   - Important fixes in how arrays are printed with *print-readably* = T.
     Displaced bitvectors now print properly. (M. Goffioul)

   - SETF-functions can now be traced.

   - In PATHNAME-MATCH-P, mask's missing components become :WILD.

   - A physical namestring without file name/type has now version NIL.
     Otherwise version defaults to :NEWEST. This ensures that directory
     names have version set to NIL.

   - The constants in the code created by COMPILE are now EQ to those in the
     original forms.

   - FIND-METHOD checks the validity of the specializers list.

   * The indentation value in PPRINT-INDENT is a real number. We round 
it to the
     nearest integer.

   * PRINT-UNREADABLE-OBJECT always outputs a space before the identity and
     after the type, even if the forms have been omitted.

   * PPRINT-LOGICAL-BLOCK only accepts strings as :PREFIX and :SUFFIX 
arguments
     and these strings need not be simple.

   - All non graphic characters now have a name "A~D" where ~D is the 
character
     code in hexadecimal form.

   * The code for handling *PRINT-LINES* was broken.

   - WRITE now accepts the keyword arguments :LINES, :MISER-WIDTH,
     :PPRINT-DISPATCH, and :RIGHT-MARGIN.

   * *PRINT-LEVEL* and *PRINT-LENGTH now affect printing of structures and
      instances, as well as PPRINT-LOGICAL-BLOCK.

   * In format directives, a negative value of "minpad" is converted to 
zero.

   * PPRINT-LOGICAL-BLOCK now includes support for printing circular
     structures when *PRINT-CIRCLE* = T.

   - FLOAT-PRECISION now really returns the number of siginificant digits
     in a denormalized float.

   - PPRINT-TAB did not compute the tab positions properly in any case.

   - "~<~>" removed all padding when the line length exceeded the minimal
     number of columns.

   - FORMAT now signals an error (as per ANSI 22.3.5.2) when a format string
     mixes ~<...~:;...~> with ~W, ~I, ~_, ~<...~:> or ~T.

   - DOCUMENTATION now works on generic functions and methods.

   - Improved initarg checking in SHARED-INITIALIZE, REINITIALIZE-INSTANCE,
     MAKE-INSTANCE, UPDATE-INSTANCE-FOR-{DIFFERENT-CLASS,REDEFINED-CLASS}.
     Now the keyword arguments of the applicable methods are considered to
     be valid initargs (ANSI 7.1.2)

   - It is now possible to change the class of a generic function using
     DEFGENERIC or ENSURE-GENERIC-FUNCTION(-USING-CLASS).

   - Implemented METHOD-COMBINATION-ERROR and INVALID-METHOD-ERROR.

   - ECL now uses the character trait "invalid" (ANSI 2.1.4.2).

   - (LOOP FOR NIL FROM ...) is a valid statement and the presence of NIL
     only denotes that we ignore the value.

   - In LOOP, the order of statements in the body is now preserved. Formerly
     WHILE and RETURN clauses were not thought to be part of the loop body.
     Furthermore, FOR-AS clauses cannot appear after a main clause, such as
     WHILE, WHEN, IF, DO, COLLECT, etc...

   - Option sorting of methods now takes into account the generic function
     option :ARGUMENT-PRECEDENCE-ORDER.

   - The default value of optional arguments in a DEFTYPE form 
"defaults" to '*
     (ANSI 3.4.8).

   - The value of the INDEX variable in WITH-INPUT-FROM-STRING is only 
updated
     when exiting normally from the WITH-... form.

   - In a standard method combination, the method with qualifier :AFTER are
     invoked using the least-specific-first order (ANSI 7.6.6.2)

* MOP compliance:

   - ADD-METHOD is now a generic function and implements most of the 
protocol in
     the specification except for the calls to ADD-DIRECT-METHOD, 
because we do
     not have specializer objects, and for the call to
     COMPUTE-DISCRIMINATING-FUNCTION because of the differences in the 
function
     calling protocol.

   - Implemented all of the generic function initialization protocol 
including
     ENSURE-GENERIC-FUNCTION, ENSURE-GENERIC-FUNCTION-USING-CLASS, and
     (RE)INITIALIZE-INSTANCE specializations. Generic functions can now be
     redefined and there are better checks to ensure the consistency 
between the
     lambda lists of a generic function and it methods.

   - Implemented SLOT-{EXISTS-P,VALUE,MAKUNBOUND,BOUNDP}-USING-CLASS.

---

NOTES:

   - Remarks preceded by (*) apply only when ECL is configured with CMU CL's
     format and pretty printing routines (configure flag --with-cmuformat).

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