Subject: [clisp-announce] GNU CLISP 2.31 release

From: Sam Steingold <[email-masked]>
Date: Wed Sep 3 08:48:17 2003

GNU CLISP 2.31 (2003-09-01) is now available from the usual distribution sites.
GNU CLISP is an ANSI Common Lisp implementation.
More information at
  http://clisp.cons.org/,
  http://www.clisp.org/,
  http://www.gnu.org/software/clisp/ and
  http://clisp.sourceforge.net/.
Sources and selected binaries are available by anonymous ftp from
  ftp://ftp2.cons.org/pub/lisp/clisp/,
  ftp://ftp.gnu.org/pub/gnu/clisp/
and their mirrors.

SUMMARY

Common Lisp is a high-level, general-purpose programming language.

GNU CLISP is a Common Lisp implementation by Bruno Haible of Karlsruhe
University and Michael Stoll of Munich University, both in Germany.

It mostly supports the Lisp described in the ANSI Common Lisp standard.

It runs on microcomputers (OS/2, Windows NT/2000/XP, Windows 95/98/ME,
Amiga 500-4000, Acorn RISC PC) as well as on Unix workstations (Linux,
SVR4, Sun4, DEC Alpha OSF, HP-UX, BeOS, NeXTstep, SGI, AIX, Sun3 and
others) and needs only 2 MB of RAM.

It is Free Software and may be distributed under the terms of GNU GPL,
while it is possible to distribute commercial applications compiled
with GNU CLISP.

The user interface comes in German, English, French, Spanish, Dutch
and Russian.

GNU CLISP includes an interpreter, a compiler, a debugger, a large
subset of CLOS, a foreign language interface and a socket interface.

An X11 interface is available through CLX, Garnet, CLUE/CLIO.

GNU CLISP runs Maxima, ACL2 and many other Common Lisp packages.

NEWS

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 <http://clisp.cons.org/impnotes.html#loadfile> 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 <[email-masked]>.

* External modules now work on win32 (when used with cygwin or mingw).
  See <http://clisp.cons.org/impnotes.html#mod-win32> for details.

* DIRKEY is now a standard module: use `--with-module=dirkey'
  instead of `--with-dir-key' when configuring.
  See <http://clisp.cons.org/impnotes.html#dirkey> for details.

* SYSCALLS is now a standard module: use `--with-module=syscalls
  instead of `--with-export-syscalls' when configuring.
  See <http://clisp.cons.org/impnotes.html#syscalls> for details.

* New module netica interfaces to <http://norsys.com/netica_c_api.htm>
  and allows working with Bayesian belief networks and influence diagrams.

* 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 <http://clisp.cons.org/impnotes.html#loadfile> for details.

* EXT:SPECIAL-VARIABLE-P now accepts a second optional ENVIRONMENT argument.
  See <http://clisp.cons.org/impnotes.html#spe-var-p> for details.

* You can now set socket options using new function SOCKET:SOCKET-OPTIONS.
  See <http://clisp.cons.org/impnotes.html#so-opt> for details.
  Suggested by Dave Richards <[email-masked]>.

* 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 <http://clisp.cons.org/impnotes.html#so-status> for details.

* CLISP character set now uses Unicode 3.2.
  See <http://clisp.cons.org/impnotes.html#characters> 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 <http://clisp.cons.org/impnotes.html#dir> 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 <http://clisp.cons.org/impnotes.html#del-file> 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 <http://clisp.cons.org/impnotes.html#dribble> for details.

* Weak hash tables can now remove key/value pairs when either or both
  are garbage collected.
  See <http://clisp.cons.org/impnotes.html#make-hash> for details.

* You can use (SETF WEAK-POINTER-VALUE) to change the object to which
  the given weak pointer point to.
  See <http://clisp.cons.org/impnotes.html#weak> for details.

* New macro EXT:DEFINE-HASH-TABLE-TEST allows user-defined hash table tests.
  See <http://clisp.cons.org/impnotes.html#defhash> 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 <CONDITION-RESTARTS:PERMIT-ASSOCIATION>,
    <DEBUGGER-HOOK-VS-BREAK:CLARIFY>, <DOCUMENTATION-FUNCTION-BUGS:FIX>,
    <EXTERNAL-FORMAT-FOR-EVERY-FILE-CONNECTION:MINIMUM>,
    <IMPORT-SETF-SYMBOL-PACKAGE>, <SETF-FIND-CLASS:ALLOW-NIL>,
    <SUBTYPEP-ENVIRONMENT:ADD-ARG>, <THE-VALUES:RETURN-NUMBER-RECEIVED>,
    <ADJUST-ARRAY-NOT-ADJUSTABLE:IMPLICIT-COPY>;
  + 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 <[email-masked]> and his ANSI compliance
  suite, which helped detect some of these deficiencies.

