ECL 11.1.1: =========== * Bugs fixed: - Several autoconf tests in src/aclocal.in did not work when cross compiling. - ECL defines the feature LONG-LONG when this type is available in the C compiler. - When LIST, LIST*, and some other functions appeared as toplevel forms, the interpreter compiled its arguments also as toplevel forms, causing their execution in the wrong order. - EXT:MAKE-FOREIGN-DATA-FROM-ARRAY now supports all unboxed types. - ECL did not properly compute the alignment of foreign types in structures. This is now done using standard C constructs in a portable and robust way. - Even if a function was compiled with a given set of optimizations, a call to PROCLAIM which appeared after the function could change the value of those optimizations and influence what the emitted C code looked like. - Solved a problem with type intersections between SIMPLE-ARRAY and ARRAY. - Logical pathnames are now translated to uppercase and, when converted into physical pathnames, translated back using case :common This means that #P"sys:foo.fas" is parsed as (make-pathname :host "SYS" :name "FOO" :type "FAS") and then (translate-logical-pathname #P"SYS:FOO.FAS") => "where/ecl/lives/foo.fas" - RENAME-FILE was not able to rename directories. - Detection of missing packages in the reader was accidentally deactivated. - When entering the debugger the reader/printer environment is now reset using with-standard-io-syntax. Formerly this was only done at a later stage, causing the list of restarts to show garbage. - We have removed the variable si::*break-enable* that was causing INVOKE-DEBUGGER to return. - ECL's support of :CASE has improved. Filenames preferred case is downcase, as in every Unix, while logical pathname's case is uppercase. Conversion between cases has also been fixed: formerly, MAKE-PATHNAME did not interpret :CASE as the original path case, but as the destination. - Out of the many pathname translations which are possible, ECL did not allow the one in which missing components are replaced by the original ones, as in '(("HM:HOME;*.*.*" "/home/user/"))) - Reduced the clutter generated by SETF expansions. * Visible changes: - "fasb" is now a valid FASL file type, accepted by ECL even in absence of ASDF. - EXT:GC ignores any argument passed to it. - ECL's compiler now understands the unboxed type :long-long. - A new special form, EXT:WITH-BACKEND allows us to select the code depending on whether it is going to be processed by the interpreter or by the C compiler. (defun example () (ext:with-backend :bytecodes (print 3) :c/c++ (print 2))) The two currently available backends are :bytecodes and :c/c++. - Added accurate type proclamations for all functions in the ANSI CL specification. - The compiler is now shipped as a single FASL file, cmp.fas, without extra files such as sysfun.lsp - DECLAIM proclamation and toplevel DEFMACRO definitions do not propagate beyond the compiled file. - AREF/ASET can now be open-coded by the C compiler. - Compilation policies (including optimization and safety checks) are now defined as flags that are activated and deactivated by certain optimization levels. In order for the flag to be active, all conditions have to be matched. For instance (define-policy inline-slot-access :on speed 1 :off debug 2 :off safety 2 "Inline access to structures and sealed classes") slot inlining would be activated by a SPEED of 1, but only if DEBUG and SAFETY are below 2. - Important performance improvements in sequence functions, such as FIND, SEARCH, REPLACE, POSITION, COUNT, REMOVE, DELETE, SUBSTITUTE, NSUBSTITUTE, DELETE-DUPLICATES, REMOVE-DUPLICATES and their possible IF/IF-NOT variants. Except COUNT, for efficiency, some of the previously mentioned functions may run through the sequences in arbitrary orders one or more times. - LOOP is now capable of declaring an iteration variable to have a more precise type (fixnum, single-float, etc), when the iteration limits are known, as in (LOOP FOR I FROM 0 TO 1000 ....) - ASSERT is now "cheaper", delegating the job on an auxiliary function and not creating any nonlocal jump structures (TAGBODY, etc). - ECL's dynamic foreign function interface, that is the FFI that works for interpreted and evaluated code and that does not need a C compiler, now depends on libffi -- without it, it will refuse to build. - ECL exports a new feature, :C++, when it is built with a C++ compiler. - Function proclamations and declarations are also used to deduce the type of their arguments. - (EXPT 2 -2.0d0) is now computed in double precision. - When building programs with ASDF:MAKE-BUILD, "prebuilt-asdf" may be listed in the dependencies, as the last one, so that ASDF is linked in. It is required by some packages that do not distinguish between compilation and distribution. - ECL now captures SIGPIPE. - In DEFMACRO forms, the &WHOLE argument may now be declared ignorable. Formerly it was always referenced by the destructuring code of the macro. - ECL mistakenly allowed the rational denominator to carry a sign, as in 1/-2. - When used with -debug and the command line options cause some error ECL oferts an ABORT and a CONTINUE restarts. - Loading binary files is no longer locking and can be done from several threads simultaneously. Note, however, that this may have unexpected consequences regarding things like creation of packages or class and function definition. - ECL will use long double whenever the type is avalailable AND the special functions cosl, sinl and similar are defined. - A new function, (EXT:DUMP-C-BACKTRACE suggested-depth) tries to print out the sequence of compiled and C functions called up to the current point. - --enable-rpath now defaults to YES. - ECL now ships a Windows icon which is added to the executable at build time. ;;; Local Variables: *** ;;; mode:text *** ;;; fill-column:79 *** ;;; End: ***