2.49 (2010-07-07) ================= User visible changes -------------------- * New command line option -disable-readline lets working around bugs and incompatibilities between readline CLISP was built against and the library actually installed. See for details. * FFI:OPEN-FOREIGN-LIBRARY now accepts the :REQUIRE argument. See for details. * New user variable CUSTOM:*USER-LIB-DIRECTORY* is respected by REQUIRE and used by "clisp-link install". Dynamic modules are now the default build option. See and for details. * Function RENAME-FILE now accepts :IF-EXISTS argument which determines the action when the destination exists, unless, of course, *ANSI* is T. See for details. * The replacement value entered by the user in STORE-VALUE and USE-VALUE restarts is now EVALuated. * The old user variable CUSTOM:*PRINT-CLOSURE* now controls interpreted closure output too (RFE#3001956). This is a tricky feature, read up! See . * Module readline now supports readline 6.1. (Older versions are, of course, still supported). See for details. * Module pcre now supports pcre 8.01. (Older versions are, of course, still supported). See for details. * Module libsvm does not come with the upstream sources anymore, install locally and pass --with-libsvm-prefix to the top-level configure instead. All upstream versions up to 2.91 are supported. See for details. * Module berkeley-db now supports Berkeley-DB 4.8. (Older versions are, of course, still supported). See for details. * Module postgresql now supports PostgreSQL 8.4. (Older versions are, of course, still supported). See for details. * Module pari has been updated to support both 64 & 32 bit platforms with and without GMP. See for details. * New functions OS:VERSION-COMPARE et al call strverscmp. See for details. * Bug fixes: + Do not eliminate function calls which are advertised to have exceptional situation in unsafe code (bug#2868166). + Fix an internal error in DECLAIM on bad OPTIMIZE quality (bug#2868147). + CLEAR-INPUT now clears the EOF condition on file streams (bug#2902716). + When quitting on a signal, never enter the debugger (bug#2795278). + Respect :FULL T in DIRECTORY :WILD-INFERIORS (bug#3009966). + Handle TWO-WAY-STREAM and ECHO-STREAM correctly by (SETF STREAM-EXTERNAL-FORMAT) (bug#3020933). + Fix unbuffered output pipe stream initialization (bug#3024887). * ANSI compliance: + Implement the ANSI issue COMPILER-DIAGNOSTICS:USE-HANDLER: use the CL Condition System for compiler diagnostics. + STREAM-ELEMENT-TYPE on empty CONCATENATED-STREAMs now returns NIL because nothing can be read from such streams (bug#3014921). 2.48 (2009-07-28) ================= User visible changes -------------------- * Multiple threads of execution are now experimentally supported (not ready for prime time yet). Thanks to Vladimir Tzankov . See for details. * Module libsvm has been upgraded to the upstream version 2.89. See for details. * Module Berkeley-DB now supports Berkeley DB 4.7. (older versions 4.* are, of course, still supported). See for details. * Module readline now supports readline 6.0. (older versions 5.* are, of course, still supported). See for details. * Passing :EXECUTABLE 0 to EXT:SAVEINITMEM results in an executable image which delegates processing of all the usual CLISP command line options to the :INIT-FUNCTION. See for details. * Driver clisp accepts "-b" to print the installation directory. See for details. * Add file clisp.m4 so that the packages which use CLISP can check whether it is properly installed and has the required version. * POSIX:COPY-FILE now accepts :METHOD :HARDLINK-OR-COPY. See for details. * New function POSIX:WAIT calls waitpid or wait4. See for details. * New function EXT:TRIM-IF removes leading and trailing matches. See for details. * New user command "LocalSymbols" (abbreviated ":ls"). See for details. * Commands "add" and "create" replace "add-module-set", "add-module-sets" and "create-module-set" in clisp-link. See for details. * Bug fixes: + Better support of :START and :END arguments in NEW-CLX (bug#2159172). + Fix LOAD-LOGICAL-PATHNAME-TRANSLATIONS when *LOAD-PATHS* contains wild pathnames (introduced in 2.47) (bug#2198109). + Module NEW-CLX now has the XLIB:QUEUE-EVENT function, implemented by Philippe Brochard . + Extend the domain of LOG to larger BIGNUMs and RATIOs (bug#1007358). + Avoid a segfault on (EXPT ) (bug#2807311). + Fix interaction of finalizers and weak objects (bug#1472478). * ANSI compliance: + Implement the ANSI (IGNORE #'FUNCTION) declaration. 2.47 (2008-10-23) ================= User visible changes -------------------- * New module DBUS interfaces to the D-Bus message bus system. See for details. * New function EXT:PROBE-PATHNAME can figure out whether the existing pathname refers to a file or a directory. See for details. * New function EXT:CANONICALIZE lets you easily canonicalize a value before processing it. See for details. * New user variable CUSTOM:*REOPEN-OPEN-FILE* controls CLISP behavior when opening an already open file. See for details. * New SETFable function OS:FILE-SIZE extends FILE-LENGTH to pathname designators and lets you change file size. See for details. New function OS:USER-SHELLS returns the list of legal user shells. See for details. New SETFable functions OS:HOSTID and OS:DOMAINNAME. See for details. * Module readline has been upgraded to readline 5.2 (older versions 5.0 and 5.1 are, of course, still supported). See for details. * LOAD now uses DIRECTORY only for wild *LOAD-PATHS* components, thus speeding up the most common cases and preventing the denial-of-service attack whereas CLISP would not start if a file with a name incompatible with *PATHNAME-ENCODING* is present in USER-HOMEDIR-PATHNAME. * ROOM now prints some GC statistics and returns the same values as GC. See for details. * New user variable CUSTOM:*HTTP-LOG-STREAM* controls EXT:OPEN-HTTP logging. See for details. * Bug fixes: + Comparison of floats and rationals never underflows (bug#2014262). + When failing to convert a huge LONG-FLOAT to a RATIONAL, signal an ARITHMETIC-ERROR instead of blowing the stack (bug#2015118). + Restored TYPECODES g++ compilation (bug#1385641), which allowed fixing a few GC-safety bugs. + Fixed a segfault when signaling some UNBOUND-VARIABLE errors in some interpreted code on MacOS X (introduced in 2.46) (bug#2020784). Thanks to Vladimir Tzankov . + Fixed input after switching a :DOS stream to binary (bug#2022362). + Support circular objects in EQUAL and EQUALP hash-tables (bug#2029069). + Avoid C namespace pollution (bug#2146126). + Fix timeout precision in NEW-CLX (bug#2188102). * ANSI compliance: + The sets of declaration and type names are disjoint. + FLET, LABELS and MACROLET respect declarations. 2.46 (2008-07-02) ================= User visible changes -------------------- * CLISP built natively on 64-bit platforms (i.e., with 64-bit pointers) now has :WORD-SIZE=64 in *FEATURES*. See for details. * Module syscalls now offers OS:ERRNO and OS:STRERROR (for the sake of FFI modules). See for details. * Modules MIT-CLX and NEW-CLX export a new macro XLIB:WITH-OPEN-DISPLAY. * Module netica has been upgraded to the Netica C API version 3.25 (from 2.15). See for details. * Module libsvm has been upgraded to the upstream version 2.86. See for details. * Bug fixes: + Work around the absence of tgamma on solaris (bug#1966375). + Avoid a rare segfault on SIGHUP (bug#1956715). + Improve module portability to systems with non-GNU make (bug#1970141). + Fix GRAY:STREAM-READ-SEQUENCE and GRAY:STREAM-WRITE-SEQUENCE (bug#1975798). + Fix the remaining bugs in special bindings in evaluated code on TYPECODES (64-bit) platforms. + Fix SOCKET:SOCKET-CONNECT with timeout to a dead port (bug#2007052). 2.45 (2008-05-15) ================= Important notes --------------- * All .fas files generated by previous CLISP versions are invalid and must be recompiled. This is because the Just-In-Time Compiled code is kept with the closures. Set CUSTOM:*LOAD-OBSOLETE-ACTION* to :COMPILE to automate this. See for details. User visible changes -------------------- * The top-level configure option --build has been replaced by --cbc (Configure/Build/Check) to avoid conflict with the standard autoconf option. * Experimental Just-In-Time Compilation of byte-compiled closures is now done using GNU lightning (this is a configure-time option). Thanks to Yann Dauphin . * New command-line option -lp adds directories to *LOAD-PATHS*. See for details. * New function FFI:OPEN-FOREIGN-LIBRARY allows pre-opening of shared libraries. See for details. * New macro EXT:COMPILE-TIME-VALUE allows computing values at file compilation. See for details. * New function FFI:FOREIGN-POINTER-INFO allows some introspection. See for details. * Versioned library symbols are now accessible via the :VERSION argument of DEF-CALL-OUT and DEF-C-VAR. Thanks to Kaz Kylheku . See for details. * New functions GRAY:STREAM-READ-SEQUENCE and GRAY:STREAM-WRITE-SEQUENCE have been added for portability reasons. Suggested by Anton Vodonosov . See for details. * New user variable CUSTOM:*SUPPRESS-SIMILAR-CONSTANT-REDEFINITION-WARNING* controls whether the redefinition warning is issues when the new constant value is visually similar to the old one. See for details. * REPL commands can now accept arguments. See for details. * Updated the postgresql module to PostgreSQL 8.3. See for details. * Module syscalls now interfaces to (for the sake of FFI modules). See for details. There are others additions there also, but they are too numerous to be enumerated here. * Bug fixes: + Fix handling of quoted objects by READ-PRESERVING-WHITESPACE (bug#1890854). + Fix rectangle count in NEW-CLX XLIB:SET-GCONTEXT-CLIP-MASK (bug#1918017). + Fix argument handling in NEW-CLX XLIB:QUERY-COLORS (bug#1931101). + Fix compilation on systems not supporting returning void (bug#1924506). + Fix TANH floating point overflow for large floats (bug#1683394). + Avoid extra aggressive bignum overflow reporting in READ (bug#1928735). + Improved floating point number formatting. (bug#1790496, bug#1928759) + COMPILE no longer discards MACRO doc strings (bug#1936255). + Improved accuracy of LOG on complex numbers (bug#1934968). + Fix COERCE for compound float result-types (bug#1942246). + Fix $http_proxy parsing (bug#1959436). + Fix LISTEN on buffered streams when the last character was CRLF (bug#1961475). + Cross-compilation process has been restored to its former glory, thanks to the valiant and persistent testing by Vladimir Volovich . (bug#1928920, bug#1929496, bug#1929516, bug#1931097) 2.44.1 (2008-02-23) =================== User visible changes -------------------- * Bug fixes: + Add a workaround against a gcc 4.2.x bug (bug#1836142). + Fix error in compilation of floatparam.c during configuration with gcc 4.3 snapshots (bug#1836142). 2.44 (2008-02-02) ================= User visible changes -------------------- * CLISP does not come with GNU libffcall anymore. This is now a separate package and should be installed separately. Pass --with-libffcall-prefix to the top-level configure if it is not installed in a standard place. Option --with-dynamic-ffi is now replaced with --with-ffcall. * CLOS now issues warnings of type CLOS:CLOS-WARNING. See for details. * The AFFI (simple ffi, originally for Amiga) code has been removed. * Speed up list and sequence functions when :TEST is EQ, EQL, EQUAL or EQUALP. * Rename EXT:DELETE-DIR, EXT:MAKE-DIR, and EXT:RENAME-DIR to EXT:DELETE-DIRECTORY, EXT:MAKE-DIRECTORY, and EXT:RENAME-DIRECTORY, respectively, for consistency with EXT:PROBE-DIRECTORY, EXT:DEFAULT-DIRECTORY and CL:PATHNAME-DIRECTORY. The old names are still available, but deprecated. * The :VERBOSE argument to SAVEINITMEM defaults to a new user variable *SAVEINITMEM-VERBOSE*, initial value T. See for details. * Bug fixes: + Fix FRESH-LINE at the end of a line containing only TABs (bug#1834193). + PPRINT-LOGICAL-BLOCK no longer ignores *PRINT-PPRINT-DISPATCH-TABLE* (bug#1835520). + BYTE is now a full-fledged type (bug#1854698). + Fix linux:dirent definition in the bindings/glibc module (bug#1779490). + Symbolic links into non-existent directories can now be deleted (bug#1860489). + DIRECTORY :FULL on directories now returns the same information as on files (bug#1860677). + CLISP no longer hangs at the end of a script coming via a pipe ("clisp < script.lisp" or "cat script | clisp") (bug#1865567). + When *CURRENT-LANGUAGE* is incompatible with *TERMINAL-ENCODING*, CLISP no longer goes into an infinite recursion trying to print various help messages (bug#1865636). + Fix the "Quit" debugger command (bug#1448744). + Repeated terminating signals kill CLISP instantly with the correct exit code (bug#1871205). + Stack inspection is now safer (bug#1506316). + Errors in the RC-file and init files are now handled properly (bug#1714737). + Avoid the growth of the restart set with each image save (bug#1877497). + Handle foreign functions coming from the old image which cannot be validated (bug#1407486). + Fix signal code in bindings/glibc/linux.lisp (bug#1781476). 2.43 (2007-11-18) ================= User visible changes -------------------- * Infrastructure: + Top-level configure now accepts a new option --vimdir which specifies the installation directory for the VIM files (lisp.vim). The default value is ${datadir}/vim/vimfiles/after/syntax/. Thus, lisp.vim is now installed by "make install", and should be included in the 3rd party distributions. + Top-level configure now always runs makemake, and makemake no longer is a "user-level" command; do not run it unless you know what you are doing. This brings the CLISP build process in compliance with the GNU standards. + We now use gnulib-tool to sync with gnulib (not really user visible, but a major infrastructure change). * Portability: + Support for ancient systems with broken CPP have been dropped. This includes AIX 4.2, Coherent386, Ultrix, MSVC4, MSVC5. + NeXT application (GUI) code has been removed. Plain TTY is still supported. * Module Berkeley-DB now supports Berkeley DB 4.5 & 4.6. * Bug fixes: + FORCE-OUTPUT breakage on MacOS X when stdout is not a terminal (bug#1827572). + Fixed *PRINT-PPRINT-DISPATCH* binding in WITH-STANDARD-IO-SYNTAX (bug#1831367). 2.42 (2007-10-16) ================= User visible changes -------------------- * New module gtk2 interfaces to GTK+ v2 and makes it possible to build GUI with Glade. Thanks to James Bailey for the original code. See for details. * New module gdbm interfaces to GNU DataBase Manager. Thanks to Masayuki Onjo . See for details. * A kind of Meta-Object Protocol for structures is now available. See for details. * Module libsvm has been upgraded to the upstream version 2.84. See for details. * NEW-CLX module now supports Stumpwm . Thanks to Shawn Betts . New NEW-CLX demos: bball bwindow greynetic hanoi petal plaid recurrence from . New NEW-CLX demo: clclock based on . New function XLIB:OPEN-DEFAULT-DISPLAY from portable CLX. * Function EXT:ARGLIST now works on macros too. See for details. * Macro TRACE has a new option :BINDINGS, which is useful to share data between PRE-* and POST-* forms. See for details. * Macro FFI:DEF-C-TYPE can now be called with one argument to define an integer type. See for details. * New function EXT:RENAME-DIR can be used to rename directories. See for details. * Functions FILE-LENGTH and FILE-POSITION now work on unbuffered streams too. See for details. * Bug fixes: + Fixed EXT:LETF to work with more than one place (bug#1731462). + Fixed rounding of long floats [even+1/2] (bug#1589311). + Fixed stdio when running without a TTY, e.g., under SSH (bug#1592343). + ANSI compliance: PPRINT dispatch is now respected for nested objects, not just the top-level (bug#1483768, bug#1598053). + Fixed print-read-consistency of strings containing #\Return characters (manifested by COMPILE-FILE) (bug#1578179). + Fixed "clisp-link run" (bug#1469663). + Fixed ATANH branch cut continuity (bug#1436987). + Reset the function lambda expression when loading a compiled file (bug#1603260). + DOCUMENTATION set by SETF is now preserved by COMPILE (bug#1604579). + LISTEN now calls STREAM-LISTEN as per the Gray proposal (bug#1607666). + IMPORT into the KEYWORD package does not make a symbol a constant variable (bug#1612859). + DEFPACKAGE code was executed during non top-level compilation (bug#1612313). + Fixed format error message formatting (bug#1482465). + Fixed *PPRINT-FIRST-NEWLINE* handling (bug#1412454). + Improved hash code generation for very large bignums and for long lists (bug#948868, bug#1208124). + Some bugs related to UNICODE-16 & UNICODE-32 (bug#1564818, bug#1631760, bug#1632718). + All exported defined symbols are now properly locked (bug#1713130). + Berkeley-DB module no longer fills up error log file (bug#1779416). + New-clx now supports 64-bit KeySym (bug#1797132). 2.41 (2006-10-13) ================= User visible changes -------------------- * New module libsvm interfaces to and makes Support Vector Machines available in CLISP. See for details. * FASTCGI:GETENV is now compatible with EXT:GETENV and can return the entire environment as an alist. * The same internal interface now handles FFI forms DEF-CALL-OUT and DEF-C-VAR regardless of the presence of the :LIBRARY argument. (:LIBRARY NIL) is now identical to omitting the :LIBRARY argument. The default for the :LIBRARY argument is set by FFI:DEFAULT-FOREIGN-LIBRARY per compilation unit. See for details. * Bug fixes: + DOCUMENTATION on built-in functions was broken on some platforms (bug#1569234). + Fixed FFI callbacks, broken since the 2.36 release. + Fixed the way the top-level driver handles the "--" option terminator. + Fixed COMPILE of APPLY in LABELS for local function (bug#1575946). 2.40 (2006-09-23) ================= Important notes --------------- * All .fas files generated by previous CLISP versions are invalid and must be recompiled. This is because DOCUMENTATION and LAMBDA-LIST are now kept with the closures. Set CUSTOM:*LOAD-OBSOLETE-ACTION* to :COMPILE to automate this. See for details. User visible changes -------------------- * Infrastructure + Top-level configure now accepts a new option --elispdir which specifies the installation directory for the Emacs Lisp files (clhs.el et al). The default value is ${datadir}/emacs/site-lisp/. Thus, clhs.el at al are now installed by "make install", and should be included in the 3rd party distributions. + Top-level configure now accepts variables on command line, e.g., ./configure CC=g++ CFLAGS=-g * Function PCRE:PCRE-EXEC accepts :DFA and calls pcre_dfa_exec() when built against PCRE v6. See . * New functions RAWSOCK:IF-NAME-INDEX, RAWSOCK:IFADDRS. See . * When the OPTIMIZE SPACE level is low enough, keep function documentation and lambda list. See . * Bug fixes: + Make it possible to set *IMPNOTES-ROOT-DEFAULT* and *CLHS-ROOT-DEFAULT* to local paths, as opposed to URLs (bug#1494059). + Fix the evaluation order of initialization and :INITIALLY forms in then extended LOOP (bug#1516684). + Do not allow non-symbols as names of anonymous classes (bug#1528201). + REINITIALIZE-INSTANCE now calls FINALIZE-INHERITANCE (bug#1526448). + Fix the RAWSOCK module on big-endian platforms (bug#1529244). + PRINT-OBJECT now works on built-in objects (bug#1482533). + ADJUST-ARRAY signals an error if :FILL-POINTER is supplied and non-NIL but the non-adjustable array has no fill pointer, as per ANSI (bug#1538333). + MAKE-PATHNAME no longer ignores explicit :DIRECTORY NIL (thanks to Stephen Compall ) (bug#1550803). + Executable images now work on ia64 (thanks to Dr. Werner Fink ). + MAKE-PATHNAME on win32 now handles correctly directories that start with a non-string (e.g., :WILD) (bug#1555096). + SOCKET-STREAM-PEER and SOCKET-STREAM-LOCAL had do-not-resolve-p inverted since 2.37. + Set functions with :TEST 'EQUALP were broken on large lists (bug#1567186). 2.39 (2006-07-16) ================= User visible changes -------------------- * SAVEINITMEM now accepts :SCRIPT argument that disables interpreting the first positional argument as the script name; and :DOCUMENTATION argument that is printed by the new -help-image command line option. See and for details. * FFI:UINT64 and FFI:SINT64 are now compatible with C's long long type. * Stack overflow detection and recovery finally work fine on Unix. Libsigsegv is required for this, on all platforms (including MS-Windows). CLISP should neither exit nor crash under infinite recursion. If your distribution has CLISP compiled without libsigsegv, report the missing feature to its maintainer. Note that libsigsegv 2.4 is required, there are bugs in libsigsegv 2.3! * It is now possible to specify the default method-combination of a generic function, to be used when the DEFGENERIC form does not specify the :METHOD-COMBINATION explicitly, through a default initarg specification for the :METHOD-COMBINATION keyword on the generic function class. * Readline completion works with non 1:1 terminal encodings, e.g. UTF-8. * WITH-KEYBOARD works with the terminal even when SLIME hijacks *TERMINAL-IO*. * I/O operations on Win32 are now much faster. * New functions: POSIX:FFS, POSIX:PATHCONF. * Infrastructure: + Top-level configure now accepts a new option --with-gmalloc to use the GNU malloc implementation instead of the one supplied by libc. You may need it on older HP-UX and newer OpenBSD systems. See file unix/PLATFORMS for more information. + The value of the environment variable CFLAGS is respected by configure. * Bug fixes: + SOCKET:SOCKET-SERVER :INTERFACE now behaves as documented. + EXT:READ-BYTE-NO-HANG and SOCKET:SOCKET-STATUS used to hang on buffered binary sockets. + Allow DESTRUCTURING-BIND (a . b) with circular and dotted lists. + ADJUST-ARRAY of zero length adjustable string now works. + TIME now reports correct results when the heap grows over 4GB. + RAWSOCK functions now handle :START/:END arguments correctly. + BDB:DBC-GET now accepts :READ-COMMITTED and :READ-UNCOMMITTED. + POSIX:GROUP-INFO and POSIX:USER-INFO now handle errors correctly. * Portability: + Support DragonFly BSD. 2.38 (2006-01-24) ================= User visible changes -------------------- * SAVEINITMEM can create standalone executables. Thanks to Frank Buß for the idea. SAVEINITMEM also accepts :NORC argument to disable RC-file loading. See for details. * POSIX:SYSLOG no longer recognizes "%m" and other formatting instructions. For your safety and security, please do all formatting in Lisp. * Fixed the OPEN :IF-EXISTS :APPEND bug introduced in 2.37. * Fixed a crash on woe32 in opening files with names longer than MAX_PATH. * Module Berkeley-DB now supports Berkeley DB 4.4. 2.37 (2006-01-02) ================= User visible changes -------------------- * Signal a continuable error when an already opened file is opened again, unless both streams are read-only. * SOCKET-SERVER now accepts :BACKLOG and :INTERFACE arguments. The first (optional) argument should be the port number or NIL. Use (SOCKET-SERVER NIL :INTERFACE SOCKET) instead of (SOCKET-SERVER SOCKET). Thanks to Tomas Zellerin . See for details. * EXT:HTTP-PROXY now uses the environment variable "http_proxy", like curl does, not "HTTP_PROXY", to avoid confusing it with CGI arguments. * OPEN :DIRECTION :OUTPUT now creates write-only handles and treats named pipes correctly. * Fixed EXT:SETENV on non-POSIX systems (woe32 and BSD derivatives). * Fixed a bug in EXT:! on 64-bit platforms. Thanks to Dr. Werner Fink . 2.36 (2005-12-04) ================= User visible changes -------------------- * Infrastructure: + Top-level configure now accepts the option --enable-maintainer-mode that affects autoconf-related Makefile targets. The default value is determined based on the presence of the CVS directories. + When libsigsegv is not found, print instructions on getting/building libsigsegv and bail out; override with --ignore-absence-of-libsigsegv. + When --with-dynamic-ffi is supplied, but the FFI fails to build, abort. + When --with-readline is supplied, but GNU readline is not found, abort. + makemake no longer checks with_module_* variables. * New function EXT:OPEN-HTTP and macro EXT:WITH-HTTP-INPUT. See for details. * New declaration EXT:NOTSPECIAL undoes the effects of DEFVAR and DEFCONSTANT. See for details. * Function EXT:CLHS is now deprecated in favor of DESCRIBE, which can now point your web browser to the ANSI CL and CLISP-specific documentation. See for details. * FFI modules can now take advantage of autoconf feature detection. See for details. * New FFI macro FFI:DEF-C-CONST. See for details. * New charset BASE64 encodes arbitrary byte sequences with strings of printable ASCII characters (4 characters per 3 bytes). See for details. * New module readline offers some advanced readline and history features. It is a BASE module and is available when both FFI and readline are present. * SOCKET:SOCKET-SERVICE-PORT is now deprecated in favor of OS:SERVICE. See for details. * New SETF-able functions POSIX:GETUID, POSIX:GETGID, POSIX:GETEUID, POSIX:GETEGID. New functions POSIX:GROUP-INFO and POSIX:STRING-TIME. Function POSIX:USER-DATA is renamed to POSIX:USER-INFO. See for details. * New NEW-CLX demo: koch.lisp draws fractal snowflakes. Implemented XLIB:SET-MODIFIER-MAPPING, XLIB:KEYSYM->KEYCODES, XLIB:ACCESS-HOSTS, XLIB:ADD-ACCESS-HOST, XLIB:REMOVE-ACCESS-HOST, XLIB:CHANGE-KEYBOARD-CONTROL, XLIB:CHANGE-KEYBOARD-MAPPING, XLIB:KEYBOARD-MAPPING, XLIB:KEYSYM-NAME, XLIB:KEYCODE->CHARACTER, XLIB:SHAPE-EXTENTS, XLIB:SHAPE-RECTANGLES, XLIB:DEFAULT-KEYSYM-INDEX. Use MAP instead of ELT for sequence access in NEW-CLX. * ANSI CL compliance issues: + DEFPACKAGE options :SHADOWING-IMPORT-FROM, :USE, :IMPORT-FROM accept package designators, not just package names. + ENCODE-UNIVERSAL-TIME is now the perfect inverse for DECODE-UNIVERSAL-TIME. * The command line option -v now affects *LOAD-ECHO* also. See for details. * When a CLISP process is killed, clean-up is always executed. * DEFCLASS now permits user-defined :ALLOCATION arguments. * Fixed (FUNCTION-LAMBDA-EXPRESSION #'(SETF FOO)) on compiled functions. * Fixed re-exporting symbols from POSIX to EXT. * Fixed module rawsock on platforms with non-trivial struct sockaddr layout. Functions that take a BUFFER argument, also take :START and :END arguments. Renamed RAWSOCK:LISTEN to RAWSOCK:SOCK-LISTEN to avoid a conflict with CL. New functions RAWSOCK:PROTOCOL, RAWSOCK:NETWORK, RAWSOCK:GETADDRINFO, RAWSOCK:GETNAMEINFO. See for details. * Fixed module postgresql logging behavior. * Fixed clisp.h generation to conform to the internal definitions. 2.35 (2005-08-29) ================= User visible changes -------------------- * SOCKET:SOCKET-STREAM-SHUTDOWN does not call CLOSE anymore, just shutdown(2) - as it has always been documented. It now also works on raw sockets, thus RAWSOCK:SHUTDOWN has been removed. See and for details. * When the command line option -E receives an invalid encoding, ISO-8859-1 is used instead. [It was ASCII (for *FOREIGN-ENCODING*) or UTF-8 (for all other encodings) before.] Rationale: this is a 1:1 that corresponds to CLISP CODE-CHAR/CHAR-CODE and avoids spurious errors in DIRECTORY on startup. * New function EXT:COMPILED-FILE-P - checks whether the file is a CLISP-compiled file with a compatible bytecode format. See for details. * New functions EXT:CHAR-INVERTCASE, EXT:STRING-INVERTCASE and EXT:NSTRING-INVERTCASE invert case of characters and strings. See and for details. * New function POSIX:STREAM-OPTIONS calls fcntl(2). See for details. * Explicitly close all possible file descriptors before exec(). * Danish translations of the user interface messages have been added. Thanks to Dennis Decker Jensen . 2.34 (2005-07-20) ================= Important notes --------------- * All .fas files generated by previous CLISP versions are invalid and must be recompiled. This is caused by the addition of MOP, the DEFSETF fixes, and the TRANSLATE-PATHNAME and MAKE-HASH-TABLE enhancements. Set CUSTOM:*LOAD-OBSOLETE-ACTION* to :COMPILE to automate this. See for details. * The name of the Run-Control file has changed from '_clisprc' to '.clisprc' on all platforms. If you are using woe32, please rename your Run-Control file. * Modules i18n, regexp, and syscalls are now present even in the base linking set. Do not pass, e.g., "--with-module=regexp" to configure. User visible changes -------------------- * The CLOS MetaObject Protocol is supported: + New class METAOBJECT. + Classes: New classes STANDARD-READER-METHOD, STANDARD-WRITER-METHOD, FORWARD-REFERENCED-CLASS. New functions ENSURE-CLASS. New generic functions CLASS-DIRECT-SUPERCLASSES, CLASS-PRECEDENCE-LIST, CLASS-DIRECT-SLOTS, CLASS-SLOTS, CLASS-DIRECT-DEFAULT-INITARGS, CLASS-DEFAULT-INITARGS. New customizable generic functions For class creation: ENSURE-CLASS-USING-CLASS, VALIDATE-SUPERCLASS, COMPUTE-DIRECT-SLOT-DEFINITION-INITARGS, COMPUTE-CLASS-PRECEDENCE-LIST, COMPUTE-EFFECTIVE-SLOT-DEFINITION, COMPUTE-EFFECTIVE-SLOT-DEFINITION-INITARGS, COMPUTE-SLOTS, COMPUTE-DEFAULT-INITARGS, READER-METHOD-CLASS, WRITER-METHOD-CLASS. For notification about subclasses: CLASS-DIRECT-SUBCLASSES, ADD-DIRECT-SUBCLASS, REMOVE-DIRECT-SUBCLASS. + Generic Functions: New classes FUNCALLABLE-STANDARD-CLASS, FUNCALLABLE-STANDARD-OBJECT. New functions ENSURE-GENERIC-FUNCTION, SET-FUNCALLABLE-INSTANCE-FUNCTION, COMPUTE-EFFECTIVE-METHOD-AS-FUNCTION. New generic functions GENERIC-FUNCTION-NAME, GENERIC-FUNCTION-METHODS, GENERIC-FUNCTION-METHOD-CLASS, GENERIC-FUNCTION-LAMBDA-LIST, GENERIC-FUNCTION-METHOD-COMBINATION, GENERIC-FUNCTION-ARGUMENT-PRECEDENCE-ORDER, GENERIC-FUNCTION-DECLARATIONS. New customizable generic functions ENSURE-GENERIC-FUNCTION-USING-CLASS, COMPUTE-DISCRIMINATING-FUNCTION, COMPUTE-APPLICABLE-METHODS, COMPUTE-APPLICABLE-METHODS-USING-CLASSES. + Methods: New generic functions METHOD-FUNCTION, METHOD-GENERIC-FUNCTION, METHOD-LAMBDA-LIST, METHOD-SPECIALIZERS, ACCESSOR-METHOD-SLOT-DEFINITION. New functions EXTRACT-LAMBDA-LIST, EXTRACT-SPECIALIZER-NAMES. + Method-Combinations: New generic function FIND-METHOD-COMBINATION. New customizable generic function COMPUTE-EFFECTIVE-METHOD. + Slot-Definitions: New classes SLOT-DEFINITION, STANDARD-SLOT-DEFINITION, DIRECT-SLOT-DEFINITION, STANDARD-DIRECT-SLOT-DEFINITION, EFFECTIVE-SLOT-DEFINITION, STANDARD-EFFECTIVE-SLOT-DEFINITION. New generic functions SLOT-DEFINITION-NAME, SLOT-DEFINITION-INITFORM, SLOT-DEFINITION-INITFUNCTION, SLOT-DEFINITION-TYPE, SLOT-DEFINITION-ALLOCATION, SLOT-DEFINITION-INITARGS, SLOT-DEFINITION-READERS, SLOT-DEFINITION-WRITERS, SLOT-DEFINITION-LOCATION. New customizable generic functions DIRECT-SLOT-DEFINITION-CLASS, EFFECTIVE-SLOT-DEFINITION-CLASS. + Specializers: New classes SPECIALIZER, EQL-SPECIALIZER. New generic functions SPECIALIZER-DIRECT-GENERIC-FUNCTIONS, SPECIALIZER-DIRECT-METHODS. New functions EQL-SPECIALIZER-OBJECT, INTERN-EQL-SPECIALIZER. New customizable generic functions ADD-DIRECT-METHOD, REMOVE-DIRECT-METHOD. + Slot access: New generic functions SLOT-VALUE-USING-CLASS, (SETF SLOT-VALUE-USING-CLASS), SLOT-BOUNDP-USING-CLASS, SLOT-MAKUNBOUND-USING-CLASS. New functions STANDARD-INSTANCE-ACCESS, FUNCALLABLE-STANDARD-INSTANCE-ACCESS. + Dependent object notification: New functions MAP-DEPENDENTS. New customizable generic functions ADD-DEPENDENT, REMOVE-DEPENDENT, UPDATE-DEPENDENT. See for details, and for a list of differences between CLISP and "The Art of the Metaobject Protocol". *FEATURES* now contains :MOP. * CLISP now supports programming with case sensitive symbols. This is the default when CLISP is started with the new command line option "-modern". See for details. * Several new datatypes that manage weak references: WEAK-LIST, WEAK-AND-RELATION, WEAK-OR-RELATION, WEAK-MAPPING, WEAK-AND-MAPPING, WEAK-OR-MAPPING, WEAK-ALIST. New functions - for WEAK-LIST: MAKE-WEAK-LIST, WEAK-LIST-P, WEAK-LIST-LIST, (SETF WEAK-LIST-LIST), - for WEAK-AND-RELATION: MAKE-WEAK-AND-RELATION, WEAK-AND-RELATION-P, WEAK-AND-RELATION-LIST, - for WEAK-OR-RELATION: MAKE-WEAK-OR-RELATION, WEAK-OR-RELATION-P, WEAK-OR-RELATION-LIST, - for WEAK-MAPPING: MAKE-WEAK-MAPPING, WEAK-MAPPING-P, WEAK-MAPPING-PAIR, WEAK-MAPPING-VALUE, (SETF WEAK-MAPPING-VALUE), - for WEAK-AND-MAPPING: MAKE-WEAK-AND-MAPPING, WEAK-AND-MAPPING-P, WEAK-AND-MAPPING-PAIR, WEAK-AND-MAPPING-VALUE, (SETF WEAK-AND-MAPPING-VALUE), - for WEAK-OR-MAPPING: MAKE-WEAK-OR-MAPPING, WEAK-OR-MAPPING-P, WEAK-OR-MAPPING-PAIR, WEAK-OR-MAPPING-VALUE, (SETF WEAK-OR-MAPPING-VALUE), - for WEAK-ALIST: MAKE-WEAK-ALIST, WEAK-ALIST-P, WEAK-ALIST-TYPE, WEAK-ALIST-CONTENTS, (SETF WEAK-ALIST-CONTENTS), WEAK-ALIST-ASSOC, WEAK-ALIST-RASSOC, WEAK-ALIST-VALUE, (SETF WEAK-ALIST-VALUE). See for details. * You can create formatting streams of class EXT:FILL-STREAM. See for details. * SUBTYPEP can determine subtype relationship and type equivalence much better than it could before. * When *PRINT-READABLY* is true, symbols are now printed with package marker and vertical bars. * ANSI CL compliance issues: + Issue is implemented: The scope of declarations that do not apply to bindings, such as free SPECIAL, NOTINLINE or OPTIMIZE declarations, includes only the body forms and no longer includes the initforms of the LAMBDA/LET/LET*/MULTIPLE-VALUE-BIND bindings. + Vectors of element type NIL are now strings in all aspects. But the type BASE-STRING does _not_ include vectors of element type NIL. + TYPE-OF now returns STANDARD-CHAR instead of CHARACTER when possible. + The type COMPILED-FUNCTION no longer encompasses generic functions. + TYPE-OF now returns COMPILED-FUNCTION or STANDARD-GENERIC-FUNCTION instead of FUNCTION when possible. + The space character is printed as "#\ " if CUSTOM:*PRINT-SPACE-CHAR-ANSI* is true. + The # no longer has the nickname "". The syntax :FOO for keywords still works, but is now special cased in the reader. + Class redefinition with DEFCLASS no longer modifies the previous class if it doesn't have a "proper name". + Class redefinition with DEFCLASS removes accessor methods that have been installed through the previous DEFCLASS definition of the same class. + Generic function redefinition with DEFGENERIC removes methods that have been installed through the previous DEFGENERIC definition of the same function. + The set of qualifiers allowed for methods that are combined with a method combination defined through the short form of DEFINE-METHOD-COMBINATION now includes the name of the method combination instead of the operator. + FIND-METHOD now gives an error if the list of specializers has a wrong length. + ARRAY-TOTAL-SIZE-LIMIT, ARRAY-DIMENSION-LIMIT, ARRAY-RANK-LIMIT are now fixnums. + SHORT-FLOATs whose absolute value is an integer in the range between 10^5 and 10^7 are now printed with full precision. + Operations combining rational and floating-point numbers now return a floating-point result if CUSTOM:*FLOATING-POINT-RATIONAL-CONTAGION-ANSI* is true. When the mathematical result in a situation is rational, a warning is issued if CUSTOM:*WARN-ON-FLOATING-POINT-RATIONAL-CONTAGION* is true. + Class redefinition with DEFCLASS now updates existing instances as specified. + An ABORT restart is now always installed. + UPDATE-INSTANCE-FOR-DIFFERENT-CLASS does the required argument checking. + Passing invalid initialization arguments to MAKE-INSTANCE and similar now generates a PROGRAM-ERROR instead of just an ERROR. + Documentation strings are now attached to class objects, not just to their name. + Arrays with total array size 0 are printed in a lossy way if CUSTOM:*PRINT-EMPTY-ARRAYS-ANSI* is true and *PRINT-READABLY* is false. + Allow () to match NIL in destructuring lambda lists. + Documentation strings at a place where only declarations and forms are allowed now give a warning, not an error. + LAST, BUTLAST and NBUTLAST check their list argument for circularity. + Different LOAD-TIME-VALUE forms that are EQUAL but not EQ are no longer coalesced by COMPILE-FILE. + DEFSETF lambda-lists now support &ENVIRONMENT. + DEFSETF lambda-lists are no longer destructuring lambda-lists. + NAMESTRING no longer accepts an optional second argument. + SETF of VALUES now uses only the first value of each subform. + SPECIAL declarations of variables are now correctly respected inside macro expanders defined through MACROLET within the declaration's scope. + (EXPORT NIL), (UNEXPORT NIL), (IMPORT NIL), (SHADOWING-IMPORT NIL), (SHADOW NIL) are now nops. + An attempt to create a condition from an invalid condition designator now always results in a TYPE-ERROR being signalled. + The reader's errors are now of type READER-ERROR when they should be. + READ-DELIMITED-LIST now returns NIL when *READ-SUPPRESS* is true. + Printing of multidimensional arrays now respects *PRINT-LEVEL*. + As required by 19.2.3, *DEFAULT-PATHNAME-DEFAULTS* is merged into pathnames before accessing the file system. + LOGICAL-PATHNAME now gives an error if the argument string does not contain a host specification. + The PRINT-UNREADABLE macro prints extraneous spaces if CUSTOM:*PRINT-UNREADABLE-ANSI* is true. + In the #n= and #n# reader syntax, the integer n may now be larger than 7 digits. + IN-PACKAGE forms with constant arguments are no longer executed by the compiler if they occur in a non-null lexical environment. + COMPILE-FILE now always returns the TRUENAME of its output file. + GET-SETF-EXPANSION now accepts NIL as the environment argument to mean null lexical environment Thanks to Paul F. Dietz and his ANSI compliance suite, which helped detect some of these deficiencies. Thanks to Yuji Minejima and his ANSI compliance suite, which helped detect some of these deficiencies. * Global error handlers can now be installed and removed using EXT:SET-GLOBAL-HANDLER, EXT:WITHOUT-GLOBAL-HANDLERS, and -on-error command line option. See and for details. * TRANSLATE-PATHNAME and TRANSLATE-LOGICAL-PATHNAME accept a new keyword argument :ABSOLUTE which makes them convert their return values to absolute pathnames. See and for details. * New function EXT:ABSOLUTE-PATHNAME. See for details. * New function EXT:ELASTIC-NEWLINE and new FORMAT directive "~.". See and for details. Through this function, CLISP no longer produces spurious blank lines when a program uses the convention of printing a #\Newline before each line. * TRACE has a new option :MAX-DEPTH, that is useful to avoid infinite recursions in the tracer. See for details. * The function LENGTH and a few other sequence functions now signal a TYPE-ERROR when a circular list has been given as argument. * Function UPGRADED-COMPLEX-PART-TYPE is now as precise as possible. See for details. * In non-interactive batch mode, *ERROR-OUTPUT* now uses the system's standard error stream, instead of the standard output stream. * The macros MUFFLE-CERRORS, APPEASE-CERRORS and EXIT-ON-ERROR now treat CONTINUE restarts which require interactive user intervention like other restarts. Only non-interactive CONTINUE restarts are silently invoked. * LOAD :OBSOLETE-ACTION can now also be :COMPILE to automatically recompile the obsolete *.fas file. LOAD can now ignore erroneous forms using SKIP and STOP restarts. See for details. * References from within macros defined through MACROLET to variables or functions defined in the lexical environment outside the MACROLET form now signal an error. Previously, this resulted in undefined behavior. * The FFI recognizes the c-type declaration (FFI:C-POINTER ) to handle references without conversion to/from Lisp structures. See for details. * The FFI variable FFI:*FOREIGN-ENCODING* can now be a multibyte encoding. The warning "*FOREIGN-ENCODING*: reset to ASCII" at startup is gone. * New FFI constructor functions FFI:FOREIGN-VARIABLE and FFI:FOREIGN-FUNCTION, more operators are now exported (FFI:FOREIGN-VALUE, FFI:PARSE-C-TYPE). See and for details. * FFI macro FFI:C-LINES can now be used to fine-tune initialization and finalization. See for details. * New FFI function FFI:CLOSE-FOREIGN-LIBRARY can be used to unload a library. See for details. * New FFI low-level accessor FFI:MEMORY-AS. See for details. * Foreign functions and variables can now be documented using the :DOCUMENTATION option to FFI:DEF-CALL-OUT and FFI:DEF-C-VAR. * Buffered streams now are suitable for interactive streams. It is no longer necessary to use :BUFFERED NIL to avoid blocking in various situations. * Function EXT:READ-BYTE-SEQUENCE takes a new keyword argument :INTERACTIVE. See for details. * Methods on GRAY:STREAM-READ-BYTE-SEQUENCE and GRAY:STREAM-WRITE-BYTE-SEQUENCE now need to accept a second optional argument. * The possible values of the :WEAK argument of MAKE-HASH-TABLE are changed: Use :KEY-AND-VALUE instead of :EITHER, :KEY-OR-VALUE instead of :BOTH now. * The :LIBRARY option argument to EXT:DEF-CALL-OUT and EXT:DEF-C-VAR is now evaluated (i.e., it can now be a variable) and may take a value of :DEFAULT and :NEXT in addition to being a string as before. See and for details. * New user variable CUSTOM:*PRINT-SYMBOL-PACKAGE-PREFIX-SHORTEST* allows using the shortest package (nick)name as the symbol prefix. See for details. * The user commands can now be extended using CUSTOM:*USER-COMMANDS*. See for details. * Initialization and finalization of the CLISP process can now be augmented with CUSTOM:*INIT-HOOKS* and CUSTOM:*FINI-HOOKS*. See and for details. * SET functions (like UNION et al) are now much faster on large lists. * The second, optional argument of EXT:SPECIAL-VARIABLE-P can no longer be T; please use (THE-ENVIRONMENT) instead. * New function EXT:FEATUREP - the run-time version of read-time #+/#-. See for details. * Bug fixes: + The interpreter no longer executes the body of (EVAL-WHEN (COMPILE) ...) forms. + Fixes to internationalized error messages. + When an interpreted INITIALIZE-INSTANCE method uses CALL-NEXT-METHOD with a modified argument list, MAKE-INSTANCE could in some cases initialize the new object three times instead of just once. + Fixed a compiler bug that could lead to incorrect code when a LAMBDA with SPECIAL-declared optional variables was compiled inline and the initforms of the optional variables depended on the values of the previous optional variables. + Passing a package as second argument of RENAME-PACKAGE led to an unjustified error. + Passing a displaced vector as argument to REVERSE could lead to an unjustified error. + FRESH-LINE did not work in some situations. + Fixed ATANH on complex numbers. + The macros EXT:LETF and EXT:LETF* now work correctly on symbol-macros. + Fixed a spurious crash of MULTIPLE-VALUE-SETQ in interpreted code. + Fixed a crash of (COPY-READTABLE NIL some-readtable). + Fixed a crash when using a hash-table as hash-table key. + Fixed a crash triggered by the READ-BYTE function on streams with element type ([UN]SIGNED-BYTE n), 24 < n < 32, on big-endian platforms. + Fixed a crash that occurred on glibc platforms when writing Unicode characters in the range #\U000E0000..#\U000E007F on a stream with an encoding other than UTF-8. + An invalid bignum could be returned by GET-INTERNAL-RUN-TIME on 64-bit platforms. + Third party code walkers can now handle HANDLER-BIND et al. * Woe32 distribution now comes with a binary driver clisp.exe. Do not copy it anywhere - create a shortcut to it instead! Use install.bat to automate shortcut creation. * (SOFTWARE-TYPE) now returns memory model information, valuable in bug reports. Modules ------- * New module matlab interfaces to and allows complicated matrix computations. See for details. * New module rawsock offers low-level socket access. Thanks to Fred and Don Cohens. See for details. * New module zlib interfaces to and allows compression and uncompression of vectors. See for details. * New module i18n now contains the GNU gettext interface as well as other functionality for Lisp program internationalization. See for details. * New module PARI interfaces to . See for details. * Module syscalls is significantly expanded. See for details. * Module Berkeley-DB is vastly expanded. See for details. Added support for Berkeley DB 4.3. * Modules now have an exit function. See for details. Portability ----------- * Heaps and memory images larger than 4 GB are now supported on 64-bit platforms. * Support files larger than 2 GB or 4 GB also on Windows. * Weak pointers now also work on platforms without mmap(). * Weak hash tables now also work on platforms without mmap(). * Dynamic modules now work on woe32 too. * On most 64-bit platforms, fixnums are now 49 bits wide (including the sign bit), instead of 33 bits wide. 2.33.2 (2004-06-02) =================== Portability ----------- * Support for the Linux/x86 distributions called Redhat Fedora and Redhat Enterprise Linux. 2.33.1 (2004-05-22) =================== User visible changes -------------------- * Bug fixes: + The return value of ASINH was always rounded to a SINGLE-FLOAT. + The return value of NSTRING-UPCASE, NSTRING-DOWNCASE, NSTRING-CAPITALIZE, WRITE-STRING, WRITE-LINE, when called with a displaced string as argument, was wrong. + Some cases of ,@ inside doubly-nested backquote led to an unjustified error. Portability ----------- * Improved portability for Solaris/SPARC64 in 64-bit mode. * Buildable with GCC-3.4. * Fixed a bug in (ASH x MOST-NEGATIVE-FIXNUM) on some platforms. * Fixed a bug in (SIGNUM negative-single-float) on 64-bit platforms. * Fixed a bug in (LOGAND fixnum bignum), (LOGNAND fixnum bignum), (LOGANDC2 fixnum bignum), (LOGANDC1 bignum fixnum) on some rare platforms. 2.33 (2004-03-17) ================= Important notes --------------- * All .fas files generated by previous CLISP versions are invalid and must be recompiled. Use CUSTOM:*LOAD-OBSOLETE-ACTION* to automate this. See for details. User visible changes -------------------- * NO-APPLICABLE-METHOD, NO-PRIMARY-METHOD and NO-NEXT-METHOD now signal METHOD-CALL-ERROR or METHOD-CALL-TYPE-ERROR. See for details. * New user variables CUSTOM:*APROPOS-MATCHER* and CUSTOM::*APROPOS-DO-MORE* make APROPOS more flexible in search and output. See for details. * New function EXT:MOD-EXPT efficiently computes the composition of MOD and EXPT on integers. See for details. * New function EXT:ARGV returns the command line arguments passed to runtime. See for details. * New generic function GRAY:STREAM-POSITION extends FILE-POSITION to Gray streams; FILE-POSITION now works with streams other than FILE-STREAMs. See for details. * DEFINE-METHOD-COMBINATION and friends are now implemented. Thanks to James Anderson . This change obsoleted all compiled file. Portability ----------- * Improved portability for nearly all platforms: Linux, MacOS X, Solaris, Tru64, HP-UX, AIX, FreeBSD, NetBSD, OpenBSD, BeOS. * Removed Acorn RISCOS support. * Removed AmigaOS support. * Removed support for MSDOS and OS/2, using EMX. * Removed support for Borland C compiler on Win32. * Added FFI support for x86_64 (AMD64) Linux and PowerPC MacOS X. 2.32 (2003-12-29) ================= User visible changes -------------------- * WRITE-BYTE-SEQUENCE now accepts :NO-HANG keyword argument. Thanks to Don Cohen . * Support files larger than 2 GB or 4 GB on platforms with LFS (Large File Support). * New module Berkeley-DB interfaces to and allows working with Berkeley DB databases. See for details. * New module pcre interfaces to and makes Perl Compatible Regular Expressions available in CLISP. See for details. * Module syscalls now exports function POSIX:STAT-VFS. See for details. * When the system C library provides a wildcard (fnmatch) implementation, it is used instead of the GNU wildcard distributed with CLISP when the CLISP wildcard module is built. * Prompt is now fully customizable by the user. CUSTOM:*PROMPT* is replaced with 5 variables. See for details. * Readline is now used properly on Cygwin/X11. * Command line interface: the initial verbosity level is controlled by the pair of mutually canceling options -q/-v. See for details. 2.31 (2003-09-01) ================= Important notes --------------- * All .fas files generated by previous CLISP versions are invalid and must be recompiled. This is not as bad as it was before: the invalid files will be ignored and the sources will be loaded instead of signaling an error unless you set CUSTOM:*LOAD-OBSOLETE-ACTION*. See for details. * All custom-written external modules must be updated to reflect changes in the C definitions, e.g. many C types were renamed to a trailing _t (subr_t, object_initdata_t) and LISPFUN takes an additional side-effect class (seclass) parameter. User visible changes -------------------- * Added a new module - "fastcgi": an interface to the FastCGI Web server CGI-compatible protocol (see http://www.fastcgi.com/) Thanks to John K. Hinsdale . See for details. * External modules now work on win32 (when used with cygwin or mingw). See for details. * DIRKEY is now a standard module: use `--with-module=dirkey' instead of `--with-dir-key' when configuring. See for details. * SYSCALLS is now a standard module: use `--with-module=syscalls instead of `--with-export-syscalls' when configuring. See for details. * New module netica interfaces to and allows working with Bayesian belief networks and influence diagrams. See for details. * READ-BYTE-SEQUENCE now accepts :NO-HANG keyword argument. * LOAD now takes an additional keyword argument :OBSOLETE-ACTION which specifies what to do with the obsolete .fas files. See for details. * EXT:SPECIAL-VARIABLE-P now accepts a second optional ENVIRONMENT argument. See for details. * You can now set socket options using new function SOCKET:SOCKET-OPTIONS. See for details. Suggested by Dave Richards . * SOCKET:SOCKET-STATUS now distinguishes between :EOF and :INPUT. Also, it does not have to cons up a fresh list even for multiple streams. See for details. * CLISP character set now uses Unicode 3.2. See for details. * DIRECTORY now accepts a new keyword argument :IF-DOES-NOT-EXIST which controls treatment of links pointing to non-existent files. It defaults to :DISCARD which is fully backward compatible. See for details. * DELETE-FILE no longer calls TRUENAME on its argument, which enables you to delete symbolic links. This is an incompatible change. You can get the old behavior by doing (DELETE-FILE (TRUENAME path)). See for details. * DRIBBLE now works by redefining *TERMINAL-IO* instead of a host of i/o variables. This allows DRIBBLE to be started and stopped in different break loops. See for details. * Weak hash tables can now remove key/value pairs when either or both are garbage collected. See for details. * You can use (SETF WEAK-POINTER-VALUE) to change the object to which the given weak pointer point to. See for details. * New macro EXT:DEFINE-HASH-TABLE-TEST allows user-defined hash table tests. See for details. * ANSI CL compliance issues: + MAPC, MAPCAR, MAPCAN, MAPL, MAPLIST, MAPCON now require their list arguments to be proper lists; + TAILP uses EQL, not EQ, to compare the sublists; + LOOP was fixed in many many ways, including - using ATOM as the end test for ON iteration, - returning the SUMs (and alike) of the specified type (if any), - checking that the THEREIS return value is not shadowed, - treating keyword IT in an inappropriate place as a variable, - signaling SOURCE-PROGRAM-ERROR errors at macroexpansion time, - not requiring the package argument for symbol iteration, - making local variables accessible in the INITIALLY clauses, - initializing accumulation variables after iteration variables to avoid shadowing, - using forward consing for APPEND/NCONC because REVAPPEND/NRECONC drop the last atom in dotted lists, - checking for duplicate variables in iteration clauses; + DOCUMENTATION is now a generic function; + implemented CHANGE-CLASS, UPDATE-INSTANCE-FOR-DIFFERENT-CLASS, MAKE-INSTANCES-OBSOLETE, UPDATE-INSTANCE-FOR-REDEFINED-CLASS, and ENSURE-GENERIC-FUNCTION; + DEFCLASS no longer requires that direct superclasses already exist; + sequence functions (MAP, LENGTH and such) no longer accept dotted lists and treat NULL as LIST of length 0 and CONS as LIST of positive length; + COERCE accepts CLOS class object as a type-spec (second argument) and coerces FLOAT to COMPLEX by returning a COMPLEX number; + DEFSTRUCT uses the slot name as is for the accessor when :CONC-NAME is NIL (i.e., does not intern the name in *PACKAGE*), and does not bind slot names in the arglist of keyword constructors; + MAPCAN and MAPCON now correctly handle functions returning ATOMs; + removed macro definition from GENERIC-FUNCTION; + APPEND, COPY-ALIST, REVAPPEND, NRECONC, PAIRLIS, GET, GETF, REMPROP, GET-PROPERTIES no longer accept dotted lists; + implemented arrays with ARRAY-ELEMENT-TYPE NIL; + implemented ANSI CL Issues , , , , , , , , ; + EQUALP on HASH-TABLEs now correctly descends the structure; + macro definitions now respect the lexical environment; + more thorough lambda list matching check; + DEFINE-CONDITION now return the condition name; + a character is now accepted as a package designator. Thanks to Paul F. Dietz and his ANSI compliance suite, which helped detect some of these deficiencies. * FUNCTION-LAMBDA-EXPRESSION now always returns the correct function name. See for details. * CONSTANTP now detects many more constant forms. See for details. * The code walker has now a public interface: EXT:EXPAND-FORM. See for details. * Renamed macro SPACE to EXT:TIMES because SPACE is an ANSI Common Lisp symbol without a macro definition. See for details. * New function EXT:XOR checks that exactly one of its arguments is non-NIL. See for details. * New function EXT:MAKE-STREAM creates a stream out of a file descriptor and facilitates CGI scripting. See and for details. * New function EXT:MODULE-INFO provides information about the CLISP modules that comprise the running image. See for details. * New generic function CLOS:CLASS-PROTOTYPE from MOP. See for details. * New generic functions CLOS:CLASS-FINALIZED-P and CLOS:FINALIZE-INHERITANCE from MOP. See for details. * New FFI functionality: + functions FFI:FOREIGN-ALLOCATE and FFI:FOREIGN-FREE and macros FFI:ALLOCATE-DEEP and FFI:ALLOCATE-SHALLOW permit heap allocation; see for details; + functions FFI:FOREIGN-ADDRESS-UNSIGNED and FFI:UNSIGNED-FOREIGN-ADDRESS, see for details; + function FFI:FOREIGN-ADDRESS, see for details; + functions FFI:FOREIGN-POINTER and (SETF FFI:FOREIGN-POINTER), see for details; + macros FFI:C-VAR-ADDRESS, FFI:C-VAR-OBJECT and FFI:OFFSET, see and ; + function (SETF FFI:VALIDP) invalidates foreign objects see for details; + macros FFI:WITH-FOREIGN-STRING, and macro FFI:WITH-C-PLACE, see and . Thanks to Jörg Höhle . + FFI:DEF-CALL-OUT and FFI:DEF-C-VAR now accept a :LIBRARY option which allows you to specify the dynamic library which contains the object. See and . + Introduced a bit of polymorphism: FFI:C-POINTER can be NIL and will be treated as NULL; NULL return value of type FFI:C-POINTER is returned as NIL. See . + You can now map between numeric and symbolic C enum values using functions FFI:ENUM-FROM-VALUE and FFI:ENUM-TO-VALUE. See . * FFI does not output extern variable and function declarations unless you set FFI:*OUTPUT-C-VARIABLES* and/or FFI:*OUTPUT-C-FUNCTIONS* to T. Please use FFI:C-LINES to include the appropriate headers instead. See for details. * Regexp module functions now support more options, e.g., :EXTENDED to use extended regular expressions, and do not rely on FFI. In particular, REGEXP:REGEXP-COMPILE now accepts keyword and not optional arguments (this is not backwards compatible). When the system library provides a regexp implementation, it is used instead of the GNU regexp distributed with CLISP. The number of subexpressions is now unlimited (the limit was 10). See for details. * Unified modules postgresql632 and postgresql642 into postgresql. The postgresql module works with PostgreSQL 6 and 7 now. * Removed obsolete module linuxlibc5 and renamed module linuxlibc6 to glibc. * New module: bindings/win32 (highly incomplete, patches are welcome). * The BACKQUOTE reader has been reimplemented from scratch by Kaz Kylheku . * New function EXT:MAKE-XTERM-IO-STREAM creates an input-output stream that uses a separate X terminal. Unix platforms only. See for details. * Fixed a bug in PEEK-CHAR with non-NIL peek-type on ECHO-STREAMS. * Fixed a bug in FILE-POSITION after UNREAD-CHAR (or PEEK-CHAR). * Fixed a bug in bit operations on multi-dimensional arrays. * CLISP/MIT-CLX now compiles CLOCC CLUE/CLIO. See and . * CLISP/NEW-CLX on win32 with Cygwin X server compiles garnet. See . * Command line interface: allow multiple -x options. New options -repl and -v (--verbose) . 2.30 (2002-09-15) ================= User visible changes -------------------- * CLISP does not come with GNU libiconv anymore. The most important encodings are built-in anyway, and CLISP can use the GNU libc 2.2 iconv and a GNU libiconv when it is independently installed. * CLISP does not come with GNU gettext anymore. This is a separate package and should be installed separately, if you wish to use i18n. * CLISP does not come with GNU readline anymore, because, starting with version 4.3, readline supports multibyte characters out of the box. * CLISP does not come with GNU libsigsegv anymore. This means that in certain cases of infinite recursion, the C stack overflow will not be properly detected and will result in a segfault instead of an error. You are urged to download and install GNU libsigsegv from or before configuring CLISP. * Strings can now hold UCS-4 characters, instead of only UCS-2 characters. CHAR-CODE-LIMIT increased from 65536 to 1114112. * Added a new module - "oracle": an interface to the Oracle ODBMS. Thanks to John K. Hinsdale . * New user variable CUSTOM:*PARSE-NAMESTRING-DOT-FILE* controls how the file names starting with a dot are parsed. By default, it is set to :NAME in config.lisp, so #P".clisprc" is now #S(PATHNAME :NAME ".clisprc"). To get the old result of #S(PATHNAME :TYPE "clisprc"), set this variable to :TYPE. This is an incompatible change. See for details. * New user variable CUSTOM:*TRACE-INDENT* controls TRACE output indentation. See for details. * SOCKET:SOCKET-ACCEPT and SOCKET:SOCKET-CONNECT now accept a :TIMEOUT keyword argument. See for details. * SAVEINITMEM now accepts :START-PACKAGE, :VERBOSE, and :LOCKED-PACKAGES keyword arguments. See for details. * You can now shutdown a socket for input or output separately using SOCKET:SOCKET-STREAM-SHUTDOWN. See for details. * CUSTOM:*SOURCE-FILE-TYPES* and CUSTOM:*COMPILED-FILE-TYPES* now contain strings, not pathnames. See for details. * EXT:GETENV now returns all of the OS environment as an alist when its argument is omitted or NIL. See for details. * When configured with --with-export-syscalls, several new functions are available: POSIX:STREAM-LOCK provides an interface to flock(2); POSIX:COPY-FILE provides an interface to link(2)/symlink(2)/rename(2), (in addition to the usual file copy); POSIX:DUPLICATE-HANDLE provides an interface to dup(2)/dup2(2). Thanks to Marco Baringer for COPY-FILE and DUPLICATE-HANDLE. See for details. * You can now control the CLISP exit code better by passing a non-negative integer to EXT:EXIT. See for details. * New macros FFI:WITH-C-VAR and FFI:WITH-FOREIGN-OBJECT allow allocating C data on the stack. See for details. * Russian translations of the user interface messages have been added. Thanks to Arseny Slobodjuck . * When built with readline, CLISP will DESCRIBE the current function when you hit TAB after a #\Space. * MAKE-ENCODING now checks whether the iconv charset is valid, and signals an error if it is invalid unless given the :IF-DOES-NOT-EXIST NIL argument. * New debugger command Quit (:q) aborts to the top-level read-eval-print loop immediately, saving you typing :a several times. * When CUSTOM:*PARSE-NAMESTRING-ANSI* is non-NIL, do not accept symbols as pathname designators. See for details. * COMPILE-FILE no longer clobbers an existing *.c file when the Lisp file being compiled does not contain any FFI forms. See for details. * Type COMPLEX now correctly uses UPGRADED-COMPLEX-PART-TYPE. * Improved accuracy of some transcendental functions, e.g., now (EXPT -5.0 2.0) return #C(25.0 0.0). * Fixed a bug: Conversion from bytes to string did not work for the encoding (MAKE-ENCODING :CHARSET CHARSET:UNICODE-32-LITTLE-ENDIAN :INPUT-ERROR-ACTION :IGNORE). * Fixed a bug in compiling duplicate keyword arguments. * Fixed the (destructuring-bind (&key (x x)) ...) bug. * Wide-mode -W backward compatibility option is now gone (defunct since 1998-09-09). This permits colons in memory image file names (necessary on Cygwin). * CLISP on Cygwin now understands native pathnames like "c:/gnu/clisp/" by translating them internally to "/cygdrive/c/gnu/clisp/". CLISP on Win32 now understands Cygwin pathnames like "/cygdrive/c/gnu/clisp/" by translating them internally to "c:/gnu/clisp/". You can disable this by setting CUSTOM:*DEVICE-PREFIX* to NIL. See for details. * Readline is now used properly on Cygwin. * DIR-KEY now works on Cygwin. Portability ----------- * CLISP now works on SPARC/Linux with glibc 2.2 when built with SAFETY=3. 2.29 (2002-07-25) ================= User visible changes [this is a bug-fix/portability release] -------------------- * INSPECT: fixed bugs in HTML generation, Content-Length header, removing incorrect package on exit, help in nested inspect sessions. * COMPILE-FILE: fixed :VERBOSE NIL handling. * DESCRIBE: handles DIR-KEY now. * (LAMBDA () (DEFMETHOD ...)) now works. * Fixed RETURN-FROM in deep nesting. * Fixed crash on errors in module initialization. * COMPILER-MACROs can now expand to special forms. * EVAL-WHEN now distinguishes between COMPILE and :COMPILE-TOPLEVEL and between LOAD and :LOAD-TOLEVEL. Portability ----------- * CLISP now builds with GCC-3.1 out of the box. 2.28 (2002-03-03) ================= Important notes --------------- * All .fas files generated by previous CLISP versions are invalid and must be recompiled. User visible changes -------------------- * ANSI CL functions MAKE-LOAD-FORM and MAKE-LOAD-FORM-SAVING-SLOTS are implemented. * ANSI CL pretty printer is implemented. In particular, variables *PRINT-LINES*, *PRINT-MISER-WIDTH*, *PRINT-PPRINT-DISPATCH*, macro PPRINT-LOGICAL-BLOCK, local macros PPRINT-EXIT-IF-LIST-EXHAUSTED, PPRINT-POP and functions PPRINT-DISPATCH, COPY-PPRINT-DISPATCH, SET-PPRINT-DISPATCH, PPRINT-FILL, PPRINT-LINEAR, PPRINT-TABULAR, PPRINT-TAB, PPRINT-NEWLINE, PPRINT-INDENT are implemented. See for details. * The functions WRITE and WRITE-TO-STRING now accept :LINES, :MISER-WIDTH and :PRINT-PPRINT-DISPATCH keyword arguments. This change requires recompilation of all .fas files. * Weak hash-tables are now supported. See for details. * Support Cygwin's "/cygdrive/drive/path" pathname syntax on Win32. * New macro EXT:FCASE which allows specifying comparison function in CASE. See for details. * New user variable CUSTOM:*LOAD-LOGICAL-PATHNAME-TRANSLATIONS-DATABASE*. See for details. * Packages can now be locked and unlocked using EXT:PACKAGE-LOCK See for details. * CLISP now supports internationalized Lisp programs, via GNU gettext. Macros ENGLISH, FRANCAIS and DEUTSCH have been removed. See for details. * The UI language can now be changed dynamically, via symbol-macro *CURRENT-LANGUAGE*. See for details. * Fixed a bug: LDIFF now handles dotted lists correctly. 2.27 (2001-07-17) ================= User visible changes -------------------- * EXT:GETENV is now setfable. * Hostname resolution is now optional in EXT:SOCKET-STREAM-PEER and EXT:SOCKET-STREAM-LOCAL. * EXT:SOCKET-STATUS now accepts SOCKET-SERVERs too and the direction of the checks can be specified. * Added install.bat for win32 installation. * ANSI CL compliance: more conformant pathname handling. * Speed up MEMBER &co when :TEST is EQ, EQL or EQUAL. * Optimize away local functions that are not used (much less consing in CLOS). * When built with readline, CLISP allows multi-line form editing. Use M-p and M-n to move between virtual lines. * Fixed handling of circular structs and pointers to functions in the FFI. * Fixed binary I/O for streams with element type longer than one byte, but not a whole number of bytes. 2.26 (2001-05-23) ================= Important notes --------------- * The CLISP extensions have been moved from the CLtL1 package LISP to separate packages. If you rely on any of the CLISP extensions, you will need to make your packages use package EXT, which re-exports all exported symbols from all extension packages. * All .fas files generated by previous CLISP versions are invalid and must be recompiled. User visible changes -------------------- * "LISP" is now a nickname of the ANSI CL package COMMON-LISP. "USER" is now a nickname of the ANSI CL package COMMON-LISP-USER. Support for CLtL1 has thus been removed. For the benefit of package developers, *FEATURES* now contains :LISP=CL. * The *FEATURES* list now contains :ANSI-CL instead of :CLTL2 even when running without '-ansi' ANSI compatibility mode. * ANSI CL compliance: function UPGRADED-COMPLEX-PART-TYPE implemented. * ANSI CL compliance: macro HANDLER-BIND invokes all handlers for the condition, not just the first one. * ANSI CL compliance: CHAR does not check for FILL-POINTER, while ELT does. * ANSI CL compliance: FUNCTION-KEYWORDS returns 2 values. * ANSI CL compliance: COMPILED-FUNCTION is a subtype of FUNCTION. * ANSI CL compliance: implemented compiler macros. * Conforming to the ANSI CL issue CONSTANTP-ENVIRONMENT:ADD-ARG, CONSTANTP now takes an optional second argument. * RUN-SHELL-COMMAND and RUN-PROGRAM now accept a :WAIT argument. * The compiler now checks the signature of function calls for all functions, not just the inlined built-ins. 2.25.1 (2001-04-06) =================== User visible changes [this is a bug-fix only release] -------------------- * ANSI CL compliance: INITIALIZE-INSTANCE accepts &KEY &ALLOW-OTHER-KEYS arguments. * Fixed a bug: a single value was sometimes returned by READ-LINE. * Fixed a bug: re-exporting inherited symbols resulted in them being reported as both external and inherited by WITH-PACKAGE-ITERATOR. * Fixed a bug: the full image and other images created with clisp-link exited on error instead of entering the debugger. * Fixed a bug: COMPILE-FILE-PATHNAME could return bad results when given a non-existent INPUT-FILE argument and an OUTPUT-FILE argument with non-NIL directory part. * Fixed --without-unicode build. 2.25 (2001-03-15) ================= Important notes --------------- * The default extension of Lisp source files for CLISP is now ".lisp" instead of ".lsp". When both "foo.lisp" and "foo.lsp" exist, (LOAD "foo") will load "foo.lisp". * Changed bytecode format. All .fas files generated by previous CLISP versions are invalid and must be recompiled. User visible changes -------------------- * A new version numbering scheme is adopted. * If an error is signalled by a form supplied with the command-line option "-x", CLISP now exits with a non-zero status. * The pretty-printer does not print hanging parenthesis by default now. *PRINT-RPARS* now defaults to NIL and *PRINT-INDENT-LISTS* to 1, so that the lists are printed like in CLHS and CLtL. * New extension: directory access (win32 registry). See for details. * Support UNC pathnames (\\host\dir\name.ext) on win32. * Support the SCREEN package on Win32. Thanks to Arseny Slobodjuck. * New functions CONVERT-STRING-FROM-BYTES and CONVERT-STRING-TO-BYTES. * Support for non-blocking binary I/O. New functions READ-BYTE-LOOKAHEAD, READ-BYTE-WILL-HANG-P, READ-BYTE-NO-HANG. New generic functions STREAM-READ-BYTE-LOOKAHEAD, STREAM-READ-BYTE-WILL-HANG-P, STREAM-READ-BYTE-NO-HANG. * CONCATENATED-STREAM-STREAMS now returns only the remaining streams, as per ANSI CL spec. * Implemented ANSI CL function INSPECT, and a function LISP:CLHS for access of Common Lisp HyperSpec. * Characters have now the same names as in Unicode 3.0, with space replaced by underscore. * ANSI CL compliance: CALL-NEXT-METHOD and NEXT-METHOD-P are now implemented as local functions, not local macros. It is now possible to call (APPLY #'CALL-NEXT-METHOD argument-list-of-unknown-length). * ANSI CL compliance: LOAD has a new keyword argument :EXTERNAL-FORMAT. * ANSI CL compliance: When an end-of-stream occurs, READ, READ-CHAR, PEEK-CHAR, READ-CHAR-NO-HANG, READ-LINE, READ-BYTE, READ-INTEGER, READ-FLOAT, called with arguments eof-error-p = NIL and without eof-value, now return NIL instead of #. * ANSI CL compliance: When LISP:*PARSE-NAMESTRING-ANSI* is non-NIL, PARSE-NAMESTRING parses strings with colons as logical pathnames. * New supported character sets in package CHARSET: GB18030, BIG5HKSCS. * Arguments passed to MAKE-PATHNAME with value NIL are not overridden by pathname slots in the :DEFAULTS argument any more. * STREAM-ELEMENT-TYPE of a TWO-WAY-STREAM or an ECHO-STREAM now depends on the stream's constituents. Previously, it was always (OR CHARACTER INTEGER). * Fixed a bug: REPLACE signalled an error if the source and destination sequences were the same and the source and destination ranges did not overlap. * Fixed a bug: A garbage collection during the execution of a foreign function callback caused a crash. * Fixed a bug: Calling READ-LINE on a stream already positioned at EOF caused a crash on 64-bit platforms. * Fixed a bug: For long-floats, (EQL x (- x)) returned true. * Fixed a bug: OPEN now returns NIL when the filename's directory does not exist and :IF-DOES-NOT-EXIST NIL was specified. Previously, an error was signalled except when :DIRECTION was :PROBE. * Fixed a bug: (subtypep 'fundamental-stream 'stream) returned NIL. Portability ----------- * Added support for IA-64 running Linux. * Added support for BeOS 5. Thanks to Alexis Rivera Rios . * Removed support for DOS. Not to worry, OS/2 and Win32 are still supported. 2.24 (2000-03-06) ================= User visible changes -------------------- * New functions READ-FLOAT and WRITE-FLOAT. * Implemented ANSI CL macro WITH-COMPILATION-UNIT. * Unicode support: The pretty-printer and FORMAT ~T now handle non-spacing and double-width Unicode characters correctly. Pretty-printer slows down by 30%. New functions CHAR-WIDTH, STRING-WIDTH. * Fixed two bugs in TRANSLATE-PATHNAME: Substitution of "**" did not work. Substitutions without version into non-logical pathnames crashed. * Dutch translations of the user interface messages have been added Thanks to Tijs van Bakel . * When configured with --with-export-syscalls, :SYSCALLS is in *FEATURES* and functions POSIX:RESOLVE-IP-ADDR, POSIX:USER-DATA, POSIX:FILE-STAT, POSIX:SYSINFO, POSIX:RESOURCE-USAGE-LIMITS, as well as those libm.so functions which do not have a better counterpart in ANSI CL are available. * New supported character sets in package CHARSET: ISO-8859-16, KOI8-U, KOI8-RU, EUC-JP, SHIFT-JIS, CP932, ISO-2022-JP, ISO-2022-JP-2, ISO-2022-JP-1, EUC-CN, HZ, GBK, CP936, EUC-TW, BIG5, CP950, ISO-2022-CN, ISO-2022-CN-EXT, EUC-KR, CP949, ISO-2022-KR, ARMSCII-8, GEORGIAN-ACADEMY, GEORGIAN-PS, TIS-620, MULELAO-1, CP1133, VISCII, TCVN, UTF-16, UTF-7, MACINTOSH (as an alias for MAC-ROMAN). Other modifications ------------------- * Speed up some sequence functions when operating on vectors: MAKE-SEQUENCE, CONCATENATE, COPY-SEQ, COERCE, SUBSEQ, REPLACE, FILL, REVERSE, NREVERSE, REMOVE[-IF[-NOT]] with :START/:END, SUBSTITUTE[-IF[-NOT]] with :START/:END, SORT. * Speed up ADJUST-ARRAY. 2.23 (1999-07-22) ================= User visible changes -------------------- * Added a new module - "postgresql": interface to the PostgreSQL ODBMS. * Implemented ANSI CL macro WITH-PACKAGE-ITERATOR. * Conforming to ANSI CL issue : New function ALLOCATE-INSTANCE. * Conforming to ANSI CL issue : The symbols GENERIC-FLET and GENERIC-LABELS are not exported from the COMMON-LISP package any more. * Conforming to ANSI CL issues and . * Conforming to ANSI CL Issue MACRO-FUNCTION now takes an optional second argument ENV. * When CLISP is invoked with an "-a" option, *features* contain :ANSI-CL. * Weak pointers are implemented. New functions MAKE-WEAK-POINTER, WEAK-POINTER-P, WEAK-POINTER-VALUE. * The function OPEN, when creating unbuffered file streams, now supports any of the following :ELEMENT-TYPEs: CHARACTER and ([UN]SIGNED-BYTE n), where n is a multiple of 8. * The functions MAKE-PIPE-INPUT-STREAM, MAKE-PIPE-OUTPUT-STREAM, MAKE-PIPE-IO-STREAM, SOCKET-ACCEPT, SOCKET-CONNECT accept a keyword argument :ELEMENT-TYPE. Possible values are types equivalent to CHARACTER or (UNSIGNED-BYTE n), (SIGNED-BYTE n), where n is a positive multiple of 8. Previously these functions returned streams whose element-type was (OR CHARACTER (UNSIGNED-BYTE 8)). * STREAM-ELEMENT-TYPE is SETFable. The element type of streams created by the functions MAKE-PIPE-INPUT-STREAM, MAKE-PIPE-OUTPUT-STREAM, MAKE-PIPE-IO-STREAM, SOCKET-ACCEPT, SOCKET-CONNECT can be modified, if the old and the new element type are compatible. (UNSIGNED-BYTE n) and (SIGNED-BYTE n) are compatible, and CHARACTER is compatible with ([UN]SIGNED-BYTE 8). * Character I/O can now be customized via encodings. A stream's external format is an encoding, and the symbol macros *DEFAULT-FILE-ENCODING*, *PATHNAME-ENCODING*, *TERMINAL-ENCODING*, *MISC-ENCODING*, FFI:*FOREIGN-ENCODING*, AFFI:*FOREIGN-ENCODING* contain user-settable encodings. Encodings can be obtained through the function MAKE-ENCODING, and as values of the constants CHARSET:UCS-2, CHARSET:UNICODE-16, CHARSET:UNICODE-16-BIG-ENDIAN, CHARSET:UNICODE-16-LITTLE-ENDIAN, CHARSET:UCS-4, CHARSET:UNICODE-32, CHARSET:UNICODE-32-BIG-ENDIAN, CHARSET:UNICODE-32-LITTLE-ENDIAN, CHARSET:UTF-8, CHARSET:JAVA, CHARSET:ASCII, CHARSET:ISO-8859-1, CHARSET:ISO-8859-2, CHARSET:ISO-8859-3, CHARSET:ISO-8859-4, CHARSET:ISO-8859-5, CHARSET:ISO-8859-6, CHARSET:ISO-8859-7, CHARSET:ISO-8859-8, CHARSET:ISO-8859-9, CHARSET:ISO-8859-10, CHARSET:ISO-8859-13, CHARSET:ISO-8859-14, CHARSET:ISO-8859-15, CHARSET:KOI8-R, CHARSET:MAC-ARABIC, CHARSET:MAC-CENTRAL-EUROPE, CHARSET:MAC-CROATIAN, CHARSET:MAC-CYRILLIC, CHARSET:MAC-DINGBAT, CHARSET:MAC-GREEK, CHARSET:MAC-HEBREW, CHARSET:MAC-ICELAND, CHARSET:MAC-ROMAN, CHARSET:MAC-ROMANIA, CHARSET:MAC-SYMBOL, CHARSET:MAC-THAI, CHARSET:MAC-TURKISH, CHARSET:MAC-UKRAINE, CHARSET:CP437, CHARSET:CP737, CHARSET:CP775, CHARSET:CP850, CHARSET:CP852, CHARSET:CP855, CHARSET:CP857, CHARSET:CP860, CHARSET:CP861, CHARSET:CP862, CHARSET:CP863, CHARSET:CP864, CHARSET:CP865, CHARSET:CP866, CHARSET:CP869, CHARSET:CP874, CHARSET:WINDOWS-1250, CHARSET:WINDOWS-1251, CHARSET:WINDOWS-1252, CHARSET:WINDOWS-1253, CHARSET:WINDOWS-1254, CHARSET:WINDOWS-1255, CHARSET:WINDOWS-1256, CHARSET:WINDOWS-1257, CHARSET:WINDOWS-1258, CHARSET:HP-ROMAN8, CHARSET:NEXTSTEP. * The functions OPEN, MAKE-PIPE-INPUT-STREAM, MAKE-PIPE-OUTPUT-STREAM, MAKE-PIPE-IO-STREAM, SOCKET-ACCEPT, SOCKET-CONNECT and the macro WITH-OUTPUT-TO-PRINTER accept a keyword argument :EXTERNAL-FORMAT. Possible values are encodings, such as returned by the function MAKE-ENCODING, the line terminator keywords :UNIX, :MAC, :DOS, and :DEFAULT. New function STREAM-EXTERNAL-FORMAT. * STREAM-EXTERNAL-FORMAT is SETFable. The external format of streams created by the functions OPEN, MAKE-PIPE-INPUT-STREAM, MAKE-PIPE-OUTPUT-STREAM, MAKE-PIPE-IO-STREAM, SOCKET-ACCEPT, SOCKET-CONNECT can be modified. * OPEN has a new keyword argument :BUFFERED. It determines whether the file stream returned is buffered or not. Possible values for it are NIL, T, or :DEFAULT. If it is :DEFAULT, buffered file streams will be returned for regular files and (on Unix) block-devices, and unbuffered file streams for special files. * The functions MAKE-PIPE-INPUT-STREAM, MAKE-PIPE-OUTPUT-STREAM, MAKE-PIPE-IO-STREAM, SOCKET-ACCEPT, SOCKET-CONNECT have a new keyword argument :BUFFERED. It determines whether the stream returned is buffered or not. Possible values for it are NIL, T, or :DEFAULT. :DEFAULT is equivalent to NIL. * New functions READ-INTEGER, WRITE-INTEGER which can be used to do binary I/O on streams with element-type (UNSIGNED-BYTE 8). * The Gray proposal is implemented: New classes FUNDAMENTAL-STREAM, FUNDAMENTAL-INPUT-STREAM, FUNDAMENTAL-OUTPUT-STREAM, FUNDAMENTAL-CHARACTER-STREAM, FUNDAMENTAL-BINARY-STREAM, FUNDAMENTAL-CHARACTER-INPUT-STREAM, FUNDAMENTAL-CHARACTER-OUTPUT-STREAM, FUNDAMENTAL-BINARY-INPUT-STREAM, FUNDAMENTAL-BINARY-OUTPUT-STREAM. New generic functions STREAM-READ-CHAR, STREAM-UNREAD-CHAR, STREAM-READ-CHAR-NO-HANG, STREAM-PEEK-CHAR, STREAM-LISTEN, STREAM-READ-CHAR-WILL-HANG-P, STREAM-READ-CHAR-SEQUENCE, STREAM-READ-LINE, STREAM-CLEAR-INPUT, STREAM-WRITE-CHAR, STREAM-LINE-COLUMN, STREAM-START-LINE-P, STREAM-WRITE-CHAR-SEQUENCE, STREAM-WRITE-STRING, STREAM-TERPRI, STREAM-FRESH-LINE, STREAM-FINISH-OUTPUT, STREAM-FORCE-OUTPUT, STREAM-CLEAR-OUTPUT, STREAM-ADVANCE-TO-COLUMN, STREAM-READ-BYTE, STREAM-READ-BYTE-SEQUENCE, STREAM-WRITE-BYTE, STREAM-WRITE-BYTE-SEQUENCE. The functions CLOSE, OPEN-STREAM-P, STREAM-ELEMENT-TYPE are now generic functions. See for details. * The macros FFI:DEF-C-CALL-OUT and FFI:DEF-C-CALL-IN now add an argument :LANGUAGE :STDC (means ANSI C) instead of :LANGUAGE :C (means old K&R C). * Conforming with ANSI CL, SIMPLE-CONDITION now has the initarg :FORMAT-CONTROL instead of :FORMAT-STRING. New function SIMPLE-CONDITION-FORMAT-CONTROL. * Conforming with ANSI CL, FILE-LENGTH and FILE-POSITION, when called on an unbuffered file stream, now return NIL instead of signaling an error. * Conforming with ANSI CL, MACROEXPAND and MACROEXPAND-1 now accept NIL as second argument, denoting the global environment. * Conforming with ANSI CL, the reader now signals an error of type READER-ERROR when trying to parse tokens like 35/000 or 1.5e1000, instead of DIVISION-BY-ZERO and FLOATING-POINT-OVERFLOW, respectively. * On Unix, calling OPEN on a block device now returns a buffered stream instead of an unbuffered stream. * On Unix, writing to a pipe created by MAKE-PIPE-OUTPUT-STREAM or MAKE-PIPE-IO-STREAM after the corresponding child process has exited now leads to an error message instead of terminating the CLISP process. * The generic function GENERIC-STREAM-LISTEN is replaced with GENERIC-STREAM-READ-CHAR-WILL-HANG-P. * The function XGCD now really always returns coefficients of smallest possible absolute value. * Fixed a interpreter bug: (let (x) (declare (special x)) ...) did not change the global value of x in interpreted mode. * Fixed a bug: On Win32, Ctrl-Z sometimes caused two levels of the read-eval- print loop to be aborted instead of just one. * Fixed a bug: READ-CHAR-SEQUENCE, when called on a string input stream, forgot to advance the pointer into the string. * Fixed a bug: WRITE-CHAR-SEQUENCE on Win32 failed to convert NL to CR/LF. * Fixed a bug: Calling (GET-DISPATCH-MACRO-CHARACTER disp-char sub-char) would crash, instead of returning NIL, if there is no macro-character function associated with sub-char after disp-char. * Fixed a bug: (CHECK-TYPE place typespec string) did not evaluate `string'. * Fixed a bug: Calling the function FINALIZE caused a crash during the next GC on many platforms. * Fixed a bug: Calling a generic function without any installed method resulted in an inappropriate error message, not a call to NO-APPLICABLE-METHOD. * Fixed a bug: Closing a SOCKET-SERVER twice, or using a closed SOCKET-SERVER could result in inappropriate error messages. * Fixed a bug: (format nil "~@D" 0) ==> "+0" now. Portability ----------- * Added support for SPARC running Linux. * Added support for Apple PowerPC running MacOS X Server (a.k.a. Rhapsody). * Improved support for m68k running Linux. * Added build instructions for Win32 using MSVC 6.0. Other modifications ------------------- * On Linux 2.2.x with glibc-2.1, Solaris, OSF/1 and Irix, stack overflow is now caught reliably. Previously, endless recursion in interpreted code could cause a crash in some cases. * Speed up the function DIRECTORY on Unix in some cases. * Speed up compiled calls to LDB, LDB-TEST, MASK-FIELD, DPB, DEPOSIT-FIELD. 2.22 (1999-01-08) ================= Important note -------------- * Changed bytecode format. All .fas files generated by previous CLISP versions are invalid and must be recompiled. User visible changes -------------------- * Conforming to ANSI CL issue : multiple values in ASSERT, ROTATEF, SHIFTF &c. * Conforming to ANSI CL issue : `values' can take multiple value places in setf &c. * The variable `*prompt-with-package*' is replaced with `*prompt*', which can be a function. See for details. * Conforming with X3J13 writeup , an error is now signalled when a lambda expression (not a function) is passed to APPLY, FUNCALL, SETF SYMBOL-FUNCTION, EVERY, SOME, NOTEVERY, NOTANY, SET-MACRO-CHARACTER, SET-DISPATCH-MACRO-CHARACTER. The latter two now accept a symbol instead of a function. * X3J13 vote <103> = writeup is implemented: COMMON-LISP:IN-PACKAGE is now a macro. LISP:IN-PACKAGE retains the old semantics as a function. The syntaxes (IN-PACKAGE "FOO") and (IN-PACKAGE :FOO) work with both variations. * X3J13 vote <11> = writeups , , , , are implemented: Characters do not have font and bits attributes any more. The following symbols are not exported from package COMMON-LISP any more: STRING-CHAR STRING-CHAR-P CHAR-FONT-LIMIT CHAR-BITS-LIMIT CHAR-CONTROL-BIT CHAR-META-BIT CHAR-SUPER-BIT CHAR-HYPER-BIT CHAR-BITS CHAR-FONT MAKE-CHAR INT-CHAR CHAR-BIT SET-CHAR-BIT MAKE-STRING and MAKE-STRING-OUTPUT-STREAM have a new keyword argument :ELEMENT-TYPE. New types BASE-CHAR, EXTENDED-CHAR, BASE-STRING, SIMPLE-BASE-STRING. * X3J13 writeup is implemented: New function GET-SETF-EXPANSION, new macro DEFINE-SETF-EXPANDER. The old symbols GET-SETF-METHOD-MULTIPLE-VALUE, GET-SETF-METHOD, DEFINE-SETF-METHOD are removed from package COMMON-LISP. * X3J13 writeups and are implemented: New condition classes PARSE-ERROR and READER-ERROR. * X3J13 writeup is implemented: New condition class UNBOUND-SLOT. New function UNBOUND-SLOT-INSTANCE. * X3J13 writeups and are implemented: COMMONP and COMPILER-LET are not exported from package COMMON-LISP any more. * X3J13 vote <138> = writeup is implemented: PEEK-CHAR does less side effects than READ-CHAR followed by UNREAD-CHAR would do. * X3J13 writeup is implemented: When looking up a feature symbol in *FEATURES*, the package is no longer ignored. All initial elements of *FEATURES* are now keywords. The reader binds *PACKAGE* to # during #+ and #-. * X3J13 writeup is implemented: Some of the values of SLOT-MISSING are ignored, depending on context. * X3J13 writeup is implemented: Assigning the variable bound by the WITH-INPUT-FROM-STRING, WITH-OPEN-FILE, WITH-OPEN-STREAM, WITH-OUTPUT-TO-STRING macros generates a compiler warning. * X3J13 writeup is implemented: The functions MAKE-SEQUENCE, COERCE, CONCATENATE, MAP, MERGE signal an error if the result type specifies a length inconsistent with the other arguments. * X3J13 writeup is implemented: SYMBOL-MACROLET of special variables or constants now signals an error. * Conforming with X3J13 writeup , the first argument of LDIFF may now be a dotted list. * PATHNAME-MATCH-P and TRANSLATE-PATHNAME now treat missing pathname components the same as wild ones. * Renamed function SOCKET-STREAM-PEER-HOST to SOCKET-STREAM-PEER. New functions SOCKET-STREAM-LOCAL and SOCKET-SERVER-HOST. * Conforming to ANSI CL, DEFSTRUCT with option :INCLUDE now does not define accessors which were already defined in a superclass DEFSTRUCT. This solves the problems that occur when using the same :CONC-NAME for the new and the inherited structure, without need for the DEFSTRUCT option :INHERIT. * The functions MAKE-BROADCAST-STREAM, MAKE-CONCATENATED-STREAM, MAKE-TWO-WAY-STREAM, MAKE-ECHO-STREAM now verify that their arguments are input streams or output streams, respectively. * The function EQUALP now ignores the element type of arrays and looks only at the array contents, as specified by ANSI CL. * The *FEATURES* list now contains the symbol CLTL2 instead of the symbol CLTL1. * The limit for file size of files that can be accessed by CLISP is increased: 4 GB for character streams, 512 MB for integer streams. The previous limits were 16 MB for character streams, 2 MB for integer streams. * Fixed a bug: Calling the function INTERACTIVE-STREAM-P with a non-stream argument could cause a crash. * Fixed a bug in the LOOP macro: OF-TYPE was not supported in numeric accumulation clauses (COUNT/SUM/MAXIMIZE/MINIMIZE). * Fixed a bug in the LOOP macro: The FOR clauses FROM/TO/BY can now be given in any order. * Fixed a bug: (UPGRADED-ARRAY-ELEMENT-TYPE 'STANDARD-CHAR) returned T instead of STRING-CHAR. * Fixed a bug: The function CERROR signalled an error if more than two arguments were given and the second argument was a condition. * Fixed a bug: Hash tables with test #'EQUALP did not work correctly when the keys are characters, multi-dimensional arrays or pathnames. * The function VALUES-LIST now verifies that its argument is a proper list. * The function XGCD now in most cases (but not always) returns coefficients of smallest possible absolute value. Suggested by the LiDIA group. Portability ----------- Other modifications ------------------- 2.21 (9 September 1998) ======================= Important note -------------- * Changed bytecode format. All .fas files generated by previous CLISP versions are invalid and must be recompiled. User visible changes -------------------- * The 16 MB memory size limit on 32-bit machines is gone. No need for wide-mode binaries any more. The "makemake" option --with-wide is not supported any more. The command-line option -W is supported for backward compatibility, but will be removed in the future. * New variables *WARN-ON-FLOATING-POINT-CONTAGION* and *FLOATING-POINT-CONTAGION-ANSI*. * New function PROBE-DIRECTORY which tests for the existence of a directory. Suggested by many people. * New FORMAT directives ~/ (ANSI standard) and ~! (a better alternative). * ANSI CL variable *PRINT-RIGHT-MARGIN* is implemented. * The functions WRITE and WRITE-TO-STRING take the :RIGHT-MARGIN key argument. * X3J13 writeup is implemented: New type BOOLEAN. Suggested by Sam Steingold. * X3J13 writeup is implemented: Errors during function calls (too few arguments, too many arguments, invalid keyword arguments, odd number of keyword arguments, unrecognized keyword arguments) are now of type PROGRAM-ERROR. * X3J13 writeup is implemented: New function ENSURE-DIRECTORIES-EXIST. Suggested by Pierpaolo Bernardi. * X3J13 writeup is implemented: The macro DEFINE-SYMBOL-MACRO is now exported from package COMMON-LISP. Suggested by Pierpaolo Bernardi. * X3J13 writeup is implemented: New function ARRAY-DISPLACEMENT. * X3J13 writeup is implemented: Class objects can now be used as parameter specializer names (not only symbols and lists of the form (EQL object)). * X3J13 writeup is implemented: When :OUTPUT-FILE is given to COMPILE-FILE or COMPILE-FILE-PATHNAME, missing pathname components are merged in from the input file pathname. * X3J13 writeup is implemented: COMPILE-FILE-PATHNAME accepts any keyword arguments. * X3J13 writeup is implemented: COMPUTE-APPLICABLE-METHODS is now a generic function. * X3J13 writeup is implemented: Predefined condition types have their own private slot names. * X3J13 vote <57> = writeup is implemented: Different slots in a structure cannot have names whose SYMBOL-NAME are equal. * X3J13 writeup is implemented: New type specifier (CONS car-type cdr-type). * X3J13 writeup is implemented: The implicit BLOCK generated by DEFMACRO and DEFTYPE encloses only the body forms, not the forms occurring in the lambda list. * X3J13 writeup is implemented: New function COPY-STRUCTURE. * X3J13 writeup is implemented: New classes GENERIC-FUNCTION, STRUCTURE-OBJECT, CLASS, METHOD. Removed the type STRUCTURE. * X3J13 writeup is implemented: Do not export EVALHOOK, APPLYHOOK, *EVALHOOK*, *APPLYHOOK* from package COMMON-LISP any more. * X3J13 writeup is implemented: NOTINLINE declarations of macros having special compiler treatment are now respected. * X3J13 writeups and are implemented: DEFSTRUCT accepts an option :PRINT-OBJECT, similar to :PRINT-FUNCTION, and each of these options causes a method on PRINT-OBJECT to be installed. * X3J13 writeup is implemented: New function SPECIAL-OPERATOR-P. The function SPECIAL-FORM-P still exists, but its use generates a compiler warning. * X3J13 writeup is implemented: New condition types FLOATING-POINT-INEXACT, FLOATING-POINT-INVALID-OPERATION. * Fixed a bug: Reading objects in #n# syntax into typed structure slots gave an error if the structure's constructor was not compiled. Reported by Sam Steingold. * BUTLAST and NBUTLAST are now ANSI CL compliant: They signal an error if the argument is a dotted list of length 0. (Stupid.) * The macro WITH-OUTPUT-TO-STRING is now ANSI compliant. * Added FFI support for NetBSD/m68k. Thanks to Jörn Clausen . * Use of the deprecated functions GENTEMP and SET now generates a compiler warning. * Stricter syntax checking for DO and DO*. * When CLOS:CALL-NEXT-METHOD is called with arguments, it is now checked that the set of applicable methods is the same as for the original arguments, in interpreted code only. * The CLX documentation now also exists in HTML format. Thanks to Gilbert Baumann . * The normal read-eval-print loop does not call (CLEAR-INPUT *STANDARD-INPUT*) any more. This means that under X11, cut and paste of multiple lines into an xterm running clisp now works. Suggested by Sam Steingold. * When opening socket servers, ignore EADDRINUSE errors coming from other sockets, in TIME_WAIT or CLOSE_WAIT state, hanging around on the port. Suggested by Don Cohen. * Fixed a bug: When *PRINT-PRETTY* = T, (PRINC #\Newline) often caused two newline characters to be output instead of a single one. * Fixed a bug: The sequence type functions refused to handle sequence types of the form ([SIMPLE-]ARRAY eltype 1). SUBTYPEP returned wrong results for type specifiers of the form ([SIMPLE-]ARRAY eltype n). * Fixed a bug: GET-MACRO-CHARACTER on a dispatch macro character does not result in an error any more. * Fixed a bug in ECASE, ETYPECASE, CCASE, CTYPECASE. These macros now accept T and OTHERWISE as keys. * Fixed a bug: OPEN did not accept type specifiers defined by DEFTYPE as :ELEMENT-TYPE argument. * Fixed a bug in the LOOP macro: Forms containing REPEAT clauses were executed too often in the presence of FOR-= clauses. * Fixed a bug: The SPACE macro returned a list of the form's values, instead of the values themselves. * Fixed a bug, implement X3J13 writeup : When *PRINT-READABLY* = T, (PRINC string) caused the string to be output in double-quotes instead of literally. * X3J13 writeup is implemented: A "variable is used despite of IGNORE declaration" warning is not emitted any more for a variable that is only assigned to and not used for value. Suggested by Pierpaolo Bernardi. * Fixed a bug in function FILE-AUTHOR on Win32. * Fixed a bug: CLISP was unable to determine the user's homedir in certain (obscure) circumstances. * Do not warn anymore if someone modifies one of the standard generic functions of CL like PRINT-OBJECT and INITIALIZE-INSTANCE. Portability ----------- * Added AmigaOS support for the socket functions. It's not perfect, but sufficient for writing socket clients. Thanks to Jörg Höhle. * Port to Win32 using msvc5. (Previously only msvc4 was supported.) * Dropped support for pre-ANSI-C compilers. * Updated support for EMX. * Dropped support for EMX versions older than 0.9c. * Added support for PowerPC running MkLinux. * Removed (incomplete) support for MS Windows 3.1. Other modifications ------------------- * `clisp-link' has a new command `run', to run a linking set with some modules loaded. If CLISP has been configured with option --with-dynamic-modules, this is much faster than constructing a temporary linking set. Suggested by Gilbert Baumann . * Compiling IFs with no else part now produce better code (Jörg Höhle). * Speed up I/O to *STANDARD-INPUT*, *STANDARD-OUTPUT* and *TERMINAL-IO*: If standard input is redirected from a file, the input side of *TERMINAL-IO* will be buffered. If standard output is redirected to a file, the output side of *TERMINAL-IO* will be buffered. * Dropped the STDWIN library. * Added a new type encoding scheme which allows all address ranges from 0x00000000 to 0x7FFFFFFF to be used. This should make porting to some systems easier. * Added bindings to libc for Linux with libc6 (aka glibc 2.0). * Miscellaneous documentation updates. 2.20.1 (6 December 1997) ======================== User visible changes -------------------- * Fixed a bug which could cause a crash when Ctrl-C was pressed during heap allocation on i386. Other modifications ------------------- * The implementation notes now also exist in HTML format. 2.20 (25 September 1997) ======================== User visible changes -------------------- * X3J13 vote <53> is implemented: DEFSTRUCT BOA constructors can have &KEY arguments. * X3J13 vote <40> is partially implemented: New variable *READ-EVAL*. * X3J13 vote <150> is implemented: (READTABLE-CASE readtable) can now have the value :INVERT. * MAKE-PACKAGE and IN-PACKAGE accept a keyword argument :CASE-SENSITIVE. Similarly, DEFPACKAGE accepts an option :CASE-SENSITIVE. When its value is non-NIL, the package will be case sensitive, i.e. the reader will not case-convert symbol names before looking them up or creating them in this package. The package names are still subject to (READTABLE-CASE *READTABLE*), though. * X3J13 vote <157> is implemented: ROOM accepts an optional argument with default value :DEFAULT. * New macro SPACE. (SPACE form) evaluates form and prints information about the memory allocations caused by this evaluation. * The spanish translation is now 100% complete. Thanks to Carlos Linares. * DESCRIBE of a structure now displays the structure's slots. * The reader now accepts the syntax #\^A ... #\^Z for the ASCII control characters. * Fixed a CLOS bug: &ALLOW-OTHER-KEYS in lambda lists of INITIALIZE-INSTANCE now disables the validity checking of corresponding MAKE-INSTANCE calls. Thanks to Matthias Lindner . * Fixed a bug: The type REAL is now accepted as a declaration specifier. * Fixed a bug: When using GNU gettext, the LOCALIZED function always returned the value corresponding to language ENGLISH, and the interactive conflict resolution of some IMPORT/EXPORT package operations aborted with an internal error. * Fixed a bug in the foreign function interface: call-ins did not work on some platforms. Thanks to Matthias Lindner . * Fixed a bug: Calling the function SOCKET-SERVICE-PORT with a non-string argument caused a crash. * Fixed two bugs which could cause a crash when a GC occurred during an IN-PACKAGE or during a pathname operation (DOS, OS/2, Win32 versions only). * Added image support to the clx/new-clx module. Thanks to Gilbert Baumann . Portability ----------- * More Win32 support: stack overflow handling, foreign function interface, more robust memory management. * Added support for Win32 (WinNT and Win95), using Borland C++. * Fixed a compilation error when compiling for sparcv8. Thanks to Hans Adams . * Updated support for Solaris/x86. Thanks to Lutz Euler . Other modifications ------------------- * Reduced the number of conses allocated by calling APPLY on a function with both &KEY and &REST. Thanks to Jörg Höhle. * The CLX documentation can now be viewed in ghostview. Thanks to Karl M. Hegbloom . 2.19 (7 August 1997) ==================== User visible changes -------------------- * Two new add-on modules: clx/new-clx: Fast Common Lisp to X11 interface. Written by Gilbert Baumann . clx/mit-clx: Classic Common Lisp to X11 interface. * (DRIBBLE filename) now appends to the given file instead of overwriting it. * Fixed a bug: Platform dependent constants are not inlined in .fas files any more. * Fixed a bug: Binding *PRINT-PRETTY* to NIL inside a PRINT-OBJECT method or inside a structure's print-function could result in undefined behaviour. Thanks to Don Cohen . * Fixed a bug: For x a float, (= 0 x) and (EQUALP 0 x) could result in undefined behaviour. Thanks to Don Cohen . * Fixed a bug: The error message issued by CHECK-TYPE was wrong. * Fixed a bug: Calling (DRIBBLE pathname) after (DRIBBLE) did not work. Thanks to Art Nuzzo . * Fixed a bug: The WITH-STANDARD-IO-SYNTAX macro caused *PACKAGE* to be bound to an invalid value. * Fixed two bugs in the GC (one in the generational GC, one in the non-generational GC). Big thanks to Marcus Daniels. * Fixed a bug: Printing socket streams created by SOCKET-ACCEPT could result in an error or an endless loop. Portability ----------- * Added support for Win32 (WinNT and Win95), using Microsoft Visual C++. * Added support for Cygwin32 version 18 (Unix emulation on WinNT or Win95). * Added support for GNU 0.2 (the Hurd). Thanks to Marcus Daniels. Other modifications ------------------- * "clisp" can now be called with "-" as argument. The standard input is then executed by a read-eval-print loop without prompt, while the remaining arguments will be assigned to the variable *ARGS*. * Overall speedup by 13% on i386. 2.18 (3 May 1997) ================= User visible changes -------------------- * X3J13 vote <182> is now fully implemented: A LET/LET*/COMPILER-LET binding specification may now be a list of length 1, without initial value. Thanks to Gilbert Baumann . * X3J13 vote <78> is now fully implemented: FLET, LABELS, MACROLET establish an implicit BLOCK. * X3J13 vote <100> is implemented: Hash tables with test function EQUALP. * X3J13 vote <131> is partially implemented: #P reader macro for pathnames. * The MULTIPLE-VALUE-BIND macro no longer allows lists as variable specifications, only symbols. Thanks to Gilbert Baumann . * DEFCLASS which changes a class is now allowed and generates a warning. Since UPDATE-INSTANCE-FOR-REDEFINED-CLASS is not supported, it is your responsibility to not use the old instances afterwards. Suggested by Brian Dennis and Tobias Kunze . * The TIME macro now outputs to *TRACE-OUTPUT* instead of *STANDARD-OUTPUT*. Thanks to Nathan Sidwell . * When the argument of the function TRANSLATE-LOGICAL-PATHNAME is a string, it is now interpreted as a logical pathname string. Previously, it was coerced to a pathname through the function PATHNAME, yielding a physical pathname. * CLISP now supports more than the three predefined user-interface languages. New macros DEFLANGUAGE, DEFINTERNATIONAL, DEFLOCALIZED. New function LOCALIZED. The macros ENGLISH, DEUTSCH, FRANCAIS now work only for strings. Removed the macro LANGUAGE-CASE. The implementation uses the GNU gettext library. Thanks to Ulrich Drepper and Marcus Daniels. * New user-interface language ESPANOL. Thanks to Carlos Linares López who has translated about 55% of CLISP's messages to Spanish. * EQUALP now descends structures (but not CLOS instances!) on all platforms, as requested by X3J13 vote <71>. * The EXIT-ON-ERROR macro now also exits when a Ctrl-C interrupt occurs. Thanks to Roger Kehr . * The initial value of *LOAD-PATHS* on Unix is now (#"./" "~/lisp/**/") instead of (#"./" #"./**/" "~/**/"). To be customized in config.lsp. * New variable *LOAD-COMPILING*, which provides the default value for the :COMPILING keyword of function LOAD. The initial value of *LOAD-COMPILING* can be specified by a command line option. * Fixed a bug: (VALUES-LIST '()) often returned one value. Thanks to Gilbert Baumann . * Fixed a bug in the compiler: When optimizing (OR T form), the compiler could abort with an error message. Thanks to Nathan Sidwell . * Fixed a bug in the DEFSTRUCT macro which caused the compiler to issue an error message when compiling a structure definition containing a slot with a constant, non-NIL initializer. Thanks to Matthias Lindner . * Fixed a bug in the DEFCLASS macro which caused DEFCLASS and DEFINE-CONDITION to reject the :DOCUMENTATION class option. Thanks to Don Cohen . * Fixed a bug: The use of type specifiers of the form (FUNCTION argument-types result-type) within THE, ETHE, LOOP and DEFSTRUCT forms could lead to errors. Thanks to Marty Shannon . * Fixed two bugs in the DRIBBLE function: After calling (DRIBBLE pathname) followed by (DRIBBLE), *DEBUG-IO* referred to an unwritable stream. Calling (DRIBBLE pathname) from within a break loop caused some of the output to be logged twice. * Fixed a bug in the expansion of deeply nested backquotes. Thanks to S. Wotherspoon . * Fixed a bug in the LOOP macro: Stepping for FOR-AS-= clauses (LOOP ... {FOR|AS} var = form1 THEN form2 ...) could be executed in the wrong order if form1 is constant and form2 is non-constant. Thanks to Russell Senior . * Fixed a bug in /= : When called with more than two arguments, only the first two arguments were compared; the remaining arguments were ignored. Thanks to J. V. Needham . * Fixed a bug in EQUAL and EQUALP: displaced strings were not compared correctly. * Fixed a bug in EXPT: For x a (COMPLEX RATIONAL) and y = m/2^n, (EXPT X Y) actually returned x ^ (m/2^(n+32)) instead of x ^ (m/2^n). * Fixed a bug in TRUENAME on Unix: If "aa.bb" is a symbolic link to "cc", (TRUENAME "aa.bb") returned "cc.bb" instead of "cc". * Fixed a bug in the management of add-on modules: On some platforms, GC in memory images containing add-on modules always crashed. * Fixed a bug in the generational GC on i386, rs6000, alpha: In some cases, FFI objects in memory could cause the first "small" garbage collection to fail. Thanks to Dr. Werner Fink . * Fixed a bug in the printing routine for SOCKET-SERVER objects. Thanks to Alexey Goldin and Marcus Daniels. Portability ----------- * The core of CLISP can now be compiled with a C++ compiler if no C compiler is available (without readline library, FFI or modules). * Added support for Mips processors in 64-bit mode. * Updated support for Linux 2.0. * Support for immutable objects now works on Linux/ELF. It did already work on Linux/a.out. * Updated Amiga support. Thanks to Jörg Höhle . * Updated Acorn support. Thanks to Peter Burwood . * Updated OS/2 support. Thanks to Jörg Diederich . * Updated support for Solaris/x86. Thanks to Marty Shannon . * Fixed a bug which could cause the readline completion to dump core on HP-UX. * Fixed a bug relating to the read-eval-print loop's return point on some platforms. Thanks to Peter Burwood . * Removed an incompatibility between SPARC/Sun4 and UltraSPARC memory images. Found by Martin Ginkel . * Removed support for AmigaOS versions < 2.04. Other modifications ------------------- * New "makemake" option --with-wide causes normal and wide-mode binaries to be built and distributed simultaneously. New command-line option -W for choosing the wide-mode binaries instead of the normal binaries. * On Unix, "clisp" is now an executable instead of a shell script. * "clisp" can now be called with a Lisp file as argument. The remaining arguments will be passed to the Lisp program in the variable *ARGS*. On Unix, you can thus make Lisp programs executable by putting "#!/usr/local/bin/clisp" in the first line and doing a "chmod a+x". * The read-eval-print loop now calls FORCE-OUTPUT after outputting the prompt. Thanks to Jörg Höhle . * Support for immutable objects now also works in the WIDE tagging scheme. * Reduced the startup time by 20-30%. 2.17 (21 July 1996) =================== Important note -------------- * Changed bytecode format. All .fas files generated by previous CLISP versions are invalid and must be recompiled. User visible changes -------------------- * X3J13 vote <72> is conditionally implemented: Objects other than symbols, lists, numbers, characters, string, bit-vectors are now self-evaluating if *PACKAGE* uses the COMMON-LISP package. * The package CLOS is now among the default use list of a new package. (USE-PACKAGE "CLOS") is not needed any more. To use PCL, you now need to (UNUSE-PACKAGE "CLOS") explicitly. * The bytecode format is now platform independent. As a consequence, compiled functions can be printed readably when *PRINT-READABLY* = T. * Built-in function objects (SUBRs) are now printed readably when *PRINT-READABLY* = T, instead of signaling an error. * Added a , C-PTR-NULL to the FFI. C-PTR-NULL will convert NIL objects into NULL pointers (so that type conflicts can be avoided). * Socket streams are implemented. New functions SOCKET-SERVER, SOCKET-SERVER-CLOSE, SOCKET-SERVER-PORT, SOCKET-WAIT, SOCKET-ACCEPT, SOCKET-CONNECT, SOCKET-STREAM-HOST, SOCKET-STREAM-PORT, SOCKET-SERVICE-PORT, SOCKET-STREAM-PEER-HOST. See for details. Thanks to Marcus Daniels and Marco Ramoni . * Pipe streams now support binary I/O. * MAKE-INSTANCE now also works for DEFSTRUCT classes, and DEFSTRUCT classes can now be subclassed via DEFCLASS with option :METACLASS STRUCTURE-CLASS. Suggested by Manuel Kolp . * User defined methods on NO-APPLICABLE-METHOD now have a chance for a corrective action. Thanks to Mark Thomas . * APROPOS and DESCRIBE now tell you about symbols which name a type or class. * During directory search, symbolic link loops are now ignored instead of resulting in an error. Thanks to Dan Stanger. * Fixed a CLOS bug: REMOVE-METHOD did not work. Thanks to Roger Kehr . * Fixed a bug in the compiler: A (MULTIPLE-VALUE-SETQ vars valform) or (MULTIPLE-VALUE-BIND vars valform ...) form was miscompiled if valform is known to produce a single value. Thanks to Paul Graham . * Fixed at least two bugs in the LOOP macro: FOR-AS-ACROSS clauses could result in AREF signaling an out-of-bounds error at the end of the vector. Initialisations for FOR-AS-= clauses could be executed in the wrong order. * Fixed a bug: the functions ENCODE-UNIVERSAL-TIME and DECODE-UNIVERSAL-TIME computed a wrong DST flag for time values between (T - 2h) and T, where T denotes a DST switch time. * Fixed two bugs in the foreign function interface: multi-dimensional arrays and floating point numbers with value 0.0 were not correctly passed from "foreign land" to "Lisp land". Thanks to Ken Olum . * Fixed a bug in the foreign function interface: call-ins which return structures or unions would not compile correctly. Thanks to Michael Stoll. * Fixed a bug: On Solaris, the function SYSTEM sometimes reported exit status 0 although the command had failed. Thanks to Brian F. Dennis . * Fixed a bug: LOGTEST did not work correctly if both arguments were bignums. * Fixed a bug in the floating point number printing routine: In rare cases, a number was printed with more digits than necessary (without, however, violating the print-read consistency). For example, 2.1416s29 printed as 2.14159s29, and 3.002618f-31 printed as 3.0026179f-31. * Fixed a bug in ATAN: (ATAN y 0) with y < 0 returned pi/2 instead of -pi/2. * Fixed a bug in XGCD which caused the results to be wrong with a small probability, for example in the case (XGCD 77874422 32223899). Portability ----------- * FreeBSD/NetBSD patches and compilation notes. Thanks to Douglas Crosher . * Added support for SUNWspro cc 3.0.1 on Sparc. * Updated support for Ultrix. * Updated support for NeXTstep version 3.3. Thanks to Robert Murphy . * Updated support for SINIX. Thanks to Michael Becker . * Fixed a bug in the conversion of double-float numbers from "foreign land" to "Lisp land" on DEC Alpha. Thanks to Ken Olum . * Fixed a bug in the implementation of LISTEN on Irix: CLISP went into a `function call not implemented' OS error loop. Thanks to Marcus Daniels. * Fixed a signal handling bug on some versions of SunOS 4: Strange things could happen in a break loop. * The `configure' script now supports the --srcdir, --prefix and --exec-prefix options. * Removed support for Atari ST/TT running TOS. Other modifications ------------------- * The compiler now recognizes more function calls as inlinable: Cases like (FUNCALL (LAMBDA ...) ...), (DECLAIM (INLINE F)) (MAPCAR #'F ...) are now compiled as inline function calls. Previously you had to write (FUNCTION (LAMBDA ...)) explicitly. Suggested by Jörg Höhle. * "makemake" now supports the --srcdir, --prefix and --exec-prefix options. * Added a testsuite for part of CLOS. Thanks to Christian Jullien. * Miscellaneous documentation updates. 2.16 (23 June 1995) =================== Important note -------------- * Changed bytecode format. All .fas files generated by previous CLISP versions are invalid and must be recompiled. User visible changes -------------------- * X3J13 vote <106> is implemented: LAST has an optional argument. Thanks to Pierpaolo Bernardi. * X3J13 vote <87> is implemented: New function COMPLEMENT. Thanks to Pierpaolo Bernardi. * X3J13 vote <40> is partially implemented: New macro WITH-STANDARD-IO-SYNTAX. Thanks to Pierpaolo Bernardi. * X3J13 vote <98> is partially implemented: New macro WITH-HASH-TABLE-ITERATOR. Thanks to Pierpaolo Bernardi. * X3J13 vote <97> is implemented: New functions HASH-TABLE-REHASH-SIZE, HASH-TABLE-REHASH-THRESHOLD, HASH-TABLE-SIZE, HASH-TABLE-TEST. Thanks to Pierpaolo Bernardi. * X3J13 votes <69> and <70> are implemented: New declaration DYNAMIC-EXTENT. * The dpANS macro LAMBDA is implemented. * The dpANS declaration IGNORABLE is implemented. * The dpANS function CONSTANTLY is implemented. Thanks to Pierpaolo Bernardi. * Better syntax checking for the CASE macro. Thanks to Pierpaolo Bernardi. * The user interface language may be chosen through the environment variable LANG as well. * The pretty printer now indents lists spanning more than one line by two spaces, instead of one. New variable *PRINT-INDENT-LISTS*. * *PRINT-PRETTY* is now initially T. * Foreign function interface: New foreign type constructor FFI:C-ARRAY-MAX, implements zero-terminated arrays of bounded size. * On Unix, 8-bit characters are legal in pathnames if the operating system accepts them. * On DOS, #\Newline is converted to CR/LF when doing character output to unbuffered file streams (referring to special files). * Fixed a bug in the interpreter and compiler: A MULTIPLE-VALUE-SETQ form which assigns to a symbol macro expanded to a wrong form; compiling it produced a warning. Thanks to Pierpaolo Bernardi. * Fixed a bug in the compiler: Some CASE form with duplicate keys, when compiled, chose the wrong clause to be executed. Thanks to Pierpaolo Bernardi. * Fixed a bug in the #+/#- reader macros. (LIST #+FOO #-BAR 1 2 3) now returns (2 3), not (3). * Fixed a bug in LOG: (LOG x^n x^m), where n, m are integers, |m| > 1, and x is a rational number /= 1, now correctly returns n/m. Previously, (LOG 2 4) returned 1/0. * Fixed a CLOS bug: Using the :DOCUMENTATION option in DEFGENERIC declarations for function names of the form (SETF symbol) signalled an error. Thanks to Pierpaolo Bernardi. * Fixed a bug in DEFSETF: An IGNORE declaration for the store variable had no effect. Thanks to Pierpaolo Bernardi. Portability ----------- * Added support for Linux/ELF. Thanks to Marcus Daniels. * Added support for Solaris/x86. Thanks to Marty Shannon. * On Solaris, LISTEN and READ-CHAR-NO-HANG did not work on the terminal stream if standard input was redirected to come from a file. * On OS/2, consider the virtual directory \PIPE\ as existent. Other modifications ------------------- * A couple of bug fixes and new functions in the STDWIN package. Thanks to Pierpaolo Bernardi. * The structure of external modules has changed a bit. * Miscellaneous documentation updates. 2.15 (25 April 1995) ==================== User visible changes -------------------- * Michael Stoll has written a graphical user interface for CLISP under NeXTstep. * Added a foreign language module WILDCARD for wildcard matching. * Added a foreign language module REGEXP for Unix-style regular expression matching and searching. * X3J13 vote <94> is implemented: Calling GENSYM has no side effects except incrementing the counter. New variable *GENSYM-COUNTER*. * New macro FORMATTER converts a FORMAT control string to a function. * Some FORMAT fixes: + X3J13 vote <81> is implemented: The FORMAT ~:^ directive is more useful. Warning: Old style "~:^" directives need to be converted to "~#:^". + X3J13 vote <82> is implemented: The FORMAT ~D, ~B, ~O, ~X, ~R directives accept an optional comma-interval parameter. + X3J13 vote <84> is implemented: FORMAT ~C outputs characters with no bits as if by WRITE-CHAR. + Handling of ~^ within the FORMAT ~? directive. * X3J13 vote <167> is implemented: New types FILE-STREAM, SYNONYM-STREAM, BROADCAST-STREAM, CONCATENATED-STREAM, TWO-WAY-STREAM, ECHO-STREAM, STRING-STREAM. New functions OPEN-STREAM-P, SYNONYM-STREAM-SYMBOL, BROADCAST-STREAM-STREAMS, CONCATENATED-STREAM-STREAMS, TWO-WAY-STREAM-INPUT-STREAM, TWO-WAY-STREAM-OUTPUT-STREAM, ECHO-STREAM-INPUT-STREAM, ECHO-STREAM-OUTPUT-STREAM. * New condition type PRINT-NOT-READABLE. New function PRINT-NOT-READABLE-OBJECT. * New function FINALIZE. (FINALIZE object function) has the effect that function will be called when object is being garbage collected. * DRIBBLE now also redirects *ERROR-OUTPUT*, *TRACE-OUTPUT*, *QUERY-IO*, *DEBUG-IO* if they refer to *TERMINAL-IO*. * Calling SYMBOL-VALUE on a symbol defined as global symbol macro now returns the value of the expansion. New function SYMBOL-MACRO-EXPAND. * Add FFI to the *FEATURES* if the foreign language interface is present. * Fixed a bug: An IGNORE declaration for a macro's &ENVIRONMENT argument now has an effect. * Fixed a couple of bugs in the foreign language interface: Passing zero size arrays did not work, parameters with mode :OUT did not work on SPARC and HP-PA, and some error messages were deficient. * Fixed a bogus error message in SET-DISPATCH-MACRO-CHARACTER. Portability ----------- * Fixed a couple of building problems relating to the foreign language interface (missing `mark_fp_invalid' and `pr_hex8', missing makefile dependencies, support for --with-dynamic-modules, warnings when compiling user2.lsp and foreign1.lsp). * Fixed a building problem: Not all C compilers accept casts in constant expressions used as initializers, e.g. gcc-2.5.8. * Foreign function interface: Fixed a couple of possible bugs in the low-level foreign function call routine for i386/486/586, m680x0, SPARC CPUs. Thanks to Jörg Höhle. * Small fixes for SCO. * Added a utility "hln" for making hard links. Needed for "make distrib"; Solaris "ln" does not make a hard link if a symbolic link is involved. * On some Unix systems, use "uname -m", not "arch", to determine (MACHINE-TYPE) and (MACHINE-VERSION). * More support for BSDI 1.0, AIX, HP-UX, Solaris. * Changed STDWIN so that it compiles under X11R6. Other modifications ------------------- * Speed up compiled calls to FORMAT with literal control string by use of FORMATTER. * Miscellaneous documentation updates. 2.14 (4 April 1995) =================== User visible changes -------------------- * The initial value of *PACKAGE* can be specified by a command line option. * X3J13 vote <6> is implemented: New place ROW-MAJOR-AREF. * X3J13 vote <126> is implemented: New function DELETE-PACKAGE. * X3J13 vote <14> is implemented: Closing a synonym stream does not close its constituent stream. * Foreign language interface for C and ANSI C. New package FFI. New macros FFI:DEF-C-TYPE, FFI:DEF-C-VAR, FFI:DEF-C-CALL-OUT, FFI:DEF-C-CALL-IN, FFI:DEF-C-ENUM, FFI:DEF-C-STRUCT, FFI:DEF-CALL-OUT, FFI:DEF-CALL-IN, FFI:ELEMENT, FFI:DEREF, FFI:SLOT, FFI:CAST, FFI:TYPEOF, FFI:SIZEOF, FFI:BITSIZEOF. This currently works only on Unix and only with the CPUs i386/486/586, m680x0, Mips, SPARC, DEC Alpha, HP-PA, RS/6000. Warning: (COMPILE-FILE "filename.lsp") now overwrites the file "filename.c". * New macros MUFFLE-CERRORS and APPEASE-CERRORS. During their execution, continuable errors are handled by the function CONTINUE. MUFFLE-CERRORS does this silently, APPEASE-CERRORS prints the error as a warning. * New macro EXIT-ON-ERROR. During its execution, non-continuable errors cause CLISP to exit with error status. * The function ED, when asked to edit a non-existent file, now creates that file instead of signaling an error. * When a non-absolute pathname is specified for the -o command line option (destination file of a compilation), it is interpreted as relative to the current directory, not relative to the source file of the compilation. * The readline library now uses the last column of the screen if the terminal is an xterm, for example. Work done by Chet Ramey. * Fixed two bugs in the LOOP macro: FOR-AS-ACROSS clauses could result in AREF signaling an out-of-bounds error at the end of the vector. Initialisations for FOR-AS-= clauses could be executed in the wrong order. * Fixed a bug in the compiler which caused LOAD-TIME-VALUE forms to be evaluated at compile time. * Fixed a bug in the debugger: Choosing a restart Rnnn always invoked the last restart listed, not the chosen one. * Fixed a bug: (CLOSE *TERMINAL-IO*) signals an error again. * On DOS and OS/2, the Lisp reader now treats Ctrl-Z as whitespace. * The -I command line option now tells the readline library to handle the Tab character as normal self-inserting character. * Unix version only: DISASSEMBLE can display machine instructions, provided that GNU gdb is present. Portability ----------- * Updated support for EMX. * Fixed a bug which caused a preprocessor error on SunOS and OSF/1. * Small fixes for Sinix and SCO. * Removed support for Coherent. Other modifications ------------------- * Generational garbage collection now also works on IRIX 5.2. * Generational garbage collection and support for immutable objects do not exclude each other any more. * Speed up the bytecode interpreter by about 2%. * Miscellaneous documentation updates. 1 January 1995 ============== CLISP now compiles and runs on * microcomputers: * DOS * OS/2 2.0 * MS Windows 3.1 * Amiga 500-4000, Amiga OS * Atari ST/TT, TOS * Acorn ARM Risc PC, RISC OS * Unix workstations: * PC, Linux * PC, USL SVR4 * DEC Alpha AXP, OSF/1 * Sun4, SunOS 4 or 5 * HP9000/800, HP-UX * NeXT, NeXTstep 3.1 * PC, NeXTstep 3.2 * SGI Mips, Irix 4 or 5 * SNI Mips, USL SVR4 * DECstation 5000, Ultrix 4.2 * IBM RS/6000, AIX 3.2 * M88000 * Sun386, SunOS 4 * Sun3, SunOS 4 (?) * HP9000/300, HP-UX or NetBSD * Apple MacII, A/UX (?) * Amiga 3000, Amiga Unix 2.1 * Sequent PTX * PC, 386BSD or NetBSD or BSDI/386 * PC, UnixWare * PC, SCO (?) * PC, Coherent 4.0 * Convex, ConvexOS * Atari ST/TT, MiNT Generational GC works on * PC, Linux * Sun4, SunOS 4 or 5 * NeXT, NeXTstep 3.1 * PC, NeXTstep 3.2 * DEC Alpha AXP, OSF/1 3.0 2.13.1 (1 January 1995) ======================= Important note -------------- * Changed bytecode format. All .fas files generated by previous CLISP versions are invalid and must be recompiled. User visible changes -------------------- * The destination file of a compilation can be specified by a command line option. * X3J13 vote <152> is implemented: REDUCE has a keyword argument :KEY. * The printed representation of file streams of element type STRING-CHAR now contains a line number. * Fixed a bug which caused the interpreter to signal an error when evaluating nested DEFUNs. * Fixed a bug which could cause a crash when a GC occurred during single or double float subtraction. Portability ----------- * More support for Acorn ARM running RISCOS. Thanks to Peter Burwood. * Fixed a problem in the readline library on non-POSIX BSD systems: Only LF was output instead of CR/LF. * Updated support for EMX. * The `configure' script now caches its results. Other modifications ------------------- * New memory model TRIVIALMAP_MEMORY which supports generational garbage collection in combination with the WIDE tagging scheme. * Generational garbage collection now also works on NeXTstep and OSF/1 3.0. * When a memory image is loaded, the terminal stream from the previous session is closed. * Renamed `target' to `configure'. * Added a manual page in HTML format. * Miscellaneous documentation updates. 2.13 (26 October 1994) ====================== Important note -------------- * Changed bytecode format. All .fas files generated by previous CLISP versions are invalid and must be recompiled. User visible changes -------------------- * X3J13 vote <77> is implemented: CL:FLET, CL:LABELS, CL:MACROLET allow declarations. * X3J13 vote <78> is implemented: CL:FLET, CL:LABELS, CL:MACROLET, DEFTYPE, DEFSETF, DEFINE-SETF-METHOD establish an implicit BLOCK. * X3J13 vote <128> is implemented: MAKE-PATHNAME, PATHNAME-HOST, PATHNAME-DEVICE, PATHNAME-DIRECTORY, PATHNAME-NAME, PATHNAME-TYPE have a keyword argument :CASE. Thanks to Marcus Daniels. * X3J13 vote <137> is implemented: New functions WILD-PATHNAME-P, PATHNAME-MATCH-P and TRANSLATE-PATHNAME. Thanks to Marcus Daniels. * X3J13 vote <130> is implemented: New built-in type LOGICAL-PATHNAME. New place LOGICAL-PATHNAME-TRANSLATIONS. New functions LOGICAL-PATHNAME, TRANSLATE-LOGICAL-PATHNAME, LOAD-LOGICAL-PATHNAME-TRANSLATIONS, COMPILE-FILE-PATHNAME. Thanks to Marcus Daniels. * X3J13 vote <132> is implemented: Synonym streams to file streams are allowed as pathnames. * Amiga version: SCREEN package is implemented. Thanks to Jörg Höhle. * The debugger emits some more messages to *DEBUG-IO*, not *ERROR-OUTPUT*. * (COERCE symbol 'FUNCTION) now works. * Fixed a bug in ENOUGH-NAMESTRING: In many cases, a relative directory specification was returned instead of an absolute directory specification. * Fixed a CLOS bug which caused (DEFCLASS FOO (STANDARD-OBJECT) ()) and (DEFINE-CONDITION FOO (CONDITION) ()) to signal errors. * Fixed a bug: In some situations, USE-PACKAGE reported a name conflict when there was none. * Fixed a bug: (READ-CHAR-NO-HANG stream nil eof-object) now signals an error if stream is not an input stream. Previously it returned eof-object. * Fixed a bug: On some Unix systems, (FINISH-OUTPUT *TERMINAL-IO*) signalled an error if standard output was redirected to a file. * (SQRT 0) now returns an integer 0 instead of a floating-point 0.0. * Readline library: Fixed a small problem with input prompts longer than the screen width. * Fixed three bugs in the built-in editor. One of them made the editor entirely unusable. Portability ----------- * Added some support for MS Windows. * On DOS, the readline library now handles the /!INPUTRC and history files correctly. * Some modification for the sake of gcc-2.6.1. Other modifications ------------------- * Generational garbage collection now also works on Linux (1.1.52 or newer). * On Unix, external modules written in C can be linked to CLISP without recompiling CLISP from source. For example, the STDWIN library. * Small fix: On some machines, some internal objects were being printed as # instead of #. * Miscellaneous documentation updates. 2.12.1 (1 September 1994) ========================= User visible changes -------------------- * The DEFCONSTANT warning about redefinition of a constant is also inhibited if the constant's new and old values are the same string (in the sense of EQUAL). Thanks to Marcus Daniels. * Unix version only: The daylight saving time flag of a time zone (eighth value of GET-DECODED-TIME and DECODE-UNIVERSAL-TIME) is now correct. Portability ----------- * Added support for Acorn ARM running RISCOS. Thanks to Peter Burwood. * Added support for NetBSD 1.0. Thanks to Douglas Crosher. * Updated support for EMX and DJGPP. * GNU malloc for HP-UX now works. 2.12 (23 August 1994) ===================== User visible changes -------------------- * X3J13 vote <64> is implemented: New macro DESTRUCTURING-BIND. * The function ED can now edit functions that have been entered in interpreted form even if they have later been compiled. * New function UNCOMPILE. (UNCOMPILE function-name) undoes the effect of (COMPILE function-name) if the function's definition had been entered in interpreted form. * The OPEN option :IF-EXISTS :RENAME-AND-DELETE now deletes the renamed file. Previously :RENAME-AND-DELETE was equivalent to :RENAME. * (LISP-IMPLEMENTATION-VERSION) returns a more precise version string. * Readline library: Completion of a function call with no arguments automatically adds the closing parenthesis. * Readline library: When a closing parenthesis is typed, the corresponding opening parenthesis is displayed. Portability ----------- * Added support for Convex. Thanks to Marcus Daniels. * Added support for SCO. Thanks to Cathy Bareiss and Marcus Daniels. * More NeXTstep support. * More Sinix support. Thanks to Manfred Weichel. * Updated support for AmigaOS. Thanks to Jörg Höhle. * Some modification for the sake of gcc-2.6. * Added GNU malloc. For HP-UX. * Added a bunch of character set conversion utilities. Covers the ASCII, ISO Latin-1, IBM PC, HP Roman8, NeXTstep and Atari ST character sets. * The `configure' script now prints its results. * Floating point computations on some CPUs (Sparc, HP-PA, M88000, RS/6000): Fixed some confusion between overflow and NaN and between underflow and zero. * Removed support for Atari Turbo-C (now known as PURE-C). Other modifications ------------------- * Copyright clarification. * Generational garbage collection. This works only for Unix implementations with powerful virtual memory management, currently only SunOS. * Improved virtual memory efficiency: - Memory model SPVW_PAGES: do not put a piece of management data into every page. - Memory model SPVW_BLOCKS: compact conses, do not shuffle them, so that they are kept sorted according to their age. - Memory model SPVW_PURE_BLOCKS: pages containing garbage are immediately freed. * Unix version only: To reduce the startup time, try to use mmap() instead of read() for the startup file. * Added a readline manual page. * Miscellaneous documentation updates. 2.11 (4 July 1994) ================== User visible changes -------------------- * X3J13 votes <115> and <114> are implemented: an elaborate LOOP macro. New macro LOOP-FINISH. Warning: The scoping rules for the iteration variables are hairy. If a FOR/AS initialisation form refers to an iteration variable of a subsequent FOR/AS clause, the effects are implementation dependent! * X3J13 vote <120> is implemented: New function MAP-INTO. * X3J13 vote <79> is implemented: New constants LEAST-POSITIVE-NORMALIZED-SHORT-FLOAT, LEAST-NEGATIVE-NORMALIZED-SHORT-FLOAT, LEAST-POSITIVE-NORMALIZED-SINGLE-FLOAT, LEAST-NEGATIVE-NORMALIZED-SINGLE-FLOAT, LEAST-POSITIVE-NORMALIZED-DOUBLE-FLOAT, LEAST-NEGATIVE-NORMALIZED-DOUBLE-FLOAT, LEAST-POSITIVE-NORMALIZED-LONG-FLOAT, LEAST-NEGATIVE-NORMALIZED-LONG-FLOAT. * The macro WITH-OUTPUT-TO-PRINTER now also works on DOS. * Fixed a bug in DO-SYMBOLS: A symbol which is exported from a used package was considered accessible in the using package even if it was shadowed by another present symbol of the same name. * Fixed a bug in the debugger which caused the BACKTRACE commands to print garbage if the current user interface language was not English. Other modifications ------------------- * Miscellaneous documentation updates. 2.10 (22 June 1994) =================== User visible changes -------------------- * French support is now complete. Thanks to Jörg Höhle. * The user interface language (english, german or french) can now be chosen at startup time through a command line option. The constant *LANGUAGE* has been removed, and its value has been removed from *FEATURES*. New macros ENGLISH, DEUTSCH, FRANCAIS and LANGUAGE-CASE. * There is a command line option that makes CLISP behave more like what ILISP (a popular Emacs LISP interface) expects. * The function CLOS:CALL-NEXT-METHOD can now be called with arguments, but the check that the set of applicable methods must be the same as for the original arguments will be bypassed. * New functions READ-CHAR-SEQUENCE, WRITE-CHAR-SEQUENCE, READ-BYTE-SEQUENCE, WRITE-BYTE-SEQUENCE which perform fast block I/O. * Errors of type FLOATING-POINT-UNDERFLOW are inhibited in floating point computations (and zero is returned instead) during execution of the new macro WITHOUT-FLOATING-POINT-UNDERFLOW. * X3J13 vote <95> is implemented: If the readtable argument passed to GET-MACRO-CHARACTER and GET-DISPATCH-MACRO-CHARACTER is NIL, the standard readtable is used. * PROBE-FILE does not report an error any more if an intermediate directory in the path does not exist. NIL is returned instead. * The DEFCONSTANT warning about redefinition of a constant is inhibited if the constant's new and old values are the same (in the sense of EQL). Thanks to Marcus Daniels. * The function INTERACTIVE-STREAM-P knows that if the terminal stream is referring to a regular file (via input redirection) it is not interactive. * There is a user programmable kind of streams, called generic streams. New functions MAKE-GENERIC-STREAM, GENERIC-STREAM-CONTROLLER, GENERIC-STREAM-P, GENERIC-STREAM-READ-CHAR, GENERIC-STREAM-READ-BYTE, GENERIC-STREAM-LISTEN, GENERIC-STREAM-WRITE-CHAR, GENERIC-STREAM-WRITE-BYTE, GENERIC-STREAM-WRITE-STRING, GENERIC-STREAM-CLEAR-INPUT, GENERIC-STREAM-CLEAR-OUTPUT, GENERIC-STREAM-FINISH-OUTPUT, GENERIC-STREAM-FORCE-OUTPUT, GENERIC-STREAM-CLOSE. See for details. Thanks to Marcus Daniels and Don Cohen. * The macro WITH-OUTPUT-TO-PRINTER may now also work on OS/2. * Fixed a CLOS bug: Generic functions with both optional and keyword arguments did not work. * Fixed a serious bug in the compiler which caused incorrect code to be generated for functions like (LAMBDA (X) (SETQ X 1)). * Fixed a serious bug in the compiler which caused the compiler to crash when compiling functions which contain two or more calls to ASSERT. * Fixed a bug: The macroexpander of MULTIPLE-VALUE-SETQ built up a syntactically illegal form. * Fixed a bug in the reader: When reading pathnames from the syntax #S(PATHNAME ...), #n# references in pathname components were not resolved prior to calling MAKE-PATHNAME. * Fixed a bug in the reader: (read-from-string "1/") signalled an error of type DIVISION-BY-ZERO. * Fixed a bug in the terminal stream: If several consecutive READ-LINE operations on the terminal stream were performed without any text containing newlines being output between them, the prompt finally got duplicated and then became longer and longer. * Fixed a bug in the readline library (bad handling of prompts longer than one line). Thanks to Marcus Daniels. Installation ------------ * All non-Unix versions: Setting the local time zone should now be much easier. 122 time zone names are supported. Portability ----------- * Unix version only: Getting the time zone should be more robust. * Added support for NeXT (68k or i386 CPU) running NeXTstep 3.2. Thanks to Marcus Daniels. * Added support for Sequent PTX. Thanks to Marcus Daniels. * Added support for m88000 running DG/UX. Thanks to Pat McClanahan. * Added support for UnixWare. Thanks to Alexander Adam. * Added support for BSDI/386. Thanks to Atsuo Ohki. * More support for WATCOM C on DOS. Thanks to Blake McBride. * More support for IRIX 5. Thanks to Bjorn Remseth. * More support for Sun4m. Thanks to Neil Faulks. * Better support (speedup) for HP 9000/800 running HP-UX. * On HP 9000/700 running HP-UX: Do not depend directly on the assembler. * Maybe some support for SCO. Thanks to Cathy Bareiss. Other modifications ------------------- * Speedup SUBLIS and NSUBLIS. * Let all known versions of gcc2 emit dbra instructions for loops. Thanks to Jörg Höhle. * Renamed condition.lsp to conditio.lsp. * Miscellaneous documentation updates. 8 January 1994 ============== Portability ----------- * Remove (incomplete) support for VMS. 7 January 1994 ============== CLISP now compiles and runs on * microcomputers: * Atari ST/TT * Amiga 500-4000 * DOS * MS Windows 3.1 * OS/2 2.0 * Unix workstations: * PC, Linux * PC, USL SVR4 * Sun4, SunOS 4 or 5 * HP9000/800, HP-UX * SGI Mips, Irix 4 or 5 * DEC Alpha AXP, OSF 1.3 * DECstation 5000, Ultrix 4.2 * IBM RS/6000, AIX 3.2 * M88000 * Sun386, SunOS 4 * Sun3, SunOS 4 (?) * HP9000/300, HP-UX or NetBSD * Apple MacII, A/UX (?) * Amiga 3000, Amiga Unix 2.1 * NeXT, NeXTstep 3.1 * PC, 386BSD or NetBSD * PC, Coherent 4.0 * Atari ST/TT, MiNT 2.9 (7 January 1994) ==================== Important note -------------- * Changed bytecode format. All .fas files generated by previous CLISP versions are invalid and must be recompiled. User visible changes -------------------- * X3J13 votes <186> and <31> are implemented: the Common Lisp Condition System. New macros DEFINE-CONDITION, IGNORE-ERRORS, HANDLER-CASE, HANDLER-BIND, RESTART-CASE, WITH-RESTARTS, WITH-SIMPLE-RESTART, RESTART-BIND, WITH-CONDITION-RESTARTS, new types RESTART, CONDITION, SERIOUS-CONDITION, ERROR, PROGRAM-ERROR, CONTROL-ERROR, ARITHMETIC-ERROR, DIVISION-BY-ZERO, FLOATING-POINT-OVERFLOW, FLOATING-POINT-UNDERFLOW, CELL-ERROR, UNBOUND-VARIABLE, UNDEFINED-FUNCTION, TYPE-ERROR, PACKAGE-ERROR, STREAM-ERROR, END-OF-FILE, FILE-ERROR, STORAGE-CONDITION, WARNING, SIMPLE-CONDITION, SIMPLE-ERROR, SIMPLE-TYPE-ERROR, SIMPLE-WARNING, new functions MAKE-CONDITION, SIGNAL, COMPUTE-RESTARTS, FIND-RESTART, INVOKE-RESTART, INVOKE-RESTART-INTERACTIVELY, ABORT, CONTINUE, MUFFLE-WARNING, STORE-VALUE, USE-VALUE, INVOKE-DEBUGGER, RESTART-NAME, ARITHMETIC-ERROR-OPERATION, ARITHMETIC-ERROR-OPERANDS, CELL-ERROR-NAME, TYPE-ERROR-DATUM, TYPE-ERROR-EXPECTED-TYPE, PACKAGE-ERROR-PACKAGE, STREAM-ERROR-STREAM, FILE-ERROR-PATHNAME, SIMPLE-CONDITION-FORMAT-STRING, SIMPLE-CONDITION-FORMAT-ARGUMENTS, new variables *BREAK-ON-SIGNALS*, *DEBUGGER-HOOK*. See for details. Thanks to David Gadbois who wrote most of this. * X3J13 vote <40> is partially implemented: New variable *PRINT-READABLY*. * X3J13 vote <34> is implemented: Arrays and packages may now appear as constants in compiled code. * X3J13 vote <90> is implemented: FUNCTIONP on symbols and conses now always returns NIL. The type FUNCTION is disjoint from SYMBOL and CONS. (COERCE object 'FUNCTION) is implemented. Warning: Old style calls like (FUNCTIONP object) may need to be converted to (OR (FUNCTIONP object) (SYMBOLP object) (AND (CONSP object) (EQ (CAR object) 'LAMBDA)) ) This fixes a CLOS bug: (TYPEP object 'FUNCTION) was not equivalent to (TYPEP object (FIND-CLASS 'FUNCTION)). * Two new debugger commands Break+ and Break- permit to set resp. remove breakpoints at specified EVAL or APPLY frames. * Warnings and errors produced by COMPILE-FILE are now accompanied by source line number information. * The sub-char passed as second argument to read dispatch macros is now exactly the first non-digit read from the stream. Previously it was its upper-case equivalent. * DEFPACKAGE now accepts an option (:DOCUMENTATION docstring). * DIRECTORY now accepts a keyword argument :CIRCLE. If it is non-NIL, the directory search for ".../" and "**/" wildcards on Unix avoids endless loops that may result from symbolic links. * The variable *LOAD-PATHS* in the Unix versions of config.lsp now uses "~/" (the home directory at run time) instead of #"~/" (the home directory at installation time). Thanks to Gabor Herr. * Unix and OS/2 versions: New dangerous functions MAKE-PIPE-IO-STREAM, RUN-SHELL-COMMAND and RUN-PROGRAM. * Unix version only: The command shell used by MAKE-PIPE-...-STREAM is now always /bin/sh; the environment variable SHELL is only used as interactive shell. Fixed a race condition in the functions EXECUTE, MAKE-PIPE-INPUT-STREAM, MAKE-PIPE-OUTPUT-STREAM that caused the child process to fail mysteriously. * Attacks such as (DO-ALL-SYMBOLS (S) (UNLESS (CONSTANTP S) (SET S NIL))) no longer crash CLISP. * Fixed a CLOS bug: DEFCLASS failed to signal an error if several direct slots had identical names. * Fixed a bug in the reader: When reading hash tables which contain #n# references, the hash codes must be recomputed after resolving the references. Thanks to Marcus Daniels. * Fixed a bug in the printer: Printed representations with two different #1= definitions could result when PRINT-OBJECT methods were called while *PRINT-CIRCLE* was true. Thanks to Marcus Daniels. Portability ----------- * Fixed five bugs in the number crunching routines that appeared on 64-bit processors or in combination with the WIDE tagging scheme. * More support for 64-bit processors like DEC Alpha. * Added support for NeXT running NeXTstep 3.1. Thanks to Marcus Daniels. * Added support for Amiga 3000 running AMIX Unix. Thanks to Michel Loi. * Fixed a problem with Ctrl-C on HP-UX. Thanks to Gabor Herr. * Added support for HP9000/300 running HP-UX. Thanks to Gabor Herr. * Added support for WATCOM C 9.5 on DOS. * Amiga version: Tolerate memory outside the 27-bit addressable range. * Remove support for the Atari ST assembly language version CLISP1. Other modifications ------------------- * Added some documentation of the GNU readline library. * Changed the default memory size back from 2.5 megabytes to 2 megabytes. * Miscellaneous documentation updates. 2.8 (8 November 1993) ===================== User visible changes -------------------- * The STDWIN library can now be made part of CLISP by calling makemake with argument --with-stdwin. * X3J13 vote <108> is implemented: New packages COMMON-LISP and COMMON-LISP-USER. * X3J13 vote <112> is implemented: LOAD binds the variables *LOAD-PATHNAME* and *LOAD-TRUENAME*, COMPILE-FILE binds the variables *COMPILE-FILE-PATHNAME* and *COMPILE-FILE-TRUENAME*. New variables *LOAD-PATHNAME*, *LOAD-TRUENAME*, *COMPILE-FILE-PATHNAME*, *COMPILE-FILE-TRUENAME*. * X3J13 vote <26> is implemented: COMPILE-FILE has a keyword argument :PRINT. New variables *COMPILE-WARNINGS*, *COMPILE-VERBOSE*, *COMPILE-PRINT*. * Fixed two bugs in DEFPACKAGE: *PACKAGE* is not modified by DEFPACKAGE any more, and the :INTERN option now works. * Fixed FUNCTION-LAMBDA-EXPRESSION such that it works on built-in functions. Thanks to France Dacar. * Fixed a serious bug in GCD on 16-bit processors: (GCD x y) with 2^k - 2^(k-16) <= |x|,|y| < 2^k could cause a division by zero. Portability ----------- * Added support for DEC Alpha AXP running OSF/1 Unix. * Added support for Apple Mac II running A/UX. * Added support for Atari ST/TT running MiNT. Thanks to Scott Kolodzieski. * Support for SunOS4 cc now works. * The makefile now also works with "parallel" make utilities (e.g. GNU make with option -j). Thanks to Rick Sladkey. * Easier porting: The most dangerous optimizations (inline asm() statements, global register allocations, ...) are inhibited if CLISP is compiled with option SAFETY=3. * Some modifications for the sake of gcc-2.5. Other modifications ------------------- * Speed up generic function dispatch. * Some kinds of objects take less space (all CPUs except 680x0). * The list of X3J13 votes and their current status in CLISP has been moved from file `src/defs2.lsp' to file `src/cltl2.txt'. * The code for setting up a connection to an X server (file `src/socket.d') has been completely rewritten. * Miscellaneous documentation updates. 2.7 (27 September 1993) ======================= User visible changes -------------------- * COMPILE-FILE now handles top-level forms as described in CLtL2 p. 90: The macroexpansion of a top-level form is considered a top-level form. When a top-level form is a PROGN, LOCALLY, COMPILER-LET, SYMBOL-MACROLET or MACROLET form, the subforms of its body are considered top-level forms too and are compiled separately. This allows things like (PROGN (DEFCONSTANT X 3141) (DEFUN GET-X () X)) or (PROGN (DEFCLASS SHIP () ()) (DEFUN SHIP-P (X) (TYPEP X 'SHIP))) to work. Warning: If you want to inhibit this splitting into separate forms (for example, because several of the forms refer to the same uninterned symbol), you have to use (LET () (PROGN ...)) instead of (PROGN ...). * X3J13 vote <144> is implemented: New macro DECLAIM. * X3J13 vote <113> is implemented: The macro LOCALLY is now a special form. * Fixed a serious bug in the compiler: When compiling functions inline whose parameters are special variables, incorrect code could be generated. * Fixed a bug in the compiler which caused the compiler to crash in some rare cases, notably when compiling Garnet-2.2. * Fixed a bug that prevented the debugger commands DOWN and BOTTOM from working on Linux and SunOS. * Fixed a CLOS bug: Specifying &KEY without &REST in generic function lambda lists did not have the desired effect. * DEFCLASS supports both :DEFAULT-INITARGS syntaxes. * DEFGENERIC is more tolerant about invalid declarations. Portability ----------- * Added Dynix/ptx Sequent support. Thanks to Esther Davis. * Added support for RS/6000 CPU and AIX. Thanks to Gabor Herr. Other modifications ------------------- * Made the memory allocation and (ROOM), (TIME ...) more virtual memory efficient (less paging on Unix and DOS). Thanks to Don Cohen. * Added Geoffrey Gordon's "LISP tutorial". * Renamed stdwin.lsp to stdwin2.lsp. * Miscellaneous documentation updates. 2.6.1 (1 September 1993) ======================== Important note -------------- * Changed bytecode format. All .fas files generated by previous CLISP versions are invalid and must be recompiled. User visible changes -------------------- * Unix version only: The command line option -M now also accepts memory images that were compressed using GNU gzip. * Fixed a CLOS bug: MAKE-INSTANCE now behaves as if it were calling INITIALIZE-INSTANCE, and INITIALIZE-INSTANCE and REINITIALIZE-INSTANCE behave as if they were calling SHARED-INITIALIZE. * Fixed a CLOS bug: NO-APPLICABLE-METHOD failed to be called in some cases when no method was applicable. * Relating to X3J13 vote <89>: The first argument to the functions FUNCALL and APPLY, denoting a function, may now also be a list (SETF symbol). * Fixed a bogus error message that occurred when storing an out-of-range integer into an array of element-type (UNSIGNED-BYTE 32). Portability ----------- * Added NetBSD support. Thanks to Charles Hannum. Other modifications ------------------- * Added Jeff Dalton's "brief CLOS guide". * Miscellaneous documentation updates. 2.6 (22 August 1993) ==================== Important note -------------- * Changed bytecode format. All .fas files generated by previous CLISP versions are invalid and must be recompiled. User visible changes -------------------- * X3J13 vote <12> is partially implemented: Native CLOS. New package CLOS containing the macros DEFCLASS, DEFMETHOD, DEFGENERIC, GENERIC-FUNCTION, GENERIC-FLET, GENERIC-LABELS, WITH-SLOTS, WITH-ACCESSORS, the functions FIND-CLASS, (SETF FIND-CLASS), CLASS-OF, CLASS-NAME, (SETF CLASS-NAME), SLOT-VALUE, SLOT-BOUNDP, SLOT-MAKUNBOUND, SLOT-EXISTS-P, CALL-NEXT-METHOD, NEXT-METHOD-P, NO-APPLICABLE-METHOD, NO-PRIMARY-METHOD, NO-NEXT-METHOD, FIND-METHOD, ADD-METHOD, REMOVE-METHOD, COMPUTE-APPLICABLE-METHODS, METHOD-QUALIFIERS, FUNCTION-KEYWORDS, SLOT-MISSING, SLOT-UNBOUND, PRINT-OBJECT, DESCRIBE-OBJECT, MAKE-INSTANCE, INITIALIZE-INSTANCE, REINITIALIZE-INSTANCE, SHARED-INITIALIZE, the classes STANDARD-CLASS, STRUCTURE-CLASS, BUILT-IN-CLASS, STANDARD-OBJECT, STANDARD-GENERIC-FUNCTION, STANDARD-METHOD and all predefined classes, and the method combination STANDARD. See for details. X3J13 vote <13> is implemented, too. * X3J13 vote <63> is implemented: DESCRIBE receives the output stream as optional argument. New function CLOS:DESCRIBE-OBJECT. * X3J13 vote <149> is implemented: The second argument to SUBSEQ may now be NIL. Thanks to Thomas Kirk. * X3J13 vote <175> is implemented: TAILP now also works on dotted lists. * X3J13 vote <124> is implemented: (DECLARE (OPTIMIZE (DEBUG ...))) is legal. * The type specifier (EQL object), a synonym for (MEMBER object), is now implemented. * New DEFSTRUCT option :INHERIT which is exactly like :INCLUDE except that it does not create new accessors for the inherited slots. Use this option to avoid the problems that occur when using the same :CONC-NAME for the new and the inherited structure. * Fixed EXPORT and USE-PACKAGE: Do not signal a name conflict between the symbol being exported and a symbol accessible in the using package if the latter symbol is on the list of shadowing symbols of the using package. * Fixed VECTOR-PUSH-EXTEND. It now works on vectors of dimension 0 and on bit-vectors. * Fixed PRINT-UNREADABLE-OBJECT: Do not output adjacent spaces. * Fixed a bug in the reader that caused an endless loop or endless recursion when resolving #n=/#n# references in objects that already contained cyclic data structures, e.g. when reading (#1=a #.'#2=(b . #2#) #1#). * Fixed a bogus error message in the complex number reader. Portability ----------- * The DOS README explains how to run CLISP in the DOS box of Microsoft Windows. Thanks to Ralf Muschall. * Added Sinix support. Thanks to Manfred Weichel. * Improved installation on OS/2. Other modifications ------------------- * A function proclaimed INLINE will be taken inline in a wider set of circumstances. (Previously INLINE worked only when that function was being used in the same file or in a file that REQUIREd the file defining the function.) * The compiler now produces better code for (APPLY (FUNCTION fun) args). * Changed the default memory size from 2 megabytes to 2.5 megabytes. * Miscellaneous documentation updates. 2.5.1 (17 July 1993) ==================== User visible changes -------------------- * X3J13 vote <150> is mostly implemented: Reading and printing of symbols (and characters with bits or fonts attributes) is now affected by (READTABLE-CASE *READTABLE*), whose value may be one of :UPCASE, :DOWNCASE and :PRESERVE. New place READTABLE-CASE. * Support for immutable objects is implemented. Attempts to modify read-only data will signal an error. Program text and quoted constants loaded from files are considered read-only data. Never again will you be allowed to write programs that destructively modify themselves! This works only for Unix implementations with powerful virtual memory management, currently only Linux and SunOS. To enable it, you have to add -DIMMUTABLE to the CFLAGS in the makefile when building CLISP. * Fixed DEFUN such that (progn (flet ((bar (x) (+ x 10))) (defun bar (y) (if (zerop y) 1 (bar (1- y)))) (bar 1) ) returns 10 instead of 1. * Fixed a bug in the compiler that caused the compiler to crash by endless recursion and stack overflow when compiling assignments to symbol macros. Portability ----------- * Added support for m88000 CPU. * Amiga version: detect 68000 CPU, for better use of present memory. Other modifications ------------------- * Miscellaneous documentation updates. 2.5 (29 June 1993) ================== User visible changes -------------------- * X3J13 vote <89> is implemented: (SETF symbol) is now a valid syntax for a function name in (funname ...), (FUNCTION funname), (DEFUN funname ...), (COMPILE funname ...), (DISASSEMBLE funname), (ED funname), FLET, LABELS etc. New function FDEFINITION. * X3J13 vote <173> is implemented: New special form SYMBOL-MACROLET. The macroexpansion environment passed to macro expanders and to MACROEXPAND-1, MACROEXPAND, GET-SETF-METHOD, GET-SETF-METHOD-MULTIPLE-VALUE now comprises both the variable environment and the function environment. New macro DEFINE-SYMBOL-MACRO. * New macro PRINT-UNREADABLE-OBJECT. * Fixed a bug: The string comparison functions STRING<, STRING>, STRING<=, STRING>=, STRING/=, STRING-LESSP, STRING-GREATERP, STRING-NOT-GREATERP, STRING-NOT-LESSP, STRING-NOT-EQUAL now return the index of the first mismatch instead of T. * Fixed a bug: The functions REMOVE-DUPLICATES and DELETE-DUPLICATES produced an out-of-bounds error when called on a small sequence, with :FROM-END T argument and without :END argument. Portability ----------- * Updated support for DJGPP. Other modifications ------------------- * The macros SETF, PUSH, POP, PUSHNEW have been completely rewritten. * Changed internal representation of special form handlers: They now consume regular memory. This frees one type tag, which will be used by CLOS instances. * Miscellaneous documentation updates. 2.4 (24 May 1993) ================= User visible changes -------------------- * New macro DEFPACKAGE. * New function FUNCTION-LAMBDA-EXPRESSION. * New package SCREEN containing some functions for random screen access (Unix, DOS, OS/2, Atari, VMS versions only). * X3J13 vote <5> is implemented: The value of *APPLYHOOK* must now be a function of two arguments. * X3J13 vote <104> is implemented: COMPILE-FILE now binds *READTABLE*. * X3J13 vote <161> is implemented: SHADOW now accepts strings as well as symbols. * Fixed a bug in the compiler which caused the compiler to crash when compiling (CASE key ...) forms with constant key. * Fixed a bug in the compiler which produced unloadable .fas files when compiling forms like (SETF ... (FUNCTION LIST)). * Fixed a bogus error message in the AREF function. * The built-in editor on Unix now handles the Delete key the same way as the Backspace key or Ctrl-H. * Fixed a bug in + that occasionally caused (- x x) to return a long-float zero which was not EQL to the other zeroes of type LONG-FLOAT. * Fixed a bug: Correctly do round-to-even when adding two long-floats. * Fixed a bug: The destructive sequence functions DELETE etc. failed to produce an error when called on a sequence of type LIST and with an :END argument larger than the list's length. * Corrected the branch cuts of the complex ATAN and ATANH functions. Portability ----------- * 68000 and other versions: Fixed a bug in the low-level division algorithm. * Mips and Vax versions: Finished the low-level number crunching routines. * Added Ultrix support. * Added Coherent support. * Finished Sun3 support. Other modifications ------------------- * The file `src/defs2.lsp' contains a list of X3J13 votes and their current status in CLISP. * The file `src/foreign.txt' documents how to do function calls to foreign language routines from within CLISP. * Miscellaneous documentation updates. 2.3.1 (5 April 1993) ==================== Portability ----------- * 68000/68020 versions: Fixed some bugs in the low-level number crunching routines. * Improved efficiency of the WIDE tagging scheme. 2.3 (30 March 1993) =================== User visible changes -------------------- * Fixed a bug in + that caused the sign of (+ x y) to be wrong when x and y were double-floats satisfying 0 < x < -y or 0 > x > -y . * New special form LOAD-TIME-VALUE. * The function DIR now sorts its output. * A new place (DEFAULT-DIRECTORY) manages the "current directory". * When LOAD is called with a pathname as argument that contains a parent directory component (".."): Ignore the variable *LOAD-PATHS*, avoid an error. * Fixed TRACE so that functions calling TRACE are correctly handled by COMPILE-FILE. Portability ----------- * Unix version: Correct handling of system calls that are interrupted by signals. * Finished IRIX support. Other modifications ------------------- * Miscellaneous documentation updates. 2.2.2 (19 March 1993) ===================== User visible changes -------------------- * Replaced variable *TEMPFILE* by a function EDITOR-TEMPFILE. Portability ----------- * Unix version: Corrected detection of ANSI C header files. * Unix version: Check whether signal handlers are automatically reinstalled when activated. * Made readline library ANSI C compliant and (on Unix) auto-configuring. * In case there is no room for three extra bits in a symbol pointer, allocate three stack words per binding in a VAR frame (instead of two stack words). This completes the Amiga 3000/4000 version. * Completed memory model SPVW_PURE_BLOCKS: There is a large contiguous memory area for each kind of Lisp object. This model is used only if memory can be allocated at prescribed addresses, for example on Unix with mmap(). * More 386BSD support. Other modifications ------------------- * Remove limit on the number of files that may be specified on the command line. Limit was 1000. * Miscellaneous documentation updates. 2.2.1 (4 March 1993) ==================== User visible changes -------------------- * Fixed a bug in ADJOIN that caused ADJOJN and PUSHNEW to push (key item) instead of item onto the list when a :KEY argument was present. * Amiga version: allow opening of "files" on special devices. * OS/2 version: Long filenames on DOS (FAT) filesystems no longer produce errors. They are now silently truncated to 8+3 characters. * Unix, Amiga, OS/2 versions: When a pathname is to be fully specified, no subdirectory wildcard "**/" or ".../" is allowed. Check this. Portability ----------- * Corrected underflow detection in SCALE-FLOAT on 16-bit processors. * Atari ST version: fixed getenv(), wrote INSTALL instructions. Other modifications ------------------- * Miscellaneous documentation updates. 2.2 (21 February 1993) ====================== User visible changes -------------------- * Include test suite into distribution. * Add COMMON-LISP and CLTL1 to the *FEATURES*. * Fixed a bug in the compiler which caused the compiler to crash in some rare cases. * Fixed a bug in WITH-OPEN-FILE: handle the case when OPEN returns NIL. * Amiga version: Fixed bug in FILE-POSITION. * Amiga version: Renamed REXX-WAIT-COMMAND to REXX-WAIT-SENT-COMMAND. Portability ----------- * On HP-UX: Use /bin/ksh for shell scripts instead of the buggy /bin/sh. * Now compiles on IRIX using CC="cc -ansi". * Added 386BSD support. Other modifications ------------------- * Miscellaneous documentation updates. 2.1.3 (3 February 1993) ======================= Portability ----------- * Support for 386 UHC UNIX System V release 4 now works. Other modifications ------------------- * lispbibl.d: Rename macro `untype' to `upointer', `type_untype_object' to `type_pointer_object'. * lispbibl.d: Clean up selection of type code and frame code tables. * Remove init streams. Use string input streams instead. 2.1.2 (1 February 1993) ======================= User visible changes -------------------- * Fixed handling of declarations in macros DO-SYMBOLS, DO-EXTERNAL-SYMBOLS, DO-ALL-SYMBOLS, DOSEQ, DOHASH. * LISTEN on file streams opened with :DIRECTION :OUTPUT now returns NIL. * Pathnames resulting from OPEN on special files are now called "file handle streams", they are unbuffered file streams. They can now be used as argument in situations where a pathname is expected. Portability ----------- * The `target' and `configure' scripts no longer depend on awk. * Support Sun4 with 32 bit address range (kernel architecture "Sun4m") as well as Sun4 with 29 bit address range (kernel architecture "Sun4", "Sun4c). * Can now exploit the shared memory facilities of SunOS 4.1 and of Linux. * Added support for 386 UHC UNIX System V release 4. Other modifications ------------------- * Implemented memory model SPVW_PURE_PAGES where memory is divided into many small pages each containing objects of the same type. * Fixed up source for systems without window streams. * lispbibl.d, constobj.d: reorder the stream types such that the test for file stream becomes faster. * /usr/local/lib/aclocal.m4, configure.in, unixconf.h.in: prefix my own local macros by CL_ instead of AC_. * Miscellaneous documentation updates. 2.1.1 (11 January 1993) ======================= User visible changes -------------------- * Fixed meaning of :KEY argument for SUBLIS and NSUBLIS. * DOS, OS/2 versions: adapted to emx 0.8f. This results in better *KEYBOARD-INPUT* on DOS and faster screen access on OS/2. * Amiga version: implemented SHELL. * OS/2 version: implemented MAKE-PIPE-INPUT-STREAM and MAKE-PIPE-OUTPUT-STREAM. * compiler.lsp: Emit a warning when #'foo is used but foo is undefined. * rexx.d, rexx.lsp: remove the trailing "p" from the keywords. * init.lsp: do not call a macro a "Common Lisp function". * stream.d, readline/readline.[ch]: exported rl_deprep_terminal such that a failing call to xmalloc() can now signal an ordinary error instead of exiting. Portability ----------- * Rewrote makemake.in using indentation. * /usr/local/lib/aclocal.lsp: fixed AC_SYS_ERRLIST (m4 bug?) and AC_RENAME, improved AC_SELECT and added AC_SETITIMER. * spvw.d: implement ualarm for Unix with interval timers, e.g. HP/UX or Linux. * Remove support for Linux 0.12. Other modifications ------------------- * Language (DEUTSCH resp. ENGLISH) can now be set from CFLAGS, without modifying lispbibl.d. * _README translated into german. * Renamed clispsrc.1 to FILES.1. * Renamed pseudofu.d to pseudofun.d. * Sun4 version: merged il_sparc.il into cc_sparc.il. * lispbibl.d: use an enum type to get the stream types converted to consecutive numbers without risking clashes. * intgcd.d: found algorithm for binary extended gcd. * intlog.d: make use of 80386 instruction "bsfl" where possible. * lispbibl.d: let gcc2 on 680x0 emit "dbra" instructions. * spvw.d: use IPC_PRIVATE as key for all shared memory segments. * avl.d: do not generate code for unused functions insert and delete. * Miscellaneous documentation updates. 2.1 (1 January 1993) ==================== Release of the first portable version of CLISP. It now compiles and runs under * Atari ST * Amiga 500-2000 * DOS * OS/2 2.0 * Linux * Sun4 * Sun386 * HP9000/800 Now that the tests passed, I hope I'll never again have to remove a serious bug. ;; Local Variables: ;; mode: text ;; mode: bug-reference ;; bug-reference-url-format: clisp-bug-reference-url-format ;; coding: utf-8 ;; end: