mirror of
https://gitlab.com/embeddable-common-lisp/ecl.git
synced 2026-01-01 07:10:34 -08:00
262 lines
9.7 KiB
Text
262 lines
9.7 KiB
Text
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: ***
|