<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 TRANSITIONAL//EN">
<HTML>
<HEAD>
  <META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=UTF-8">
  <META NAME="GENERATOR" CONTENT="GtkHTML/3.6.2">
</HEAD>
<BODY>
Just before I go on holidays, I decided to make a package with the latest improvements. Please test it, and in case new bugs appear, report them.<BR>
<BR>
Juanjo<BR>
<BR>
--------<BR>
<BR>
<TT>Announcement of ECL v0.9f</TT><BR>
<TT>=========================</TT><BR>
<BR>
<TT>ECL stands for Embeddable Common-Lisp. The ECL project aims to produce an</TT><BR>
<TT>implementation of the Common-Lisp language which complies to the ANSI X3J13</TT><BR>
<TT>definition of the language.</TT><BR>
<BR>
<TT>The term embeddable refers to the fact that ECL includes a lisp to C compiler,</TT><BR>
<TT>which allows to produce libraries (static or dynamic) that can be called from C</TT><BR>
<TT>programs. Furthermore, ECL can produce standalone executables from your lisp</TT><BR>
<TT>code.</TT><BR>
<BR>
<TT>ECL supports the operating systems Linux, FreeBSD, NetBSD, Solaris (at least</TT><BR>
<TT>v. 9), Microsoft Windows and OSX (including 10.4.2), running on top of the</TT><BR>
<TT>Intel, Sparc, Alpha and PowerPC processors. Porting to other architectures</TT><BR>
<TT>should be rather easy.</TT><BR>
<BR>
<TT>ECL is currently hosted at SourceForge. The home page of the project is</TT><BR>
<TT>http://ecls.sourceforge.net, and in it you will find source code releases, a</TT><BR>
<TT>CVS tree and an up to date documentation.</TT><BR>
<BR>
<TT>Notes for this release</TT><BR>
<TT>======================</TT><BR>
<BR>
<TT>This release includes many bug fixes, as well as performance improvements. A</TT><BR>
<TT>noticeable speed up happens at boot time, due to changes in the implementation</TT><BR>
<TT>of SUBTYPEP, which make type comparisons much faster, as well as some fine</TT><BR>
<TT>tuning of the garbage collector.</TT><BR>
<BR>
<TT>We have also introduced several bug fixes which seem to make ECL more friendly</TT><BR>
<TT>towards GCC 4.0 At least this means ECL now builds on my iBook without</TT><BR>
<TT>additional configuration flags. Please report if you experience any</TT><BR>
<TT>difficulties.</TT><BR>
<BR>
<TT>ECL 0.9g</TT><BR>
<TT>========</TT><BR>
<BR>
<TT>* Platforms:</TT><BR>
<BR>
<TT> - Fixed the broken port for MacOSX. It should work with any release >= 10.2</TT><BR>
<BR>
<TT> - Based on version 6.5 of Boehm-Weiser garbage collector, which fixes some</TT><BR>
<TT>   problems related to the OSX port.</TT><BR>
<BR>
<TT> - The latest version of Mingw32's GCC is broken. It silently ignores pathnames</TT><BR>
<TT>   which end in '/'.  The include options in ECL have been modified to take</TT><BR>
<TT>   this into account but this intrinsic bug of Mingw might influence ECL's</TT><BR>
<TT>   behavior in some other unexpected ways.</TT><BR>
<BR>
<TT> - The configuration in Solaris should now proceed with the flag</TT><BR>
<TT>   --enable-slow-conf.</TT><BR>
<BR>
<TT>* Foreign function interface (FFI):</TT><BR>
<BR>
<TT> - Added nickname UFFI for FFI package; functions ALLOCATE-FOREIGN-STRING,</TT><BR>
<TT>   WITH-FOREIGN-STRING, WITH-FOREIGN-STRINGS, and FOREIGN-STRING-LENGTH are now</TT><BR>
<TT>   exported. (M. Pasternacki)</TT><BR>
<BR>
<TT> - Ecl now accepts :CSTRING UFFI primitive type. (M. Pasternacki)</TT><BR>
<BR>
<TT> - DEF-FOREIGN-VAR rewritten to make variables visible from other files and to</TT><BR>
<TT>   dereference also arrays and pointers. (M. Pasternacki)</TT><BR>
<BR>
<TT> - When creating a C-STRING, characters after the fill pointer are discarded,</TT><BR>
<TT>   according to people's expectations.</TT><BR>
<BR>
<TT>* Compiler changes:</TT><BR>
<BR>
<TT> - Generated C functions now have readable names corresponding to appropriate</TT><BR>
<TT>   Lisp function names (M. Pasternacki)</TT><BR>
<BR>
<TT> - ECL now compiles with the free Microsoft Visual C++ Toolkit</TT><BR>
<TT>   2003. Instructions are provided on how to do it.</TT><BR>
<BR>
<TT> - Unless SI:*KEEP-DOCUMENTATION* = NIL, the documentation of functions is</TT><BR>
<TT>   stored in the compiled files.</TT><BR>
<BR>
<TT> - COMPILE-FILE now honors the value of :OUTPUT-FILE given by the user, even if</TT><BR>
<TT>   they do no have the usual extension (.fas). Furthermore, LOAD will now try</TT><BR>
<TT>   to load files with strange extensions (.fas, .fasl, etc) as binary files and</TT><BR>
<TT>   only if this fails, use the source-file loader.</TT><BR>
<BR>
<TT> - .LSP/.LISP are now recognized lisp source extensions.</TT><BR>
<BR>
<TT> - We now provide inline expansions for all logical operators.</TT><BR>
<BR>
<TT> - We have changed the syntax both for function proclamantions and for inline</TT><BR>
<TT>   expansions in sysfun.lsp Additionally, the checks for functions having side</TT><BR>
<TT>   effects have been improved and inline expansions are now stored with a</TT><BR>
<TT>   special-purpose structure INLINE-INFO.</TT><BR>
<BR>
<TT>* Errors fixed:</TT><BR>
<BR>
<TT> - Now .o files compiled with :SYSTEM-P T with dash in filename load</TT><BR>
<TT>   correctly. (M. Pasternacki)</TT><BR>
<BR>
<TT> - Incorrectly loaded files are now unloaded without falling into infinite</TT><BR>
<TT>   loop.  (M. Pasternacki)</TT><BR>
<BR>
<TT> - When ECASE or CTYPECASE signal a TYPE-EROR the TYPE-ERROR-DATUM is the value</TT><BR>
<TT>   that originated the error.</TT><BR>
<BR>
<TT> - FDEFINITION did not signal a type error when passed things like '(SETF A B).</TT><BR>
<BR>
<TT> - FUNCTION-LAMBDA-EXPRESSION does not fail, but does nothing useful, when</TT><BR>
<TT>   passed a generic function.</TT><BR>
<BR>
<TT> - Trying to execute an instance object that is not a generic function does no</TT><BR>
<TT>   longer crashes ECL.</TT><BR>
<BR>
<TT> - When signalling a READER-ERROR, the field reader-error-stream was not bound.</TT><BR>
<BR>
<TT> - The random number generator assumed 32-bit integers.</TT><BR>
<BR>
<TT> - ext:run-program looks into *standard-input/output* and *error-output* for handle</TT><BR>
<TT>   duplication also under Win32.</TT><BR>
<BR>
<TT> - FEtype_error_index() had format arguments in wrong order (M. Goffioul).</TT><BR>
<BR>
<TT> - In the LOOP macro, variables are initialized with values of their type, no</TT><BR>
<TT>   longer producing code like (LET ((C NIL)) (DECLARE (CHARACTER C)) ...)</TT><BR>
<BR>
<TT> - The compiler now advertises itself with PROVIDE so that issuing (REQUIRE</TT><BR>
<TT>   'CMP) twice does not cause the compiler to be loaded twice.</TT><BR>
<BR>
<TT> - Fix error message of interpreted FFI:CLINES form (M. Goffioul).</TT><BR>
<BR>
<TT> - Remove obsolete C::BUILD-ECL documentation (M. Goffioul).</TT><BR>
<BR>
<TT> - The conversion from ratio to float works now even if the numerator/denominator</TT><BR>
<TT>   are themselves too large to fit a float.</TT><BR>
<BR>
<TT> - Fixnums and short-floats were compared using the "float" C type. This led to</TT><BR>
<TT>   loss of precision and caused</TT><BR>
<TT>       (= (1+ (ceiling (rational -3.781832e7))) -3.781832e7) => T</TT><BR>
<BR>
<TT> - Keyword arguments in a type defined with DEFTYPE, for which a default value</TT><BR>
<TT>   is not given, default to '*. Also the DEFTYPE form are enclosed in a block</TT><BR>
<TT>   with the name of the type.</TT><BR>
<BR>
<TT> - The syntax of #\: can now be changed.</TT><BR>
<BR>
<TT> - Adjusting displaced bit-vectors failed to take the displace-offset into</TT><BR>
<TT>   account.</TT><BR>
<BR>
<TT> - Variable SI::*GC-VERBOSE* controls whether ECL emits messages when FASL</TT><BR>
<TT>   libraries are garbage colleced.</TT><BR>
<BR>
<TT> - Values of EQL specializers are now evaluated in the lexical environment</TT><BR>
<TT>   in which the DEFMETHOD is enclosed. This makes it now possible to write</TT><BR>
<TT>      (defmethod foo (x) (defmethod bar ((f (eql x)))))</TT><BR>
<BR>
<TT> - Fixes in the C code to comply with gcc 4.0.</TT><BR>
<BR>
<TT>* ANSI compatibility:</TT><BR>
<BR>
<TT> - Several functions that signaled type-errors did not set the right values</TT><BR>
<TT>   on the field TYPE-ERROR-EXPECTED-TYPE. We now use the following types:</TT><BR>
<TT>      * valid function names => (SATISFIES EXT:VALID-FUNCTION-NAME-P)</TT><BR>
<TT>      * proper list          => PROPER-LIST = (OR (CONS T PROPER-LIST) NULL)</TT><BR>
<TT>      * positive fixnum      => (INTEGER 0 MOST-POSITIVE-FIXNUM)</TT><BR>
<TT>      * nonnegative integer  => (INTEGER 0 *)</TT><BR>
<TT>      * index in a seq       => (INTEGER 0 L) where L is (1- (length sequence))</TT><BR>
<BR>
<TT> - (COMPLEX *) is now recognized as valid type identifier by subtypep.</TT><BR>
<BR>
<TT> - TYPE-OF now returns more precise type names, so that if (TYPE-OF x) = t1 and</TT><BR>
<TT>   (TYPEP x t2) = T then (SUBTYPEP t1 t2) = T.</TT><BR>
<BR>
<TT> - MAKE-PATHNAME now signals ordinary errors when the arguments do not have</TT><BR>
<TT>   the required type, but signals a file error when it finds something like</TT><BR>
<TT>   a wrong directory (i.e. '(:ABSOLUTE :UP)).</TT><BR>
<BR>
<TT> - Pathnames which contain :BACK in the directory, now print as unreadable</TT><BR>
<TT>   objects, instead of signaling an error when printing.</TT><BR>
<BR>
<TT> - Declaration names cannot be used to define new type names and viceversa.</TT><BR>
<BR>
<TT> - #\Space has constituent trait "invalid".</TT><BR>
<BR>
<TT> - DEFINE-SETF-EXPANDER encloses the form in an implicit block with the name of</TT><BR>
<TT>   the SETF function.</TT><BR>
<BR>
<TT>* New features:</TT><BR>
<BR>
<TT> - Added function si:rmdir (M. Pasternacki)</TT><BR>
<BR>
<TT> - There are now specialized arrays for 32 or 64 bits data, depending on the</TT><BR>
<TT>   size of words in the platform.</TT><BR>
<BR>
</BODY>
</HTML>