* FUNCTION-LAMBDA-EXPRESSION now always returns the correct function name.
  See <http://clisp.cons.org/impnotes.html#fle> for details.

* CONSTANTP now detects many more constant forms.
  See <http://clisp.cons.org/impnotes.html#constantp> for details.

* The code walker has now a public interface: EXT:EXPAND-FORM.
  See <http://clisp.cons.org/impnotes.html#code-walk> for details.

* Renamed macro SPACE to EXT:TIMES because SPACE is an ANSI Common Lisp
  symbol without a macro definition.
  See <http://clisp.cons.org/impnotes.html#time> for details.

* New function EXT:XOR checks that exactly one of its arguments is non-NIL.
  See <http://clisp.cons.org/impnotes.html#xor> for details.

* New function EXT:MAKE-STREAM creates a stream out of a file descriptor
  and facilitates CGI scripting.
  See <http://clisp.cons.org/impnotes.html#make-stream> and
  <http://clisp.cons.org/impnotes.html#bin-stdio> for details.

* New function EXT:MODULE-INFO provides information about the CLISP
  modules that comprise the running image.
  See <http://clisp.cons.org/impnotes.html#modinfo> for details.

* New generic function CLOS:CLASS-PROTOTYPE from MOP.
  See <http://clisp.cons.org/impnotes.html#class-proto> for details.

* New generic functions CLOS:CLASS-FINALIZED-P and
  CLOS:FINALIZE-INHERITANCE from MOP.
  See <http://clisp.cons.org/impnotes.html#def-class> 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 <http://clisp.cons.org/impnotes.html#foreign-heap> for details;
  + functions FFI:FOREIGN-ADDRESS-UNSIGNED and FFI:UNSIGNED-FOREIGN-ADDRESS,
    see <http://clisp.cons.org/impnotes.html#faddr-u> for details;
  + function FFI:FOREIGN-ADDRESS,
    see <http://clisp.cons.org/impnotes.html#faddr> for details;
  + functions FFI:FOREIGN-POINTER and (SETF FFI:FOREIGN-POINTER),
    see <http://clisp.cons.org/impnotes.html#fptr> for details;
  + macros FFI:C-VAR-ADDRESS, FFI:C-VAR-OBJECT and FFI:OFFSET,
    see <http://clisp.cons.org/impnotes.html#offset> and
    <http://clisp.cons.org/impnotes.html#c-var-addr>;
  + function (SETF FFI:VALIDP) invalidates foreign objects
    see <http://clisp.cons.org/impnotes.html#validp> for details;
  + macros FFI:WITH-FOREIGN-STRING, and macro FFI:WITH-C-PLACE,
    see <http://clisp.cons.org/impnotes.html#foreign-stack-string> and
    <http://clisp.cons.org/impnotes.html#with-c-place>.
  Thanks to Jorg Hohle <[email-masked]>.
  + 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 <http://clisp.cons.org/impnotes.html#def-call-out> and
    <http://clisp.cons.org/impnotes.html#def-c-var>.
  + 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 <http://clisp.cons.org/impnotes.html#c-pointer>.
  + You can now map between numeric and symbolic C enum values using
    functions FFI:ENUM-FROM-VALUE and FFI:ENUM-TO-VALUE.
    See <http://clisp.cons.org/impnotes.html#def-c-enum>.

* 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 <http://clisp.cons.org/impnotes.html#ffi-extern-output> 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 <http://clisp.cons.org/impnotes.html#regexp> 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 <[email-masked]>.

* New function EXT:MAKE-XTERM-IO-STREAM creates an input-output stream
  that uses a separate X terminal.  UNIX platforms only.
  See <http://clisp.cons.org/impnotes.html#separate-io> 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 <http://clocc.sourceforge.net/clocc/src/gui/clue/> and
  <http://clisp.cons.org/impnotes.html#included-modules>.

* CLISP/NEW-CLX on win32 with Cygwin X server compiles garnet.
  See <http://article.gmane.org/gmane.lisp.clisp.devel/10093>.

* Command line interface: allow multiple -x options.
  New options -repl <http://clisp.cons.org/clisp.html#opt-repl>
  and -v (--verbose) <http://clisp.cons.org/clisp.html#opt-verbose>.

-- 
Sam Steingold (http://www.podval.org/~sds) running w2k
<http://www.camera.org> <http://www.iris.org.il> <http://www.memri.org/>
<http://www.mideasttruth.com/> <http://www.honestreporting.com>
Lisp suffers from being twenty or thirty years ahead of time.