mirror of
https://gitlab.com/embeddable-common-lisp/ecl.git
synced 2026-01-05 08:50:49 -08:00
330 lines
13 KiB
Text
330 lines
13 KiB
Text
ECL 1.0:
|
|
========
|
|
|
|
* New platforms:
|
|
|
|
- Support for GNU/kFreeBSD
|
|
|
|
- ECL has additionally been ported to GNU/Hurd (Pierre Thierry) and
|
|
HP NonStop S-Series (Craig McDaniel)
|
|
|
|
* New features:
|
|
|
|
- ECL now has POSIX condition variables when built with threads. Moreover,
|
|
locks can be now recursive or non-recursive, that is, the kind that signals
|
|
an error when tried to grabed twice from the same thread (Dan Corkill).
|
|
|
|
- SBCL's SERVE-EVENT package has been ported to ECL by Steve Smith.
|
|
|
|
- New commands, :RESTART, :R1, :R2, etc, allow invoking restarts (contributed
|
|
by Chui Tey).
|
|
|
|
- Interpreted functions can now be disassembled in the debugger. The commands
|
|
are :D and :DISASSEMBLE.
|
|
|
|
- New (private) function EXT::FUNCTION-LAMBDA-LIST, returns the lambda list of
|
|
a function whenever it was recorded.
|
|
|
|
- Implemented finalization on the lisp level. Only available for the Boehm
|
|
Weiser GC. Finalizers are closures which can be attached to objects
|
|
using SI:SET-FINALIZER and SI:GET-FINALIZER. Only one closure per
|
|
object is allowed.
|
|
|
|
- [Win32] Command-line arguments are now available for programs compiled with
|
|
:SYSTEM set to :WINDOWS (M. Goffioul)
|
|
|
|
- MAPCAR, MAPLIST, MAPC, MAPL, MAPCAN, MAPCON have now compiler macro functions
|
|
which create equivalent inlined forms.
|
|
|
|
- Support for C "long double" as lisp long-double datatype (originated from
|
|
a patch by Lars Brinkhoff). Still missing compiler support for unboxed
|
|
long double types.
|
|
|
|
- TIME outputs information about consed bytes and calls to the garbage
|
|
collector.
|
|
|
|
- MAKE-ARRAY accepts a foreign pointer as an argument to :DISPLACED-TO That
|
|
creates a lisp array on top of the foreign data and can be used to directly
|
|
scan C strings, or unboxed arrays of numbers.
|
|
|
|
- DFFI works now on AMD64 or Intel EMT64 (DFFI stands for Dynamical Foreign
|
|
Function Interface and it is the component that allows ECL call directly
|
|
C functions and create C callbacks without the C compiler being around).
|
|
(initial code by M. Goffioul)
|
|
|
|
- Using version 6.8 of the Boehm-Weiser garbage collector.
|
|
|
|
- Using version 4.2.1 of the GMP library.
|
|
|
|
- Random number generator based on the Mersenne-Twister algorithm (Based on
|
|
code contributed by Roy Zywina).
|
|
|
|
- GET-INTERNAL-RUN/REAL-TIME now have a better resolution of microseconds
|
|
when the platform allows it.
|
|
|
|
* Bugs fixed:
|
|
|
|
- Lexical environment variables were not marked as volatile and thus they
|
|
were sometimes clobbered by the C compiler.
|
|
|
|
- COMPILE-FILE-PATHNAME accepts the same keyword arguments as COMPILE-FILE.
|
|
|
|
- COMPILER-LET is not standard and belongs in the EXT package. However, it had
|
|
not been imported into the compiler and thus it did not work at all.
|
|
|
|
- Remove ancient, bogus optimizers for: ASH, LDB.
|
|
|
|
- MINGW's compiler is broken: it does not accept directories with trailing
|
|
slashes as an argument to "-I". We include a hack in cmpmain.lsp for that.
|
|
|
|
- Streamp signals an error for Gray streams.
|
|
|
|
- ENOUGH-NAMESTRING provided too large directory names (Contributed by Tim S)
|
|
|
|
- ADJUST-ARRAY accepted a fill-pointer even for arrays that did not have any.
|
|
|
|
- Instead of using SHORT-FLOAT and LONG-FLOAT as basic floating point types,
|
|
we use SINGLE-FLOAT and DOUBLE-FLOAT now. The names of the C functions have
|
|
changed accordingly (Contributed by Lars Brinkhoff).
|
|
|
|
- There was a problem with the variable capture when creating accessors
|
|
methods for classes.
|
|
|
|
- [Win32] Processes are now correctly listed with MP:ALL-PROCESSES (M. Goffioul)
|
|
|
|
- DIRECTORY behaves more according to people's expectations
|
|
(DIRECTORY "*/") => List all directories in current path
|
|
(DIRECTORY "*.*") => List all files in current path
|
|
This means you need to make two calls to DIRECTORY to get all the content of
|
|
it, but it allows you to select whether you want to list files or
|
|
not. Furthermore, the paths returned by DIRECTORY are more or less
|
|
guaranteed to match the mask -- the exception are links, for whose the
|
|
truename is returned.
|
|
|
|
- [Win32] DIRECTORY did not take the drive letter into account.
|
|
|
|
- [Win32] si_trap_fpe is now exported by ecl.dll
|
|
|
|
- Instead of sharing a single string buffer (cl_env.token), ECL now has a pool
|
|
of small strings which can be used for temporary operations. This fixes a
|
|
number of problems with the reader.
|
|
|
|
- DIRECTORY would always match NIL entries, independent of the mask. Now, the
|
|
following two statements differ:
|
|
(directory "foo*") => ("foo")
|
|
(directory "foo*.*") => ("foo" "foo.log")
|
|
|
|
- The code in contrib/sockets.lisp was not compatible with C++ because of
|
|
multiple implicit pointer conversions, and additionally it had some pointer
|
|
miscalculations.
|
|
|
|
- GET-INTERNAL-REAL-TIME now works on Windows with 1/60s precision
|
|
(contributed by Dustin Long)
|
|
|
|
- When :INITFORM was a constant variable but not self evaluating (i.e. not T,
|
|
NIL, or a keyword), it was not processed properly
|
|
(defclass a () ((a :initform most-positive-fixnum)))
|
|
(slot-value (make-instance a) 'a) => most-positive-fixnum
|
|
|
|
- The namestring "." was improperly parsed as having file type "".
|
|
|
|
- Now the file type is determined by the last dot in the name.
|
|
(pathname-type "foo.mpq.txt") => "txt"
|
|
|
|
- When iterating over a hash table we now check that the argument is really a
|
|
hash table.
|
|
|
|
- *COMPILE-VERBOSE* and *COMPILE-PRINT* now also have effect when compiling
|
|
isolated lambda forms using COMPILE. Additionally, these variables are
|
|
defined even without the compiler loaded.
|
|
|
|
- DESCRIBE was not prepare for the number range types returned by TYPE-OF.
|
|
|
|
- In OS X, ECL can now load shared libraries (Extension *.dylib) thanks
|
|
to using dlopen() instead of the obsolete NSLinkModule() function.
|
|
|
|
- (CONCATENATE 'STRING ...) does no longer have an ad-hoc limit in the number
|
|
of strings.
|
|
|
|
- Reader for #( did not always read the last parenthesis, what lead to a warning:
|
|
> #3(1 2 3)
|
|
#(1 2 3)
|
|
> ;;; Warning: Ignoring an unmatched right parenthesis.
|
|
|
|
- RANDOM no longer overflows when the input is a bignum that does not fit in a
|
|
double-float.
|
|
|
|
- MAKE-PATHNAME should remove all occurrences of single dots "." in physical
|
|
pathnames and does not interpret the directory component :BACK properly.
|
|
|
|
- ENOUGH-NAMESTRING did not simplify a pathname when it had the same directory
|
|
as the default pathname.
|
|
|
|
- Some toplevel forms with closures caused the compiler to abort, for example
|
|
(let ((data '(a b)))
|
|
(flet ((get-it ()
|
|
(second data)))
|
|
(defun print-it-1 ()
|
|
(print (get-it)))))
|
|
|
|
- COPY-READTABLE did not copy entries when supplied a second argument.
|
|
|
|
- When expanding tilde pathnames, as in "~/bin/foo", the device is also
|
|
taken into account. So if HOME=c:/jjgarcia, the previous path becomes
|
|
"c:/jjgarcia/bin/foo"
|
|
|
|
- If the homedir component contains a tilde itself, ECL entered an infinite
|
|
loop when expanding the pathname
|
|
|
|
- Now it should be possible to load the same FASL files multiple times,
|
|
even if previous instances have not completely garbage collected.
|
|
|
|
- SI:MKSTEMP now works on Windows for more than 26 temporary file names
|
|
(Dustin Long)
|
|
|
|
- There was no builtin type for loaded libraries.
|
|
|
|
- EXT:RUN-PROGRAM has now a keyword argument :WAIT, which defaults to T and
|
|
which determines whether the function should wait for the process to finish
|
|
before returning.
|
|
|
|
* Unicode:
|
|
|
|
- MAKE-STRING only allowed :ELEMENT-TYPE to be one of CHARACTER, BASE-CHAR, or
|
|
STANDARD-CHAR.
|
|
|
|
- The FFI will signal a type error when converting extended characters to
|
|
the C types "char" or "unsigned char".
|
|
|
|
- Unicode support for ALPHA-CHAR-P, ALPHANUMERICP, CHAR-UPCASE, CHAR-DOWNCASE,
|
|
etc, based on the ISO C99 library functions for wide characters.
|
|
|
|
- Following functions fixed to work with Unicode strings: EQUAL, EQUALP,
|
|
PARSE-INTEGER, STRING-TRIM, STRING-LEFT-TRIM, STRING-RIGHT-TRIM,
|
|
COPY-STRUCTURE, SHADOW.
|
|
|
|
- Most functions dealing with sequences (REMOVE, DELETE, etc) would
|
|
output a STRING even if the input was a BASE-STRING.
|
|
|
|
- TYPE-OF did not recognized EXTENDED-CHARs.
|
|
|
|
- Type BASE-STRING and STRING were defined as equivalent.
|
|
|
|
- Pathnames now allow extended strings in the names. Errors are signalled,
|
|
however, when a file name contains illegal characters. UTF-8 encoding
|
|
of file names is not supported.
|
|
|
|
* Other visible changes:
|
|
|
|
- New conditional feature, PREFIXED-API, signals that the internal C functions
|
|
now have a common prefix, "ecl_".
|
|
|
|
- The interpreter now makes an attempt at showing the offending form
|
|
when a syntax error happens.
|
|
> (progn (setq a 1) (setq b) (setq c 2))
|
|
In form
|
|
(SETQ B)
|
|
Syntax error: list with too few elements or improperly terminated.
|
|
Broken at SI:EVAL-WITH-ENV.No restarts available.
|
|
Broken at SI::BREAK-WHERE.
|
|
|
|
- The documentation shipped with ECL was outdated. To enforce moving on
|
|
to the new manual, the build and installation process now ignores anything
|
|
inside src/doc.
|
|
|
|
- LOAD no longer defaults to loading a file as binary if the file type is
|
|
different from FAS or FASL. Use either SI:LOAD-BINARY or configure the
|
|
variable SI:*LOAD-HOOKS* accordingly to load FASL files with unusual
|
|
extensions.
|
|
|
|
- EXT:PROCESS-COMMAND-ARGS now allows for a default rule.
|
|
|
|
- Variable EXT:*HELP-MESSAGE* and EXT:+DEFAULT-COMMAND-ARG-RULES+ exported.
|
|
|
|
- C:BUILD-PROGRAM now uses a unique prefix for the initialization function,
|
|
init_ECL_PROGRAM, to avoid collisions when both the program and a component
|
|
have the same name:
|
|
(C:BUILD-PROGRAM "ls" :lisp-files '("ls.o"))
|
|
|
|
- FFI:CLINES is no longer restricted to appear as a toplevel form. The
|
|
following code is thus valid:
|
|
(defun c-sin (x)
|
|
(ffi:clines "#include <math.h>")
|
|
(ffi:c-inline (x) (:double) :double "sin(#0)" :one-liner t))
|
|
|
|
- Minimized the number of headers included by ecl/ecl.h. In particular,
|
|
stdio.h, inittypes.h and pthread.h are no longer used.
|
|
|
|
- When a compiler finds a literal standard object, the load and initialization
|
|
forms it generates are now closer to the first reference to the object. This
|
|
allows to have, in the same file, a class definition and a constant which
|
|
is an object of that class.
|
|
|
|
- Support for hierarchical package names, as in Allegro Common-Lisp.
|
|
|
|
- The debugger now prints a list of available restarts.
|
|
|
|
- Added restarts to the errors signaled by several functions: SIN, COS, EXP,
|
|
EXPT, TAN, TANH, SINH, COSH, LOG, ATAN, RATIONAL, NUMERATOR, DENOMINATOR,
|
|
FLOOR, CEILING, ROUND, TRUNCATE, FLOAT-PRECISION, FLOAT-SIGN, DECODE-FLOAT,
|
|
SCALE-FLOAT, FLOAT-RADIX, FLOAT-DIGITS, INTEGER-DECODE-FLOAT, REALPART,
|
|
IMAGPART, COMPLEX, etc
|
|
|
|
- DIGIT-CHAR-P and DIGIT-CHAR will signal an error if the radix is not an
|
|
integer value between 2 and 36, both included.
|
|
|
|
- The slot accessors for structures with type VECTOR or LIST now rely on
|
|
the standard function ELT, instead of si:list-nth and si:rplaca-nthcdr.
|
|
|
|
- TYPE-OF returns expanded types for arrays. For instance,
|
|
(ARRAY CHARACTER (12)) instead of (STRING 12).
|
|
|
|
- C functions which disappear: si_set_compiled_function_name(),
|
|
si_extended_string_concatenate(), assert_type_string(),
|
|
assert_type_character(), assert_type_symbol(), make_symbol(),
|
|
parse_number(), parse_integer(), adjust_displaced().
|
|
|
|
- Lisp functions which disappear: si:set-compiled-function-name,
|
|
si:extended-string-concatenate, si:list-nth, si:rplaca-nthcdr.
|
|
|
|
- New C functions: ecl_stream_to_handle(), ecl_base_char_code(),
|
|
ecl_type_error(), ecl_check_cl_type(), ecl_check_type_string(),
|
|
ecl_fixnum_in_range(), ecl_stringp(), ecl_parse_number(),
|
|
ecl_parse_integer(), ecl_char(), ecl_char_set(), ecl_base_char_p().
|
|
|
|
- New Lisp functions: si:wrong-type-argument.
|
|
|
|
- Functions renamed: backup_fopen() -> ecl_backup_fopen() char_code() ->
|
|
ecl_char_code(), cl_log1() -> ecl_log1(), cl_log2() -> ecl_log2(),
|
|
NUMBER_TYPE() -> ECL_NUMBER_TYPE_P().
|
|
|
|
- Additionally, most functions have got now the prefix "ecl_"
|
|
|
|
- LOAD-FOREIGN-LIBRARY accepts an additional keyword argument :SYSTEM-LIBRARY
|
|
which, when true, tells ECL to link object files against the system version
|
|
of that library instead of directly referencing the shared library: i.e. use
|
|
linker flag -lmylib instead of libmylib.so (Brian Spilsbury)
|
|
|
|
- When compiling lisp files, ECL now creates different entry functions
|
|
depending on the file type. FASL, library and object files get a function
|
|
with the prefix {init_fas, init_lib, init_} prepended to the file name.
|
|
This solves the problem of a shared library having the same name as one
|
|
of the components it is made of.
|
|
|
|
- C:BUILDER searches the ASDF module list for libraries. (Thanks to F.R. Rideau)
|
|
|
|
- In Windows, CLX is no longer built by default: use "nmake ECL_CLX=1".
|
|
|
|
- ECL now uses standard Unix paths for installation: assuming prefix=/usr, the
|
|
shared library libecl.so is typically installed in /usr/lib/, the C header
|
|
files under /usr/include/ecl and all remaining data and FASL files under
|
|
/usr/lib/ecl.
|
|
|
|
* Contributed code:
|
|
|
|
- New examples: cmdline/ls.lsp, ffi/uffi.lsp, ffi/cffi.lsp
|
|
|
|
;;; Local Variables: ***
|
|
;;; mode:text ***
|
|
;;; fill-column:79 ***
|
|
;;; End: ***
|