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. [ 1966375 ] + Avoid a rare segfault on SIGHUP. [ 1956715 ] + Improve module portability to systems with non-GNU make. [ 1970141 ] + Fix GRAY:STREAM-READ-SEQUENCE and GRAY:STREAM-WRITE-SEQUENCE. [ 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. [ 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. [ 1890854 ] + Fix rectangle count in NEW-CLX XLIB:SET-GCONTEXT-CLIP-MASK. [ 1918017 ] + Fix argument handling in NEW-CLX XLIB:QUERY-COLORS. [ 1931101 ] + Fix compilation on systems not supporting returning void. [ 1924506 ] + Fix TANH floating point overflow for large floats. [ 1683394 ] + Avoid extra aggressive bignum overflow reporting in READ. [ 1928735 ] + Improved floating point number formatting. [ 1790496, 1928759 ] + COMPILE no longer discards MACRO doc strings. [ 1936255 ] + Improved accuracy of LOG on complex numbers. [ 1934968 ] + Fix COERCE for compound float result-types. [ 1942246 ] + Fix $http_proxy parsing. [ 1959436 ] + Fix LISTEN on buffered streams when the last character was CRLF. [ 1961475 ] + Cross-compilation process has been restored to its former glory, thanks to the valiant and persistent testing by Vladimir Volovich . [ 1928920, 1929496, 1929516, 1931097 ] 2.44.1 (2008-02-23) =================== User visible changes -------------------- * Bug fixes: + Add a workaround against a gcc 4.2.x bug. [ 1836142 ] + Fix error in compilation of floatparam.c during configuration with gcc 4.3 snapshots. [ 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. [ 1834193 ] + PPRINT-LOGICAL-BLOCK no longer ignores *PRINT-PPRINT-DISPATCH-TABLE*. [ 1835520 ] + BYTE is now a full-fledged type. [ 1854698 ] + Fix linux:dirent definition in the bindings/glibc module. [ 1779490 ] + Symbolic links into non-existent directories can now be deleted. [ 1860489 ] + DIRECTORY :FULL on directories now returns the same information as on files. [ 1860677 ] + CLISP no longer hangs at the end of a script coming via a pipe ("clisp < script.lisp" or "cat script | clisp"). [ 1865567 ] + When *CURRENT-LANGUAGE* is incompatible with *TERMINAL-ENCODING*, CLISP no longer goes into an infinite recursion trying to print various help messages. [ 1865636 ] + Fix the "Quit" debugger command. [ 1448744 ] + Repeated terminating signals kill CLISP instantly with the correct exit code. [ 1871205 ] + Stack inspection is now safer. [ 1506316 ] + Errors in the RC-file and init files are now handled properly. [ 1714737 ] + Avoid the growth of the restart set with each image save. [ 1877497 ] + Handle foreign functions coming from the old image which cannot be validated. [ 1407486 ] + Fix signal code in bindings/glibc/linux.lisp. [ 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. [ 1827572 ] + Fixed *PRINT-PPRINT-DISPATCH* binding in WITH-STANDARD-IO-SYNTAX. [ 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. [ 1731462 ] + Fixed rounding of long floats [even+1/2]. [ 1589311 ] + Fixed stdio when running without a TTY, e.g., under SSH. [ 1592343 ] + ANSI compliance: PPRINT dispatch is now respected for nested objects, not just the top-level. [ 1483768, 1598053 ] + Fixed print-read-consistency of strings containing #\Return characters (manifested by COMPILE-FILE). [ 1578179 ] + Fixed "clisp-link run". [ 1469663 ] + Fixed ATANH branch cut continuity. [ 1436987 ] + Reset the function lambda expression when loading a compiled file. [ 1603260 ] + DOCUMENTATION set by SETF is now preserved by COMPILE. [ 1604579 ] + LISTEN now calls STREAM-LISTEN as per the Gray proposal. [ 1607666 ] + IMPORT into the KEYWORD package does not make a symbol a constant variable. [ 1612859 ] + DEFPACKAGE code was executed during non top-level compilation. [ 1612313 ] + Fixed format error message formatting. [ 1482465 ] + Fixed *PPRINT-FIRST-NEWLINE* handling. [ 1412454 ] + Improved hash code generation for very large bignums and for long lists. [ 948868, 1208124 ] + Some bugs related to UNICODE-16 & UNICODE-32. [ 1564818, 1631760, 1632718 ] + All exported defined symbols are now properly locked. [ 1713130 ] + Berkeley-DB module no longer fills up error log file. [ 1779416 ] + New-clx now supports 64-bit KeySym. [ 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. [ 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. [ 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. [ 1494059 ] + Fix the evaluation order of initialization and :INITIALLY forms in then extended LOOP. [ 1516684 ] + Do not allow non-symbols as names of anonymous classes. [ 1528201 ] + REINITIALIZE-INSTANCE now calls FINALIZE-INHERITANCE. [ 1526448 ] + Fix the RAWSOCK module on big-endian platforms. [ 1529244 ] + PRINT-OBJECT now works on built-in objects. [ 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. [ 1538333 ] + MAKE-PATHNAME no longer ignores explicit :DIRECTORY NIL (thanks to Stephen Compall ). [ 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). [ 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. [ 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. 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. 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. 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 ------------------- 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. 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. 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 . 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. 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%. 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. 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. 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. 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 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. 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-N