[6e30d8]: ANNOUNCEMENT Maximize Restore History

Download this file

ANNOUNCEMENT    194 lines (131 with data), 7.4 kB

Announcement of ECL v0.9f

ECL stands for Embeddable Common-Lisp. The ECL project aims to produce an
implementation of the Common-Lisp language which complies to the ANSI X3J13
definition of the language.

The term embeddable refers to the fact that ECL includes a lisp to C compiler,
which allows to produce libraries (static or dynamic) that can be called from C
programs. Furthermore, ECL can produce standalone executables from your lisp

ECL supports the operating systems Linux, FreeBSD, NetBSD, Solaris (at least
v. 9), Microsoft Windows and OSX (including 10.4.2), 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 includes many bug fixes, as well as performance improvements. A
noticeable speed up happens at boot time, due to changes in the implementation
of SUBTYPEP, which make type comparisons much faster.

We have also introduced several bug fixes which seem to make ECL more friendly
towards GCC 4.0 At least this means ECL now builds on my iBook without
additional configuration flags. Please report if you experience any

ECL 0.9g

* Platforms:

 - Fixed the broken port for MacOSX. It should work with any release >= 10.2

 - Based on version 6.5 of Boehm-Weiser garbage collector, which fixes some
   problems related to the OSX port.

 - The latest version of Mingw32's GCC is broken. It silently ignores pathnames
   which end in '/'.  The include options in ECL have been modified to take
   this into account but this intrinsic bug of Mingw might influence ECL's
   behavior in some other unexpected ways.

 - The configuration in Solaris should now proceed with the flag

* Foreign function interface (FFI):

 - Added nickname UFFI for FFI package; functions ALLOCATE-FOREIGN-STRING,
   exported. (M. Pasternacki)

 - Ecl now accepts :CSTRING UFFI primitive type. (M. Pasternacki)

 - DEF-FOREIGN-VAR rewritten to make variables visible from other files and to
   dereference also arrays and pointers. (M. Pasternacki)

 - When creating a C-STRING, characters after the fill pointer are discarded,
   according to people's expectations.

* Compiler changes:

 - Generated C functions now have readable names corresponding to appropriate
   Lisp function names (M. Pasternacki)

 - ECL now compiles with the free Microsoft Visual C++ Toolkit
   2003. Instructions are provided on how to do it.

 - Unless SI:*KEEP-DOCUMENTATION* = NIL, the documentation of functions is
   stored in the compiled files.

 - COMPILE-FILE now honors the value of :OUTPUT-FILE given by the user, even if
   they do no have the usual extension (.fas). Furthermore, LOAD will now try
   to load files with strange extensions (.fas, .fasl, etc) as binary files and
   only if this fails, use the source-file loader.

 - .LSP/.LISP are now recognized lisp source extensions.

 - We now provide inline expansions for all logical operators.

 - We have changed the syntax both for function proclamantions and for inline
   expansions in sysfun.lsp Additionally, the checks for functions having side
   effects have been improved and inline expansions are now stored with a
   special-purpose structure INLINE-INFO.

* Errors fixed:

 - Now .o files compiled with :SYSTEM-P T with dash in filename load
   correctly. (M. Pasternacki)

 - Incorrectly loaded files are now unloaded without falling into infinite
   loop.  (M. Pasternacki)

 - When ECASE or CTYPECASE signal a TYPE-EROR the TYPE-ERROR-DATUM is the value
   that originated the error.

 - FDEFINITION did not signal a type error when passed things like '(SETF A B).

 - FUNCTION-LAMBDA-EXPRESSION does not fail, but does nothing useful, when
   passed a generic function.

 - Trying to execute an instance object that is not a generic function does no
   longer crashes ECL.

 - When signalling a READER-ERROR, the field reader-error-stream was not bound.

 - The random number generator assumed 32-bit integers.

 - ext:run-program looks into *standard-input/output* and *error-output* for handle
   duplication also under Win32.

 - FEtype_error_index() had format arguments in wrong order (M. Goffioul).

 - In the LOOP macro, variables are initialized with values of their type, no
   longer producing code like (LET ((C NIL)) (DECLARE (CHARACTER C)) ...)

 - The compiler now advertises itself with PROVIDE so that issuing (REQUIRE
   'CMP) twice does not cause the compiler to be loaded twice.

 - Fix error message of interpreted FFI:CLINES form (M. Goffioul).

 - Remove obsolete C::BUILD-ECL documentation (M. Goffioul).

 - The conversion from ratio to float works now even if the numerator/denominator
   are themselves too large to fit a float.

 - Fixnums and short-floats were compared using the "float" C type. This led to
   loss of precision and caused
	 (= (1+ (ceiling (rational -3.781832e7))) -3.781832e7) => T

 - Keyword arguments in a type defined with DEFTYPE, for which a default value
   is not given, default to '*. Also the DEFTYPE form are enclosed in a block
   with the name of the type.

 - The syntax of #\: can now be changed.

 - Adjusting displaced bit-vectors failed to take the displace-offset into

 - Variable SI::*GC-VERBOSE* controls whether ECL emits messages when FASL
   libraries are garbage colleced.

 - Values of EQL specializers are now evaluated in the lexical environment
   in which the DEFMETHOD is enclosed. This makes it now possible to write
	(defmethod foo (x) (defmethod bar ((f (eql x)))))

 - Fixes in the C code to comply with gcc 4.0.

* ANSI compatibility:

 - Several functions that signaled type-errors did not set the right values
   on the field TYPE-ERROR-EXPECTED-TYPE. We now use the following types:
	* valid function names => (SATISFIES EXT:VALID-FUNCTION-NAME-P)
	* proper list	       => PROPER-LIST = (OR (CONS T PROPER-LIST) NULL)
	* positive fixnum      => (INTEGER 0 MOST-POSITIVE-FIXNUM)
	* nonnegative integer  => (INTEGER 0 *)
	* index in a seq       => (INTEGER 0 L) where L is (1- (length sequence))

 - (COMPLEX *) is now recognized as valid type identifier by subtypep.

 - TYPE-OF now returns more precise type names, so that if (TYPE-OF x) = t1 and
   (TYPEP x t2) = T then (SUBTYPEP t1 t2) = T.

 - MAKE-PATHNAME now signals ordinary errors when the arguments do not have
   the required type, but signals a file error when it finds something like
   a wrong directory (i.e. '(:ABSOLUTE :UP)).

 - Pathnames which contain :BACK in the directory, now print as unreadable
   objects, instead of signaling an error when printing.

 - Declaration names cannot be used to define new type names and viceversa.

 - #\Space has constituent trait "invalid".

 - DEFINE-SETF-EXPANDER encloses the form in an implicit block with the name of
   the SETF function.

* New features:

 - Added function si:rmdir (M. Pasternacki)

 - There are now specialized arrays for 32 or 64 bits data, depending on the
   size of words in the platform.

;;; Local Variables: ***
;;; mode:text ***
;;; fill-column:79 ***
;;; End: ***