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