| Allegro CL version 8.0 Unrevised from 7.0 to 8.0. | ||||||||
This document contains the following sections:
1.0 IntroductionThis document provides the release notes for release 7.0 of Allegro Common Lisp and related products. Many sections are divided into non-backward-compatible changes (that produce different behavior in release 7.0 compared to release 6.2) and changes unrelated to backward-compatibility. Note that a bug fix is not considered a backward-incompatible change even if it does result in changed behavior because the previous behavior was erroneous.
You may wish to look at the 6.2 Release Notes, available on the web at http://www.franz.com/support/documentation/6.2/doc/release-notes.htm.
This document describes the changes, major and minor, from 6.2 to 7.0. Please look particularly at these sections:
If you notice changed or unexpected behavior with an operator, variable, class, or facility, search for its name in this document to see whether there is an entry concerning it.
A documentation update was released around July 29, 2005. See http://www.franz.com/support/documentation/.
A 7.0 Trial edition was released around August 8, 2005. This version is similar to the 6.2 Trial (in that it is a limited version of a full-featured Allegro CL). 7.0 Trial requires monthly rather than bi-monthly license renewal.
These changes has been made with updates or patches released around the date indicated in the item. Patches can be downloaded with sys:update-allegro.
:txt as a value for the
type keyword argument. When
:txt is specified, the answer provided by socket:dns-query will be a list of
one or more strings (because TXT records can be composed of multiple
strings), or nil if there are no TXT
records. See also dns.htm. This functionality was
added by a patch released approximately June 15, 2005.
nil (the default), cl:namestring behaves as always and when
:unix, cl:namestring converts back slashes in the
namestring to forward slashes.
This feature is useful for ftp functions since ftp only understands Unix pathname syntax (using forward slashes). Functions like map-over-ftp-directory called on Windows generates pathnames of the files in an ftp directory, but these generated pathnames use Windows syntax (with backward slashes delimiting directories). In order for these pathnames to be used in calls to other ftp functions, such as ftp-stream-file-mod-time, they must be first converted to Unix syntax. Users writing there own mapping functions for ftp directories may find this added feature of cl:namestring useful. See cl:namestring in implementation.htm. (Patch release around November 5, 2004.)
fasl files (compiled Lisp files) created by releases of Allegro CL prior to 7.0 (including 7.0 Beta) will not load into Allegro CL 7.0. All such files, including all 7.0 Beta files, must be recreated by compiling the associated Lisp source files. An error will be signaled if Lisp attempts to load an older, incompatible fasl file.
Allegro CL 7.0 is known to work with the following minimal operating system versions. Allegro CL 7.0 runs on all operating system versions released (not in beta or pre-release form) as of October 15, 2004. See below for places to obtain information on operating systems released after that date.
Franz Inc. cannot maintain the same release schedule as the many operating system providers on the many platforms we support. Usually Allegro Common Lisp and all of its component parts will work on new Operating System versions that become available after release. But sometimes Allegro CL patches or operating-system patches, or installation tweaks, will be required before Lisp will run on an updated system.
Franz Inc. usually finds out about any such issues soon after new operating system releases appear and devises any necessary patches or compatibility procedures. We maintain current information about operating system versions on this web page: http://www.franz.com/support/osinfo.lhtml. We strongly advise you to check that page before updating your operating system. If we know that the new operating system is compatible, or is compatible with certain patches, you will find the information there. Similarly if it is known to be incompatible. If the new operating system is not yet listed it may be that it has not yet been tested.
A problem with Solaris 2.8 where calls to run-shell-command can cause Lisp to hang is
fixed by operating system patch 108993-18 (which supersedes the
earlier patch 108827-36 for this problem). On Solaris 8, it can
also be fixed by adding /usr/lib/lwp to the front of your
LD_LIBRARY_PATH environment variable. No fix is
necessary for Solaris 2.9. (The problem also affects Solaris 2.6,
where an OS upgrade is needed and Solaris 2.7, fixed by patch
106980-21, but Allegro CL 7.0 is not supported on Solaris 2.6 or 2.7.)
The patch can be obtained from this Sun website: http://sunsolve.sun.com/search/document.do?assetkey=1-26-49843-1.
The default stack size limit on an Alpha is 2 Megabytes, which is too low for normal stack overflow handling. Doing
limit stacksize unlimited
in a csh shell seems to allow up to 16 or 32 Mb, and users can run that command before running Allegro CL. (That command could be put into a .cshrc file.)
However, that only solves the problem for Allegro CL processes that are started from within that shell. You can also change the default for the machine as a whole by doing something like the following. (This procedure is provided as an example of what might work. Please check your Tru64 system documentation or contact your Compaq service representative for the precise instructions.)
The procedure described here is best performed by a system administrator or similarly trained person. The vmunix file created and copied at the end is the UNIX kernel. Modifying it incorrectly or corrupting it can have serious consequences.
1. Log in as root. You must be root (or have superuser privileges) to perform most of the following operations.
2. Change into the /sys/conf/ directory.
prompt# cd /sys/conf
3. Edit the file whose name is the machine name, which we will call MACHINE_NAME, as follows. (Such a file typically exists after normal Tru64 Unix install. If the file does not exist, the System Administrator will have to create one.
Change the line
dflssiz 2097152
to
dflssiz 8388608
or
dflssiz 16777216
The value of dflssiz may already be different than 2097152, which is 2 megabytes -- (* 2 (expt 2 20)). The new suggested values are 8388608, which is 8 megabytes and a good value for 32-bit Lisps, or 16777216, 16 megabytes and a good value for 64-bit Lisps.
4. Run /usr/sbin/doconfig as follows (recall that MACHINE_NAME is the file in /sys/conf whose name is the machine name):
prompt# /usr/sbin/doconfig -c MACHINE_NAME
You should see output similar to:
*** KERNEL CONFIGURATION AND BUILD PROCEDURE *** Saving /sys/conf/MACHINE_NAME as /sys/conf/MACHINE_NAME.bck Do you want to edit the configuration file? (y/n) [n]: n *** PERFORMING KERNEL BUILD *** Working....Thu Oct 4 09:58:16 PDT 2001 The new kernel is /sys/MACHINE_NAME/vmunix
5. Copy the new kernel to / with a command like the following
prompt# mv /sys/MACHINE_NAME/vmunix /
6. Reboot the system.
Increasing the default maximum stack size on HPUX 11 requires modifying kernel configuration parameters, then rebuilding the kernel. This process should be done by the systems administrator.
The file /stand/system is the kernel
configuration file. The maxssiz and
maxssiz_64bit tunable parameters need to be
increased to at least 32MB each. If you don't have any references to
maxssiz or maxssiz_64bit in your
/stand/system file, then you can simply add these
lines to the bottom of the file:
maxssiz (32*1024*1024) maxssiz_64bit (32*1024*1024)
Otherwise, you'll need to modify the existing parameters so that they express a value >= 32MB.
After modifying /stand/system, the kernel needs to be rebuilt using the following command:
/usr/sbin/config -u /stand/system
The system will have to be rebooted for the changes to take effect.
Allegro CL 7.0 is not supported on Mac OS X version 10.0. You must use version 10.3.
There are two other issues:
The default stack size limit on a Mac OS X machine (apparently 512 Kbytes) is too low for normal stack overflow handling. Doing
limit stacksize unlimited
in a csh shell seems to allow up to 16 or 32 Mb, and users can run that command before running Allegro CL. (That command could be put into a .cshrc file.)
However, that only solves the problem for Allegro CL processes that are started from within that shell. You can also change the default for the machine as a whole by doing something like the following. (This procedure is provided as an example of what might work. Please check your Mac OS X system documentation or contact your Apple service representative for the precise instructions.)
The procedure described here is best performed by a system administrator or similarly trained person. The /etc/rc file edited during the procedure is key to correct operation of the Operating System. Modifying it incorrectly or corrupting it can have serious consequences.
1. Log in as root. You must be root (or have superuser privileges) to perform most of the following operations.
2. Get access to the command line shell on the computer. This can be accomplished by launching the Terminal application.
3. Open up the file /etc/rc with a text editor.
4. Add the following lines near the top of the file (the values shown, 8m and 10m, should be suitable for Allegro CL applications):
limit stacksize 8m limit datasize 10m
The actual contents of the file differ on different machines and setups. Here is an example of a suitable location: just before the following lines:
##
# Handle arguments passed from init.
##
BootType=$1; shift;
if [ -z "${BootType}" ]; then BootType="multiuser"; fi
5. Save the file /etc/rc.
6. Reboot the machine.
Building
shared libraries on Mac OS X in
foreign-functions.htm describes how to create a
shared library suitable for loading into Allegro CL. We have
determined that the -flat_namespace to the
ld used to create the shared library is necessary, as shown in
the linked section.
When building large new images, it is often useful to specify Lisp Heap and C-heap start locations. See the discussion of the lisp-heap-start and c-heap-start keyword arguments in Arguments to build-lisp-image 2: defaults not inherited from the running image in building-images.htm. Here are the initial locations (called `bases') in Allegro CL 7.0 as delivered. Values are Hexadecimal integers.
| Operating System | Lisp base | C base |
| Tru64 32-bit | 0x30000000 | 0x54000000 |
| Tru64 64-bit | 0x1000000000 | 0x2000000000 |
| FreeBSD | 0x10000000 | 0x64000000 |
| HP-UX 32-bit | 0x10000000 | 0x64000000 |
| HP-UX 64-bit | 0x8000001000000000 | 0x8000002000000000 |
| Linux (x86) | 0x71000000 | 0xa0000000 |
| Linux (PPC) | 0x40000000 | 0x74000000 |
| Mac OS X | 0x5008000 | 0x64000000 |
| Windows | 0x20000000 | 0x54000000 |
| AIX 32-bit | 0x30000000 | 0x64000000 |
| AIX 64-bit | 0x700001000000000 | 0x700002000000000 |
| Solaris 32-bit | 0x4000000 | 0x54000000 |
| Solaris 64-bit | 0x1000000000 | 0x10000000000 |
| AMD 64-bit | 0x1000000000 | 0x2000000000 |
This main section contains three subsections (which have additional subsections): one on new features (Section 6.1 New features in the base Lisp), one on changes which are not backwards compatible and so may require code changes, (Section 6.2 Non-backward-compatible changes in the base Lisp), and one on miscellaneous changes Section 6.3 Other changes to and notes about the base Lisp).
We have added a number of new capabilities to Allegro CL. Here we give links to the documentation of the new features.
The features described in Section 6.1.1 Features added to Allegro CL 6.2 after the initial release of Allegro CL 6.2 were released originally as patches to Allegro CL 6.2, but after the initial release of Allegro CL 6.2. The features described in Section 6.1.2 Major new features in Allegro CL 7.0 are new in the Allegro CL 7.0 release.
The shell module is intended to provide UNIX shell-like commands, such as you find on a modern UNIX system, and in addition short cuts for some common Perl idioms. This module does not provide functionality to spawn a shell (as older functions like run-shell-command and shell and newer ones like command-output do). Instead, many commands that are available in a shell are available in this module. These commands are available on UNIX and Windows and work in a uniform fashion whatever the actual operating system. No external programs are used to implement the functions in this module, and as a result security issues associated with executing external programs by spawning shells are finessed.
Associated with the shell module is a new implementation of system:with-command-line-arguments. The new implementation is backward compatible, so current calls to the macro will work as before. The new implementation provides more options and the ability ro use long form options.
See also Pathname wildcard syntax in pathnames.htm. This newly added section provides information on how wildcard characters (like * and ?) in pathnames are handled.
The Allegro FTP Client module has been improved. Various versions of this software have been previously available (as described in the documentation, ftp.htm). The module can be used to communicate with an FTP server. See ftp.htm for more information.
MySQL is a powerful, efficient, production ready open-source database that runs on all popular platforms. There are language bindings for most popular languages. A new module, described in mysql.htm provides an interface from Allegro CL to MySQL.
Note that the module has undergone changes since its original release and there are additional changes in the 7.0 release. One change provides improved handling of external formats. connect now has an external-format keyword argument and the function mysql-external-format polls (and with setf sets) the current external format for a connection.
A new module, :osi provides more connections to
Operating System functionality. The new module is described in
The Operating
System Interface (OSI) module in
os-interface.htm. The goal of the OSI module is to
provide a Lisp layer for operating system services available on the
platforms on which ACL runs. The operators, constants, and classes of
the new module are not described (in this documentation release) on
individual documentation pages. Instead, the descriptions are in
Operating
System Interface Functionality in
os-interface.htm.
As part of the changes introduced by the new OSI module, the following functions have been changed (by adding new keyword arguments, so current calls are unaffected):
:always-append as the value of the
if-exists and
if-does-not-exist. This value means that
concurrent writes by any number of programs will always write to the
end of the file. This is useful for writing to log files. Be warned,
however, that changing the file position of a stream opened with
:if-exists :always-append or
:if-does-not-exist :always-append will have no
effect. See the description of the implementation of cl:open in Extensions to cl:make-package,
cl:disassemble, cl:open, cl:apropos in
implementation.htm.
acl-socket:dns-query
has been modified. There are two modifications: one causes a fourth
value to be returned. That value is a list of the flags returned by
the dns server that replied to the query. The second modification
allows the value :any as a value for the
type keyword argument (see the description of
acl-socket:dns-query
for further information). The change is essentially backward
compatible (unless your code depends for some reason on exactly three
values being returned by acl-socket:dns-query).
Also, the documentation of acl-socket:dns-query has been clarified to make clear when the type is :ptr, name can be an integer IP address or a string containing a dotted IP address (the documentation previously incorrectly said name could only be an integer IP address when type is :ptr).
SOAP was released in Allegro CL 6.2 in stages. The initial release with 7.0 includes various things not in the 6.2 releases. See Section 10.0 Release notes for SOAP for details.
There is a new version of the Emacs-Lisp interface. Among others things, the patch improves menus for Emacs 21 and later, and offers the option of complying with the major mode conventions outlined in the GNU Emacs Lisp Reference Manual, edition 2.5. See the new section Significant changes in the interface in eli.htm for more information. Some miscellaneous fixes are listed in Section 14.0 Release notes for The Emacs/Lisp interface.
The new sax module, described in sax.htm, provides a validating parser for XML 1.0 and XML 1.1. The interface to the parser based on the SAX (Simple API for XML) specification. Users provide methods for the various generic functions that implement the parser.
The popular system definition facility, asdf, is now included with
Allegro CL. Evaluate (require :asdf) to load it
into a running Lisp. See [Allegro
directory]/code/asdf.readme for more information,
[Allegro directory]/code/asdf.license for the
license, and [Allegro directory]/src/asdf.lisp for
the source code.
Allegro Webactions is a dynamic web page generator facility designed to be used with AllegroServe. Please see webactions.html and using-webactions.html.
The most significant addition in Allegro CL 7.0 is a new model for multiprocessing. See Section 6.1.4 The new model for multiprocessing and OS threads in Allegro CL for more information.
Other new capabilities to Allegro CL are listed here, with links to the documentation of the new features. Some of these features have also been released as patches to Allegro CL 6.2.
7.0 note: environment support was added as a patch to Allegro CL 6.2. There have been some changes in the 7.0 release, particularly to function-information and augment-environment. 7.0 user familiar with the 6.2 version should look at the new descriptions.
*additional-logical-pathname-name-chars*
should be a list of character objects. These characters will then be
allowed in logical pathname words. (Logical pathnames containing
characters in *additional-logical-pathname-name-chars* which
are not alphabetic characters, decimal digits, or the minus sign will
not be portable, of course.) The initial value of *additional-logical-pathname-name-chars* is
nil. See the description of *additional-logical-pathname-name-chars* and
Logical pathnames: general
implementation details in pathnames.htm
for more information.
syscall-error is a subclass of
error. An error of
type syscall-error might
be signaled when there are problems with functions that interact with
the operating system such as run-shell-command, shell, and chdir. syscall-error has one slot,
errno, with accessor syscall-error-errno.
As part of this change, the file-error is now a
direct subclass of syscall-error, and only a subclass (but not
direct) of error.
winapi-error is a subclass of error. An error of type
winapi-error might be
signaled when there is a problem with the Windows API on Windows.
+Ti removes
Interrupt Lisp from the tray menu. +N
appname uses appname rather than
Lisp in tray menu items. Thus +N Myapp will cause the
menu item that is normally Interrupting Lisp to be
Interrupting Myapp (and +Ti removes that
item). See Command line arguments in
startup.htm for information on command line
arguments.
*system-messages* should be an output
stream, t, or nil. It controls where messages generated by load and by system
autoloading are sent. Autoloading messages are now controlled by
*load-verbose*,
just as load messages
are. If *load-verbose* is nil, no messages are generated by successful loads or
by autoloads. (In earlier releases, it was difficult to suppress
autoloading messages.) See Autoloading in
implementation.htm for more information on
autoloading.
:case keyword
argument to make-pathname, pathname-host, pathname-device, pathname-directory, pathname-name, and pathname-type is specified
:common, the case of components is converted
according to the value of *pathname-customary-case*. We recommend that
users not specify a value for :case. If
:case is unspecified, Allegro CL behaves as it did
in previous versions.
Processes within Lisp are now instances of a CLOS class that can be specialized to get customized behavior. Process objects mediate the programmer's access to threads. The programmer creates an instance of the process class (or of a subclass of the process class) in order to start a parallel computation. The computation's state can be inspected and modified through the use of functions that receive the process object as an argument.
Because processes are CLOS instances, the programmer can create specialized process classes whose instances contain application-specific attributes or behaviors. A server application, for example, could add slots to hold request queues or sockets or transaction-status data structures. After methods defined on initialize-instance and process-terminate could perform application-specific startup and shutdown actions.
This new model allows greatly simplified system design and implementation. It allows the programmer to treat the process and the server instance as a single object, instead of forcing a program structure in which they are two distinct things, one of which owns the other.
The following functions are no longer defined:
mp:*general-wait-delay*
*current-process*
will be non-nil if the process code has been
loaded, either during the build of the lisp image or by
(require :process).
mp:process).
nil, or if the process is an
immigrant. The latter can only happen in a native-threads lisp.
(coerce x '[name]) or (string
x)). Using these names for non-standard CL functions was
never legal according to the Common Lisp standard. These functions
have now been removed. Calls to the single-float or
double-float functions should be replaced with calls to coerce, as in this example:
(double-float 3) should be changed to (coerce 3 'double-float) (single-float val) should be changed to (coerce val 'single-float)
If the compiler
encounters calls to these function while compiling code, a warning of
class incompatible-conformance-change-warning is
signaled.
nil (that is, after
it has already indicated that the waiting should stop). Because of
this, wait functions with side effects should be coded very carefully.
It has always been true that wait functions could be called oten and
called after returning non-nil. However,
multiprocessing changes in 7.0 mean that calling after returning
non-nil is much more common, so wait
functions with side effects that seemed to work okay in earlier
releases may now cause problems.
See the description of mp:process-wait for more discussion of wait functions and suggestions for efficient ones.
:application-administration keyword argument to
generate-application
(actually fully documented in Creating the deliverable in
delivery.htm) is a list of elements of the form
(type-keyword ...), where (type-keyword
...) could be (in earlier versions)
(:resource-command-line "... command-line args
..."), which worked on UNIX only. Now (type-keyword
...) can be of the form (:resource-command-line
"arg1" "arg2" "arg3" ...) (i.e. each argument in its own
string) and this works on both UNIX and Windows.
nil rather than signaling an error when passed an
argument which was not a valid function name or specification. (Thus,
e.g., (fboundp 3) returned nil rather than signaling an error.) The new
function function-name-p
returns true if its argument is a valid function spec (and thus a
suitable argument to fboundp) and returns nil otherwise. (if (function-name-p spec)
(fboundp spec)) thus behaves in release 7.0 as
(fboundp spec) did in earlier releases.
*pathname-customary-case*.
(subseq "a" 0 4) asks for a
subsequence containing the first four elements of the sequence
(string) "a", which, of course, has only one element. In earlier
releases of Allegro CL, no error was typically signaled when the
argument was a vector. Instead, a vector with garbage elements was
returned. Now in 7.0 (and in 6.2 with a patch), an error is
signaled. This may break code which improperly relied on the no-error
behavior. The condition associated with the error is simple-error. The
error message says Error: In subseq, `end' (4) is beyond the end of
the sequence (1)., with (4) -- the value of
end, and (1) -- the length of
the sequence -- being replaced with the correct values for the
call. See subseq.
:int. :int corresponds to C's
int type. However, if the foreign function does not actually return an
int, subtle bugs could be introduced in programs, particularly if the
C function returns a long, an unsigned long, or a pointer of some
sort. In 32-bit Lisps, returning those values is not a problem (when
:returning :int is specified or defaulted to)
because int is always 32 bits on every architecture we support. But on
64-bit Lisps, if a 64 bit value is returned, the upper 32 bits are
lost. If the value was not correctly sign-extended by the foreign
code, a negative value in the foreign code could be seen by Lisp as a
large positive value. A bug fixed by a patch in release 6.2 makes Lisp
sign-extend values returned by foreign code in 64-bit Lisps, and thus
values expected by the pre-patch behavior in 6.2 will now be
different. So, on 64-bit Lisp, use :returning
:unsigned-long when the return value is some kind of
pointer. When it is an integer value, be sure to use the correct type
and be sure that the foreign code actually produces that type.
-qq command-line argument. In earlier releases,
initialization files were read and there was no way to prevent them
from being read.
Now when a script run using #! signals an error, it will exit with a non-zero exit status.
The new -#T command-line argument for scripts is
like the existing -#C argument in that the script
is compiled, but the compiled script is placed in
/tmp rather than the directory containing the
script, and so the user need not have write permission in that
directory.
compiler-inconsistent-name-usage-warning is
signaled when a tag or variable is unused (and the variable is not
delared ignorable) or a variable is declared ignore but used. compiler-unreachable-code-warning is
signaled when code cannot be reached (i.e. a clause after the t or otherwise in cond clause or a case).
verify-funcalls-switch is
false, compiled code will be faster because the jump will be directly
to the funcall'ed
function's start address. Debugging and runtime analysis will be impaired,
however.
t, meaning case-insensitive matching by
default. (In earlier releases, case-insensitive
defaulted to nil.)
"./" instead of ".".
:direction
:probe) return the truename when their file argument
exists. The new argument (which defaults to t
for truename, open, and probe-file and to nil
for rename-file-raw) causes
truename and the functions
that call it (as all the others do) to resolve the symbolic link when
true and to return the symbolic link when nil. This means that (delete-file (truename
p)) deletes the actual file (prior to the 6.2 patch, it
deleted the symbolic link only). (delete-file (truename p
:follow-symlinks nil)) deletes the symbolic link. See
rename-file-raw
and Extensions to cl:make-package,
cl:disassemble, cl:truename, cl:probe-file, cl:open,
cl:apropos in implementation.htm
(directory
"*/*.cl") will no longer, in the face of a `foo' symlink to
a directory, would descend into `foo'.
(eval-when (compile load eval)
...) form.
It is likely the most common changes will invlove defvar and defparameter, because the associated special declamation which previously persisted no longer does. Thus the compilation of the file foo2.cl after compilation of foo1.cl signals a warning in 7.0 but did not in earlier releases:
;; file foo1.cl begin (in-package :user) (defvar *foo1* nil) ;; file foo1.cl end ;; file foo2.cl begin (in-package :user) (defvar *foo2* nil) (defun bar () *foo1*) ;; file foo2.cl end cl-user(1): :cf foo1 ;;; Compiling file foo1.cl ;;; Writing fasl file foo1.fasl ;;; Fasl write complete cl-user(2): :cf foo2 ;;; Compiling file foo2.cl ; While compiling bar: Warning: Free reference to undeclared variable *foo1* assumed special. ;;; Writing fasl file foo2.fasl ;;; Fasl write complete
The warning will not occur if either the defvar is wrapped in
an eval-when -- (eval-when (compile load eval) (defvar
*foo1* nil)) -- or a declaim form is added and
wrapped in an eval-when -- (eval-when (compile load eval)
(declaim (special *foo1*))).
See Persistence of defining forms encountered by compile-file in compiling.htm for further details.
excl:float-declaration-used-warning has been
removed. In earlier releases, a warning was signaled when a variable
was declared a float, rather than a single-float or a
double-float. Because Allegro CL supports two floating-point types,
declaring a variable to be a float could result in
less than optimal code, because inlining of mathematical routines was
not possible. However, there are other reasons to declare a variable
to be a float, for example when methods are written on the float class
and the program is telling the compiler that those methods apply to a
variable. Warnings are inappropriate in that case, but (except for
inconvenient additional programming) cannot be avoided. The
:explain declaration can be used to ensure
floating-point code is properly optimized. See Help with
declarations: the :explain
declaration in compiling.htm for further
details on optimizing floating-point code.
*load-search-list*
and *require-search-list*. See Search lists in
loading.htm for information about search lists.
md5-final, md5-string, and md5-file all had a keyword argument
:usb8-result added with a 6.2 patch. The argument
has been changed to :result (with values
:integer, equivalent to ':usb8-result nil';
:usb8, equivalent to ':usb8-result t'; and
:hex, causing a string with a hex representation of
the result to be returned). The :usb8-result
argument is no longer accepted. md5-final now has additional keyword arguments
which are passed to md5-update. md5-string and md5-update now accept (unsigned-byte 8)
vectors as well as strings as arguments.
pprint. It causes the current object to be
pretty printed. It is useful when multiple options are specified in a
single :istep command, since
intermediate is not printed. Interspersing pprint's
among the specified options causes intermediate values to be printed.
nil. If specified
true, *dns-domain* and *domain-search-list* will be used to
fully qualify the name argument before doing the query. dns-lookup-hostname (which
simply calls dns-query) accepts the
search keyword arguments since it accepts all
dns-query keyword
arguments.
*eli-daemon-socket-hook* should be a
function that accepts one argument and will initialize the socket that
is used to communicate with Emacs when the Emacs-Lisp interface is
started. See the description of *eli-daemon-socket-hook* for details.
t, (3) change the default of the
if-does-not-exist argument to
:error, and (4) have the files removed in the
proper order, so that subdirectories are emptied before their parents.
:always-append, which causes O_APPEND to be
used when opening the file. (This only has meaning for
if-does-not-exist when the file is opened for
output.) This means that concurrent writes by any number of programs
will always write to the end of the file. This is useful for writing
to log files. Be warned, however, that changing the file position of a
stream opened with :if-exists :always-append or
:if-does-not-exist :always-append will have no
effect. See the description of the implementation of cl:open in Extensions to cl:make-package,
cl:disassemble, cl:open, cl:apropos in
implementation.htm.
file-error condition, with proper errno information
when an error occurs.
nil. On Windows where
signal information is not available, the third return value is always
nil. See reap-os-subprocess for details.
:explain declaration
in earlier releases was (:explain :quality |
:noquality), thus (declare (:explain :boxing
:nocalls :notypes :variables)) enabled explaining for boxing
and variables and disabled it for types and calls. That format is
still supported, but its use is deprecated. Instead, use of the new
format, (:explain :quality | (:quality t) | (:quality
nil)) is recommended. (declare (:explain :boxing
(:calls nil) (:types nil) (:variables t))) has the same
effect as the old-style form above.
There is a new :tailmerging quality for
:explain. It explains why a function in the tail
position is or is not tail merged.
See Help with declarations: the :explain declaration in compiling.htm for more information.
(:explain :types) also now provides environment
information.
The new functions excl:malloc and excl:free are direct links to the system malloc() and free(). Note that space allocated with aclmalloc cannot be freed with free (you must use aclfree or aclfree-aligned) and space allocated with malloc cannot be freed with aclfree or aclfree-aligned (you must use free). Note further that malloc and free are different from the functions named by the symbols excl::malloc and excl::free in earlier releases. Those calls, if any exist in your code, must be changed to calls to aclmalloc and aclfree.
*load-foreign-types*, then load will treat is as a foreign code
file and act appropriately. The value is different on different
platforms. To see the value of a platform you are using, evaluate this
variable in a running Allegro CL image. The value should not be
changed. You can, however, force a foreign load of a file with an
extension not included in *load-foreign-types* by specifying a true
value for the new (and non-standard) :foreign
keyword argument to load. See
Using the load
function in loading.htm for details of
the Allegro CL implementation to load.
file-does-not-exist-error is signaled when
load tries to load a
file that does not exist and the :if-does-not-exist
keyword argument to load is true. autoload-file-does-not-exist-error is
signaled when the system tries to autoload a file that does not exist.
The function stat-type returns a keyword describing the type of file object returned by functions like stat.
*trace-output* went to the
console.
nil if the second starts with the
first. The rturn value, when true, is the index in the second where
the first ends (so (prefixp "foo" "foobar") returns
3). regular-expression matching (see regexp.htm) can
do similar testing, this function is easier to use for very simple cases.
nil, the contents of the
locales/ directory in the Allegro CL distribution are copied to
the application directory. The size of the
locales/ subdirectory is about 2 Mbytes. The
argument is described in Creating the deliverable in
delivery.htm, where generate-application is fully described.
There are no entries at this time. Information may be placed here in documentation updates after the initial Allegro CL 7.0 release.
The CLIM manual has been updated for the 7.0 release. These changes should be noted:
:from-end to argument internal CLIM function
clim-utils::dovector was evaluated at compile-time, and so
correct code was generated only in the case where the :from-end
argument was a compile-time constant. In 7.0, the argument is always
evaluated at run-time. Because this function is internal, it is not
supported and may be changed without notice. However, it is unlikely
to change and CLIM users are known to use it. If you do use it, please
be sure to note that fact in comments to your code so you know to ask
if additional changes have been made if there seems to be a problem.
(Repeated from 7.0 Release Notes.) The documentation for CLIM is in an online PDF file, clim-ug.pdf. It has been updated since release 2.0 and is called The CLIM 2.2.2 User Guide. That document includes material formerly in the (printed) CLIM Release Notes.
On Linux and FreeBSD, Allegro CLIM works with Open Motif 2.1 and 2.2 (2.2 was released in early 2002). Open Motif 2.2 is available at no charge from www.openmotif.org. Allegro CL 7.0/Allegro CLIM will work with either version. Redhat Linux 7.2 is supplied with Lesstif, a version of Motif that does not work with CLIM. See the Linux architecture specific information in the Allegro CL FAQ for information on how to install Redhat Linux 7.2 without lesstif and how to uninstall lesstif if already present.
On Mac OS X 10.3, OpenMotif Motif 2.2.2 is required. CLIM will not work with version 2.2.0.
Certain CLIM demos on Solaris 64 bit give segv or otherwise fail when displaying over the network, language environment must be set to C. This is a problem when running any Sun GUI (such as the CDE environment or the Gnome 2.0 interface) on a Solaris64 machine. When bringing up the environment, set the language/locale to "C". (On the login screen, there's an "Options" button, which displays a menu that has a "Languages" submenu. Choose "C". Note: the default value is typically "en_US".) The "C" setting can process all of the 64-bit font sets. However, difficulties arise when displaying over the network. If you are displaying on the monitor of the machine running Allegro CL (and CLIM), the demos work as long as the language/locale is "C". They typically do not work when displaying on a monitor over the network. As of this writing, there is no fix for the problem.
Common Graphics and the Integrated Development Environment have been significantly revised in release 7.0. The main revisions are as follows:
dde module and the dde
package. This allows you to use the DDE facility in an application
without Common Graphics. See
Appendix D Details of separating DDE code from Common Graphics for more details.
IDE functionality (that is, that part of Common Graphics used to
develop applications and design components used in those applications)
has been moved to the ide module and the
ide package. The ide module will
not be loaded into applications. See
Appendix B Details of Common Graphics/IDE package reorganization for more details.
cg.icon and cg.tab-control. All
symbols are also exported from the cg package (and
so there is no need to use any of the new packages). You will
occasionally see the packages referred to in descriptive
output. cg is the parent package (in the sense of
the Allegro CL hierarchical package naming scheme, described in
Hierarchical
Packages in packages.htm) of all the new
packages. Note that cg is the proper name for what
was previously called the common-graphics
package. common-graphics is now a nickname.
The first subsection describes changes to Common Graphics and the IDE that are non backward-compatible. Please review this section and make whatever necessary changes to your code to obtain the desired behavior in release 7.0.
The second subsection describes other changes to Common Graphics and the IDE. These should not require code changes (please tell us if any do, because that may indicate a bug), but note that certain function and argument names have been deprecated in favor of new names, and that new code should reflect these changes, and old code should be revised at some point.
The section Section 8.3 IDE release notes and its subsections provide information about the IDE.
os-widget instance. Applications can remove any
calls to this function. Any leftover calls will now simply do
nothing. unsubclass-widget is
also unnecessary and should also be removed; calls to it too are now
no-ops.
os-widget. Now it is.
Methods may be added to the new generic function os-exit-request to determine whether an attempted shutdown of the operating system (or logoff of the current user) is allowed to proceed. The related function query-end-windows-session has been renamed to os-exit-request to avoid a Windows-specific name.
dialog to frame-window. This change was made because the
dialog class is not defined in the now-smaller base cg module (and
because frame-window is a more fundamental type of window). Any call
to make-window that did
not pass a :class (or :device) keyword argument and that depended on
the window being a dialog should now specify ":class 'dialog".
common-graphics package to the
ide package). See
Appendix B Details of Common Graphics/IDE package reorganization for details of
the move of symbols naming IDE-specific functions from the
common-graphics package to the
ide package.
cg:*edit-allowed-types* has been removed. In the
IDE, use the new ide configuration option ide:file-dialog-source-types instead. That
variable used to supply the default for the allowed-types keyword
argument to ask-user-for-new-pathname or
ask-user-for-existing-pathname. Now
a suitable default for that argument is supplied in the definitions of
those functions. A value other than the default must be supplied as a
value to that argument in the function calls.
When the Save All dialog appears in a situation where the current project is about to be closed (usually because you are opening another project or creating a new one), then the second button on the Save All dialog will say Discard instead of No, and selecting that choice will result in unsaved changes to the old project being lost. The button will also say Discard at IDE exit time to similarly warn that choosing it will discard all unsaved changes.
*check-cg-args* and the menu command Run | CG
Argument Checking no longer exist. The IDE image used to contain
a special version of Common Graphics that differed in various ways
from the runtime Common Graphics fasl files, with one of the
differences being extra code for checking argument types (when
enabled). Now that a single version of Common Graphics is used, we
decided against embedding this debugging code to avoid making
standalone Common Graphics apps larger.
:editor-mode option/argument to defproperties, defcomponent, and define-property is now
called :editor-type. The corresponding generic
function property-editor-mode is now called property-editor-type. This was to
remove confusion with the IDE configuration option editor-mode (and to resolve a package conflict
with a corresponding internal symbol).
*text-edit-comtab*, which could
be modified to enhance the editor.
windows package but which were also exported from
the common-graphics package. (These were documented
with other common-graphics operators.) Starting in
release 7.0, they are no longer exported from the
common-graphics package. They are: memory-status, os-version-info, file-systems, file-system-type, file-system-info, and file-systems-info.
windows package (in earlier releases, it was the
common-graphics package). The symbols are not
exported from the common-graphcs package (as was
done in earlier releases for windows package
functions). The functions are: network-machines, network-shares, and directory-subdirectories.
directory-subdirectories has also been modified to accept a pathname namestring as well as a pathname object.