[Ecls-list] ECL 0.9e

Juan Jose Garcia Ripoll lisp at arrakis.es
Wed Jan 12 10:01:12 UTC 2005

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

  - 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

    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, 
    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 

  - 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 
    and these strings need not be simple.

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

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

  - WRITE now accepts the keyword arguments :LINES, :MISER-WIDTH,

  * *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 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,
    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


  - ECL now uses the character trait "invalid" (ANSI

  - (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

  - 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 
    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

* 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 
    calling protocol.

  - Implemented all of the generic function initialization protocol 
    (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.




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

More information about the ecl-devel mailing list