[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
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).
More information about the ecl-devel
mailing list