Release Notes for Allegro CL 8.0
This document contains the following sections:1.0 Introduction
2.0 Information on changes and new stuff since the 8.0 release
3.0 Fasl files are not-compatible between versions and operating systems
3.1 All pre-8.0 Lisp compiled files must be recompiled (old fasl files will not load)
3.2 Fasl files may be incompatible in different Lisps on same hardware
4.0 Release Notes for installation
5.0 Release notes for specific platforms
5.1 OS patch needed for Solaris 2.8 on Sparcs
5.2 HP Alpha running Tru64: default stack size should be increased
5.3 Notes of increasing the default maximum stack size on HP-UX 11 machines
5.4 Mac OS X notes
5.5 Heap start locations
6.0 Release Notes for the base Lisp
6.1 New features in the base Lisp
6.1.1 Features added to Allegro CL 7.0 after the initial release of Allegro CL 7.0
6.1.2 Major new features in Allegro CL 8.0
6.1.3 Other new features in Allegro CL 8.0
6.1.4 Multiprocessing and OS threads in Allegro CL 8.0
6.2 Non-backward-compatible changes in the base Lisp
6.3 Other changes to and notes about the base Lisp
6.4 Base Lisp platform-specific information
7.0 Release Notes for CLIM
8.0 Release Notes for Common Graphics and the IDE
8.1 Significant changes in Common Graphics
8.2 Non-backward-compatible changes in Common Graphics
8.3 Functionality to handle differences between Windows and GTK
8.4 Other changes in Common Graphics
8.5 IDE release notes
8.5.1 Opening projects from releases prior to 8.0
9.0 AllegroStore not available in Allegro CL 8.0
10.0 Release notes for SOAP
11.0 Release notes for Allegro RPC
12.0 Release notes for jLinker
13.0 Release notes for AllegroServe
14.0 Release notes for IMAP and SMTP, XMLutils
15.0 Release notes for The Emacs/Lisp interface
16.0 Availability of CLX for Allegro CL
17.0 Release notes for Orblink
Appendix A. Tightening of ANSI Conformance in Allegro CL
This document is a copy of the release notes for release
of Allegro Common Lisp and related products provided with release 8.1. Many
sections are divided into non-backward-compatible changes (that
produce different behavior in release 8.0
compared to release 7.0) 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.
This document describes the changes, major and minor, from 7.0 to 8.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.
This section describes features added after the initial release of
Allegro CL 8.0. (This includes additions as of March 31, 2007. See
the actual 8.0 Release Notes for later changes, if any.)
New features in SSL socket support. Allegro CL has for some
time supported SSL (Secure Socket Layer) sockets. See the section
Secure Socket Layer
(SSL) in socket.htm. An update released
in late March, 2007, enhances this facility to support processing of
certificates. The argument lists to make-ssl-client-stream and make-ssl-server-stream have
been augmented to support the new feature. New methods, get-ssl-peer-certificate,
have been added. get-ssl-peer-certificate allows
accessing and working with X.509 certificates. A new
defines objects corresponding to X.509 certificates.
jLinker update has changes to jlinker-init and
jlinker-listen. jlinker-init now has an
end-function keyword argument which, if supplied,
should name a function that will be called when jLinker stops. jlinker-listen now
behaves differently when jlinker-init fails: before
would exit when jlinker-init failed. Now, the
function specified as the value of the
process-function is called and it is its
responsibility to decide whether to stop or continue when jlinker-init returns a
failure message. These changes were made in an update released in
Daylight saving time changes. As of a patch released in
February, 2007, Allegro CL finds out whether daylight ssaving time is
or ois not in effect by asking the operating system. The variable
*daylight-saving-time-observed* is now ignored.
(However, some operating systems have not been updated to reflect the
new United States DST schedules which go into effect in 2007 (with DST
starting on March 11, 2007). Allegro CL schedules have been
updated. You can use the old system with the updated schedules if you
set the unexported variable
true. Then the variable
*daylight-saving-time-observed* will have
effect. But when your OS is updated to have correct DST information,
you should use that.)
New rpc update. An update to Allegro RPC was released in January,
2007. The changes included adding a kill argument
to client-exit, modifying
client-exit to kill a
process on a remote host, and revising symbol handling in remote
references. The documentation was also updated, with significant
changes particularly to the description of run-other-client. See
rpc.htm for information on RPC in Allegro CL.
New :anynl value for eol-convention for input-streams. The
returns and (with setf) allows
setting the End of Line convention used by a stream. You may now set
the value to
:anynl, which will result
in any standard end of
line convention being read correctly on input (the UNIX convention of
a linefeed, the DOS convention of a carriage-return linefeed, or the
Mac convention of a carriage-return). See the description of eol-convention for details and a
discussion of what is done for output files.
Variable net.uri:*strict-parse* allows parsing of some URIs that
are non-compliant. RFC2396 specifies the format for URIs but many
websites do not strictly follow its rules. The variable
*strict-parse* controls how
strictly the parser observes syntax rules and, when
nil, allows parsing of many URIs which are actually
non-compliant. See uri.htm for details of URI
New net.mail package and interface for parsing and validating email
addresses. An update released about December 21, 2006 provides two
functions in the new net.mail package: parse-email-address
and valid-email-domain-p. The first (broadly
extracts the username and domain name from an email address while the
second tries to validate domain names (because many things can go
wrong with email, valid-email-domain-p is most useful when
it says a domain is invalid). See The net.mail interface for parsing and validating
email addresses in imap.htm for details.
excl:with-underlying-simple-vector exported: the macro excl:with-underlying-simple-vector,
which allows access to the underlying data vector associated with an
array, is now exported and documented. (It has existed as an internal
operator for a long time in Allegro CL.)
New ISO 8601 date/time module: support for ISO 8601
specifications of dates and times has been added to Allegro CL in an
update released in early August, 2006. See
date-time.htm for details. The functions locale-format-time and locale-print-time have also been
modified to accept date-time objects as well as universal times as
arguments. (The description of locale-print-time has been updated to reflect
that change and also to revise the field descriptor definitions
(%F, %G, %g, and %P added, %U, %W removed) and the Modified Conversion
Specifications (%OU and %OW removed), the removed
definitions/specs were never in fact supported.)
New module provide PAM support on some platforms. The
pam module, released in a mid-August update, provides a Lisp
wrapper around the PAM API on Linux, Solaris, and some other unixlike
operating systems. PAM (Pluggable Authentication Modules) is described
in www.kernel.org/pub/linux/libs/pam/FAQ. See
PAM support in Allegro
Common Lisp in miscellaneous.htm for
details. PAM is not supported on Windows and some UNIX
platforms. The PAM
documentation lists the platforms where PAM is not
New FAQ replaces old FAQ. We have a new FAQ (Frequently
Asked Questions) document. It is only available online (so
you will always see the latest version). It is located at http://www.franz.com/support/faq/. The
version of our FAQ previously included with the documentation in the
doc/faq/ directory has been discontinued and removed (all files
now simply contain a link to the new FAQ).
New Emacs-Lisp-Interface command fi:insert-arglist (C-c i): the
fi:insert-arglist command, when invoked after typing '(<fun> ',
inserts the argument list template into the code being typed. See
Argument lists in
eli.htm for details.
Also, a problem with using Gnu Emacs on Windows compiled with Cygwin
has been fixed.
New optimized variants of read-line. In an update released
around July 11, 2006, two new functions, simple-stream-read-line and read-line-into were added to provide optimized
variants of read-line, with
little or no consing and less copying of characters (because the
target strings are provided in the function call). simple-stream-read-line allows (optionally)
specifying a target string but will create a new string if
always requires a target string and will use it regardless. It is
therefore always more efficient but it does require correct
bookkeeeping to be used correctly. Both are documented on there own
pages. The read-line-into
page has numerous examples.
double-sided option for pop-up-printer-job-dialog. A new
option, double-sided, has been
added for printer support. See pop-up-printer-job-dialog.
Minor IP address handling upgrade. In a June, 2006 update, the
returns true if its argument is a string in dotted IP address
form. See Host
naming in socket.htm where the dotted
form is described with examples.
sys:update-allegro now allows specifying proxy username and
password. This change is made in a June, 2006 update. There has
long been a proxy keyword argument to sys:update-allegro, the function
that downloads updates and patches for Allegro CL. This argument
allows downloading when using a proxy. However, sometimes the proxy
also needs a username and password. A new keyword argument,
proxy-basic-authorization, allows these to be
specified as well. See sys:update-allegro.
ntservice facility provided: an update released in early June,
2006 allows you to make your application a service on Windows. See
application into a Windows Service in
delivery.htm. There is an example (after the update
is complete) in examples/ntservice/.
A jLinker release in early June, 2006. This update makes
jLinker identical in Allegro CL 7.0 and 8.0. There are changes in
(new :abort value for the stop argument); jlinker-init (new
report keyword argument); def-java-class (new possible
value for the name); def-java-constructor
(documentation clarification); jlinker-slot (new value for the
key argument); and a new variable
minor changes in jarray-set, jdo-call, jmake-new, jcons, jmeth, jget-cons, jget-meth, and jarray-set.)
New rpc update. An update released in the Spring of 2006 made
some modifications to the rpc module (see rpc.htm
for a description of the module. The affected operators were client-end-all (new
loop optional argument) and run-other-client (new
line-limit keyword argument). Also, there were
significant documentation changes to run-other-lisp and rpc-close.
New command-line argument +P. An update released in the Spring
of 2006 added the +P command-line argument. If +p (lowercase p)
appears on the command line, +P (uppercase P) undoes its effect. (+p
may be present in the command-line resource for the executable. +P
allows cancelling the +p is such a case.) See Command line
arguments in startup.htm for a list of
command-line arguments accepted by Allegro CL.
A SOAP update was released in late February, 2006. It makes
minor changes and corrections. One
documentation correction should be noted: the default for the
:nillable option (to operators like soap-message-client) is
:ignore (making it compatible with earlier
versions). The earlier documentation update incorrectly said the
New support for constructing MIME messages. See MIME support in
imap.htm for more information. See particularly the
new function make-mime-part. send-letter,
send-smtp, and send-smtp-auth have been enhanced
to allow files or streams (as well as a string) as the value of the
message argument. send-letter also now accepts an
attachments keyword argument.
New support for pipe streams: See make-pipe-stream, make-function-input-stream, and with-function-input-stream. (The new
pipe streams are somewhat more flexible than the one provided by
New function base64-encode-stream. See the description of
base64-encode-stream and see
Support in miscellaneous.htm for
information on Base64 and Base64 support in Allegro CL.
New ability to invoke Lisp within a bat file on Windows. You
can now execute Lisp programs contained within a bat file on Windows
so the bat file will invoke Lisp, run specified forms, and then exit
(optionally pausing before exiting). The function lisp-to-bat-file supports this new
facility. It writes an appropriate bat file when given a Lisp file of
forms to execute and provided some additonal information (such as what
image file to use). Also added are two new command-line arguments
--bat and --bat-pause. (See Command line arguments in
startup.htm for a list of command-line arguments
accepted by Allegro CL.) This Tech
Corner entry talks about the bat file feature and gives an
Support for this facility was added with a patch released around
1/17/06. See sys:update-allegro for information on
fasl files (compiled Lisp files) created by
releases of Allegro CL prior to 8.0 (including 8.0.beta) will not load
into Allegro CL 8.0. All such 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
Fasl files created on Windows x86 cannot be loaded into Linux or
FreeBSD x86 Lisps
The Windows and UNIX operating systems are too different. However,
FASL files (for the same Lisp version) can generally be shared between
different UNIX operating systems on the same hardware. The general
principles are as follows. Note that incompatibility may creep in for
reasons outside our control. If fasl files are incompatible, recompile
on the target machine.
Fasl files will usually be compatible between platforms when:
the architecture (hardware) is the same
the calling convention is the same (that is, the method of calling
functions and the registers they use for arguments are the same)
the method for generating signals can be made compatible (this cannot
be done for Windows and UNIX, so they are incompatible for this
It is up to the user to ensure that there are no os-specific
dependencies, or that features (i.e. #+/#- ) did not cause
essential code to be excluded or extraneous code introduced
that would cause a problem on the crossed architecture.
>Version 8.0 uses the 7.0 installation procedure:
installation is described in installation.htm.
The distribution includes 8 bit and 16 bit character images
(this information is repeated from earlier Release Notes). Allegro CL
has images that support 8 bit characters only, or 16 bit
characters only. It is our expectation that most users will use the 16
bit images. Executables supplied with the distribution either have or
do not have `8' in the name. Those with 8 in the name (mlisp8 and
alisp8, e.g.) support 8 bit characters. Those without a number in the
name support 16 bit characters. Image (dxl) files also come in 8 and
16 varieties. Again, 8 in the name means 8 bit character
support. Character support for images and executables must
match. Trying to start an executable with the wrong type of image
No prebuilt Allegro Composer images in the distribution
(this information is repeated from earlier Release Notes). To
create an Allegro Composer image, start Allegro CL and load
buildcomposer.cl. That will produce composer and
composer.dxl, or composer8 and
composer8.dxl. Allegro Composer is available on Unix only.
No prebuilt Allegro CLIM images in the distribution (this
information is repeated from earlier Release Notes). To create a CLIM
image, start Allegro CL and load buildclim.cl. That will
produce clim and clim.dxl, or clim8 and
Allegro CL 8.0 is known to work with the following minimal operating
system versions. Allegro CL 8.0 runs on all operating system versions
released (not in beta or pre-release form) as of December 1, 2005. See
below for places to obtain information on operating systems released
after that date.
Note that Allegro CL 8.0 does not run on Windows 98/Me or on Mac OS
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
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 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
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
HP 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
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
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
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_64bit tunable parameters need to be
increased to at least 32MB each. If you don't have any references to
maxssiz_64bit in your
/stand/system file, then you can simply add these
lines to the bottom of the file:
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 8.0 is only supported on Mac OS X version 10.4 or later.
It is not supported on versions 10.3 or
The Runtime Analyzer (see runtime-analyzer.htm)
does not work properly on the 64-bit Mac OS X port (there is no
problem on the 32-bit port).
Building shared libraries on Mac OS X
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
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.
|Mac OS X 32-bit
|Mac OS X 64-bit
|Solaris (AMD64) 64-bit
|Linux (AMD64) 64-bit
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 7.0 after the initial release of Allegro CL 7.0 were released
originally as patches to Allegro CL 7.0, but after the initial release
of Allegro CL 7.0. The features described in
Section 6.1.2 Major new features in Allegro CL 8.0 are new in the Allegro CL
Various additions to Allegro CL 7.0 were added after the original release of
Allegro CL 7.0. We list them here. All are part of release 8.0.
New OLE/OCX interface: a new, high-level interface to OLE/OCX on
Windows was released in early September, 2005. The documentation is in
the revised ole.htm.
Update to an Allegro CL/SOAP
API. There was a significant new SOAP release which included
the following enhancements:
CLOS wrappers for SOAP structures
built-in definitions for many Schema types
new warning hierarchy
new condition hierarchy
access to element attributes in SOAP messages
attribute values may be computed when message is composed
top-level multiRef handling
multiple SOAP Body elements
access to encoding and content-type headers
complete access to all the message components
user extensions to WSDL code generators
There are additional changes to SOAP in 8.0 not included in the 7.0
Blowfish encryption update: The update (1) allows specifying
the external format to be used when encrypting and decrypting; (2)
adds support for CBC encrypting, for PKCS#5 padding, and zero (or
null) padding for plaintext with no nulls; and (3) also adds new
auxilliary functions hex-string-to-usb8-array and usb8-array-to-hex-string. See Support for Blowfish
encryption in miscellaneous.htm.
In 8.0, the default value for the external-format
argument of blowfish-init is
:utf-8 (it was
:default in release 7.0).
New prolog release: with new documentation prolog.html.
New functionality for retrieving DNS TXT records. The function
: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
nil if there are no TXT
records. See also dns.htm.
ftp-stream-file-mod-time and ftp-file-mod-time now convert the
remote-path argument to Unix syntax pathname naming;
map-over-ftp-directory now works on Windows. ftp-file-mod-time and ftp-stream-file-mod-time both take a
remote-path argument which is a pathname
namestring. ftp functions only understand Unix pathname syntax, using
forward slashes to delimit directories. Windows uses backward slashes
to delimit directories and functions like cl:directory called on
Windows returns pathnames with backward slashes in their
namestrings. ftp-file-mod-time and ftp-stream-file-mod-time now convert those
namestrings to Unix syntax using the new syntax
keyword argument to cl:namestring (see cl:namestring in
implementation.htm). Functions such as map-over-ftp-directory, which call ftp-stream-file-mod-time, now also work
correctly on Windows.
New :syntax keyword argument to cl:namestring converts backslashes
into forward slashes. The cl:namestring function has a new keyword
argument, syntax. The argument is ignored on Unix and Unix-like platforms. On Windows, when
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 their own mapping
functions for ftp directories may find this added feature of cl:namestring useful. See cl:namestring in
Aodbc update: this update provided the
ability to set the non-blocking flag in a database. See connect and db-non-blocking.
Oracle-direct update: this update provided
some additional functionality for the Oracle Direct interface. See
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 7.0.
AllegroCache: AllegroCache is a high performance, dynamic
object caching database system. It allows programs to work directly
with objects as if they were in memory while in fact the object data
is being stored persistently. AllegroCache supports a full transaction
model with long and short transactions, and meets the classic ACID
requirements for a reliable and robust database. See the AllegroCache
documentation (PDF files), located in the [Allegro
Directory]/acache/doc/ directory: acache.pdf and acachetutorial.pdf.
:explain :inlining declaration: there are various :explain
declarations which tell the compiler to print out information about
what it is doing or trying to do as it compiles. These declarations
are described in Help
with declarations: the :explain declaration in
compiling.htm and also see the new
compiler-explanations.htm document. The new
:explain :inlining declaration provides information
about why inlining of functions succeeds or fails. See Inlining
compiler-explanations.htm. There is an example in
New -ee command-line argument and new function
make-escaped-string: this argument is the same as the existing -e
command-line argument but it will additionally process its companion
argument to convert character triplets of the form %hh,
where hh is a two digit hex value, to the character
whose char-code is that hex value. This allows you easily to specify
as a companion argument values containing spaces, backslashes,
etc.. Because the conversion is not done until Lisp is ready to
process the argument, earlier shell processing will not have
incorrectly resolved the special characters before Lisp sees them.
See Command line
argumentsand Further description of the -e and -ee command-line
arguments, both in startup.htm.
The new function make-escaped-string will create converted
strings suitable as companion arguments to -ee.
New macro with-native-strings*. This new macro
allows nesting of calls to with-native-string.
New function system:constant-value: the function system:constant-value takes a
form as an argument, and if the form has constant value, returns its
value. An environment can be passed as an optional argument.
New function sys:ensure-portable-walking-environment. sys:ensure-portable-walking-environment
returns an environment suitable for portable code walkers to use
entirely within the ANSI Specification of Common Lisp.
New second optional argument to cl:macroexpand and
cl-macroexpand-1. This second optional argument allows more
choices in macroexpansion in different environments. See cl:macroexpand and
cl:macroexpand-1 in implementation.htm
New macro mp:with-message-interrupts-disabled:
on Windows, even though a process may be waiting, it still typically
watches for messages and processes operating system messages that
require a response (because Windows expects threads to do
this). However, there are some rare circumstances where this message
handling should be suppressed. The macro mp:with-message-interrupts-disabled will do
The multiprocessing model was significantly changed in release 7.0.
There are not major changes in release 8.0 compared to 7.0, other than
bug fixes and internal improvements. See The new model for
multiprocessing and OS threads in Allegro CL in
version-70-release-notes.htm details of the 7.0
process-suspend-hook and process-resume-hook will go away soon
Currently a programmer can set a process's process-suspend-hook and be sure that whenever
the process's execution is interrupted and another process allowed to
run, the hook will get executed. Similarly, when a process regains
control after another process has been running, its process-resume-hook, if any, will be run before
its execution continues.
Unfortunately, suspend-hooks and resume-hooks cause problems for
native thread implementations and other proposed enhancements in the
Therefore, these features will likely be removed in the next
release. If you use these features, please contact email@example.com so we can assist
you in providing alternatives when these features are removed.
Meaning of ~/ on Windows changed. This change was made with an
update released after Allegro CL 8.0 was released. Previously, the
directory ~/ (the user's home directory) was the value of the HOME
environment variable (if set) and C:\\ (if HOME was not set). In order
to make Allegro CL consistent in this respect with other Windows
programs, the value is now HOMEDRIVE/HOMEPATH (i.e. the concatenation
of the value of the HOMEDRIVE environment variable, the string "/",
and the value of the HOMEPATH environment valriable). The value of the
HOME environment variable is used if HOMEDRIVE/HOMEPATH is not
set. C:\\ is used if HOMEDRIVE/HOMEPATH and HOME are not set.
ACL_STARTUP_DEBUG support removed. Until support was removed
with a 7.0 patch, Allegro CL would examine the environment variable
ACL_STARTUP_DEBUG on startup and print startup information if it was
set. This is no longer supported.
Second (non-standard) argument to cl:sleep removed. This
optional argument to cl:sleep, which was documented as being
for internal use only, has been removed. Any code which called cl:sleep with two arguments
should be modified to call it with one argument only. Also, only
non-negative arguments are accepted by cl:sleep. Passing a negative argument
causes an error.
cl:sleep is now effectively
mp:process-sleep (with the
whostate argument hardwired to "sleeping"). In earlier releases, there
was a function excl:lisp-sleep. That function was removed in
release 7.0. See cl:sleep and minimum sleeping time in
Change to the default value of the external-format argument to
blowfish-init. The default value for the
external-format argument of blowfish-init is changed to
:utf-8 (it was
release 7.0). It is unlikely that this change will affect any
code. The argument was only added by a patch in September, 2005. The
sensible default is
:utf-8 (which is the default
for blowfish-encrypt and blowfish-decrypt) but the
behavior prior to the argument being added was to use
:default so the patch kept the same behavior. In
8.0, the more sensible default is used.
Environment name switching: the names of environments have been
changed. What was in 7.0 a :compilation environment is now a
:compiler environment and what in 7.0 was a
:compilation-walking environment is now a :compilation
environment. See environments.htm.
Environment variable name change: the variable
deprecated, and the preferred name is now
sys:*compilation-unit-environment*. The old
name does not have a value but does name a symbol-macro which causes
the new name to be used.
Environment function replaced: the function sys:make-compile-file-environment is
deprecated. Use the new sys:make-compilation-unit-environment
instead. Calls to sys:make-compile-file-environment (which took
no arguments) can be replaced with calls to sys:make-compilation-unit-environment with
no arguments. sys:make-compilation-unit-environment
accepts an optional argumen, which, when true, returns an environment
suitable for compile and when
nil (the default, returns an environment
suitable for compile-file (as
The default value of *open-rename-function* now writes file using
*default-pathname-defaults*. In earlier releases, when a file was
written because open was called for writing to an existing file with
:if-exists specified to be
:rename, the function which is the initial value of
would use the current directory to fill in missing parts of the
renamed file's directory location, rather than using
*default-pathname-defaults*, the result
could be the new file and the backup in different directories when the
different from the current directory (as returned by current-directory). In release 8.0, the
renaming function does use
*default-pathname-defaults*. This is a
non-backward-compatible change although we suspect anyone who has
noticed the behavior has written a renaming function to behave as the
new default renaming function now does. See
Revised handling of nested conditionals, new variables. The
handling of nested #+/#- conditionals has been revised. A nested
conditional is a form like
(list #+allegro :allegro #-allegro
#+foo :foo #-foo :default). Until this change, Allegro CL
would evaluate that form (assuming
:allegro is a
:foo is not) to
:default). With the change, it now follows other
implementations and returns
before the change the form
(list #+allegro :allegro #-allegro
#+foo :foo) returned
Allegro CL but errored in other implementations. It now errors in
Allegro CL as well.
The issues are complicated. There are two new variables that affect
section The issue of nested conditionals in
Allegro CL in implementation.htm
discusses nested conditionals in detail. See that section and the
descriptions of the two variables for more information.
New additional optional argument to make-random-state allows
seeding with outside random values. make-random-state has an additional
optional argument seed that allows specifying a
value to use to seed the random number generator (it is effective only
when the state optional argument is specified as
t). See cl:random and cl:make-random-state in
build-lisp-image now has a :require-search-list argument. This
argument allows specifying a value for
*require-search-list* (which instructs an
image where to look for modules). The value defaults to the value of
*require-search-list* in the running
image. See building-images.htm, where build-lisp-image is fully
Certain build-lisp-image arguments can now get default values from
environment variables. The c-heap-size, c-heap-start,
lisp-heap-size, lisp-heap-start, newspace, and oldspace keyword
arguments to build-lisp-image can get their default
values from environment variables (named
e.g. ACL_BUILD_C_HEAP_START). See Arguments to
build-lisp-image 3: defaults taken from environment
variables in building-images.htm..
Changes to the sax parser. There have been some minor changes to
the sax parser, described in sax.htm. The class
lxml-parser has new normalize and package
slots and parse-to-lxml has new normalize and class
keyword arguments. The package argument in parse-to-lxml now
defaults to the package value in the class that is the value of the
class argument. Normalizing allows an element that contains only
string content to appear as one contiguous string (at the cost of
additional consing). Finlly, the pxml-version now
:query as a value for its optional
parser-type argument: when specified, type of the enabled version of
the parse-xml operator is returned.
:nat and :unsigned-nat foreign types. This change was actually
added in release 7.0 but not previously documented. These types are
described in The
Syntax for Foreign Types in
ftype.htm. "Nat" stands for "natural" and is
intended to be the size of integer which fits into the natural word
size of the machine - 32 bits on a 32-bit lisp and 64 bits on a 64-bit
New compiler switch trust-table-case-argument-switch.
trust-table-case-argument-switch is true
when speed is 3 and safety is 0. If a case statement is suitable for
compilation to a table-driven case statement (see the description for
details), which is faster but unsafe, it will be compiled that way
when this switch is true.
New function gets the environment of Lisp. environment return a list of the
original environment when Lisp was started.
There are no entries at this time. Information may be placed here in
documentation updates after the initial Allegro CL 8.0 release.
The CLIM manual has not been updated (other than minor corrections)
for the 8.0 release. There have been no significant changes to CLIM
functionality compared to 7.0, though there have been bug fixes and
(Repeated mostly from 7.0 Release Notes.)
The documentation for CLIM is in an online PDF file, clim-ug.pdf.
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
8.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
FAQ for information on how to install Redhat Linux 7.2 without
lesstif and how to uninstall lesstif if already present. On all other
Unix platforms, CLIM uses the platform-supplied Motif.
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.
There are few significant changes to Common Graphics and the
Integrated Development Environment in 8.0 (those few are described in
Section 8.1 Significant changes in Common Graphics). Work on Common
Graphics and IDE support on Linux has progressed. Allegro CL 8.0 on
Linux includes a preliminary version of Common Graphics and the IDE
(similar to what was released for Allegro CL 7.0). Note that some
destabilization may have occurred due to reworking some pieces of code
in order to share more code with the new GTK port of Common Graphics
and the IDE for Linux/Unix.
There were many significant changes in release 7.0. Users unfamiliar
with those changes should look at the
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 8.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.5 IDE release notes and its
subsections provide information about the IDE.
New OCX control class and associated functionality
The new macro def-cg-ocx-control defines a Common Graphics
dialog-item class for one of the OLE controls that was defined by a
def-ole-linkage form. A newly-defined
control could be added to the IDE's Components Toolbar as usual by
calling add-to-component-toolbar. A couple of known
remaining problems: (1) The value of certain properties will be an
interface object, and so it is not feasible to modify the value at
this time. (2) There is not yet a way to return a value in an "in-out"
parameter of an OLE method.
Two new controls: lamp and html
New lamp widget class. The
lamp widget class implements the
lamp widget. There are a number of associated generic functions
implementing aspects of lamp functionality.
New HTML control. There is a new
html-widget dialog-item plus an
html-browser dialog for adding HTML
browsing capabilities to Common Graphics apps. It uses Microsoft's
WebBrowser OLE control, which is also used by Internet Explorer.
Unfortunately, there appears to be no way to search for text in the
All cg/ide packages are locked. This makes things more like
release 6.2 and earlier when the symbols were all defined in the cg
package, which was locked. In 7.0 there was less locking because the
child packages had been created but inadvertently not locked. This
may cause user methods that specialize on built-in classes to cause
package lock warnings or errors that did not occur in 7.0. Such an
error generally indicates that you should be specializing on your own
subclass rather than on a built-in class.
draw-curve renamed draw-bezier-curve. The new name is more
descriptive and draw-curve too easily conflicted with user function
names. See draw-bezier-curve.
- range-equality-test deprecated: the function which is the value
of range-equality-test is no longer used
by Common Graphics code. (The function was used to compare old and new
values of the range
of a dialog-item to see whether there was really a change.) on-change-test is now used
for that purpose.
save-selection-when-unfocused deprecated: the Windows code that
implemented save-selection-when-unfocused has not been supported by
Microsoft for some time. There is no practical way to implement the
nil in GTK. The default is true
(the text stays selected). Specifying it to be
nil may or may not be effective and is not
The "context menu key" (vk-applications) will now call
pop-up-shortcut-menu by default. Previous the default behavior was
to do nothing. See
Some textures are now actually bitmaps. A handful of built-in
textures are now pixmaps rather than textures. This was necessary on
GTK, but is now true on all platforms for consistency. The pixmaps
dark-gray-texture. This may
require some code changes. If you had passed the value to copy-pixels-to-stream, for example,
then you would now need to pass it to copy-to-stream instead. This entry was not
included in the originally released version of these Release
For complete information on the differences between Windows and GTK,
Common Graphics and the IDE now run on Windows and Linux with
GTK. Certain differences between the two operating systems and
windowing systems mean that some things do not work the same in
Windows as in GTK and vice versa. The functionality listed here allows
tries to handle the differences. Some of the
variables/operators/etc. only available on one of the two platforms.
The system needs to know the directory where the GTK control supplied
by Mozilla to support the
html-widget resides. (On windows, the widget is
implemented in another way.) It may not be practical to search for the
location automatically. See mozilla-library-path,
*mozilla-library-path*, and find-mozilla-gtk-path.
Event handler processes
Because Linux currently does not use native threads and Windows does,
on Windows, all windows handle events in their own thread associated
with the window while on Linux/GTK, there is one event-handling
distinguishing behavior when necessary. cg-process-wait should be used on GTK instead of
process-wait in event
handlers. See also process-pending-events-if-event-handler.
Linux has a built-in hand cursor, which is the value of
hand-cursor. That variable is
nil on windows.
:hand-cursor) works correctly on both,
Linux pixel size issues: because Linux/GTK seems not to have a
reliable notion of pixel size, the functions pixels-to-points, points-to-pixels, and font-pixel-height are provided. They work on
Windows but are usually not necessary.
Timer resolution on Linux/GTK: see
Check marks in menus: on Linux/GTK: you must specify at
creation time whether a menu-item will ever be checked. See checkable.
Modal dialogs: when displaying a modal dialog, the owner window
is usually disabled. On GTK, this make take too long.
f10 key: it requries special handling on Linux.GTK, see handle-f10.
Scroll increments: the new function scroll-increment is needed on Linux/GTK. It
works on Windows but there is essentially the same as user-scroll (which does not work on
Using the IDE parent-window: issues of mixing windows from
various applications are more complex on Linux/GTK than on
Windows. See the functions use-ide-parent-window, maximize-ide, ide-exterior, and top-ide-window, and the classes
ide-owner-window. The IDE menu item
Maximize IDE (Linux/GTK only) is related.
New variable *show-console-on-standalone-error*. The variable
(actually added in a 7.0 update) controls whether the console window
is automatically shown when an error is signaled in a standalone
Common Graphics application that was generated from a project in the
New function special-windows-directory. The function special-windows-directory determines
the paths of certain Windows directories (such as the My
New keyword argument to load-pixmap. The function load-pixmap has a new
make-unique-name keyword argument to ensure that
the function does not create a name for the pixmap (from its file
name) that is the same as the name of a cached pixmap.
on-print event handler can now be nil. The on-print property of a widget may now be set to
nil like other event-handlers, in which case
Common Graphics will default the value to princ-to-string. This avoids confusing errors
that could otherwise happen if a user assumes that this property could
be nil like other event-handlers and then CG funcalls
nil on an object to print.
transparent-pixel-value argument to generate-mask. The
transparent-pixel-value argument to generate-mask may now be
nil. When it is, it takes the value of the upper-left
pixel of the pixmap as the value to make transparent.
Multi-picture-buttons and masked pixmaps.
multi-picture-buttons now handle masked pixmaps.
Previously if a pixmap that has a mask was specified as the pixmap of
transparent area of the mask was not drawn in the
multi-picture-button's background color.
Autosizing list-views. The
list-view function auto-size will no longer truncate a column
header string if all of the strings in the body of the column are
shorter than the header string.
New tabs-are-draggable property. If you turn on the new tabs-are-draggable property of a
tab-control, and the
single-line property is also
true, then the user can rearrange the tabs within the tab-control by
dragging after clicking left on a tab. In the IDE, the Editor uses this to
allow you to change the order of the editor buffers. The Debug Window also allows
you to change the order of any additional listeners that you've
created there with the View | New Listener command.
New variable *event-loop-processes*.
*event-loop-processes* is a list of all
processes that are currently inside a call to event-loop, and which therefore can handle
New function message-box: the message-box function displays a simple message
dialog using the platform's low-level utility to do so.
Change to font-equal: the function font-equal will now return true if the family
field of one font is
nil but the other is
not. This compensates for the fact that the family field (which
typically has no effect) sometimes gets "filled in" and sometimes it
move-window-into-parent applied to top-level windows: the
function move-window-into-parent now works for top-level
The initial-name argument of
ask-user-for-new/existing-pathname. ask-user-for-existing-pathname and ask-user-for-new-pathname now accept
pathname objects as well as namestrings as values for the
Default for link-color: the link-color property defaulted to blue for a
rich-edit dialog-item but
to red for a
rich-edit-pane; now it is blue for both.
delete-command undeprecated: delete-command is now undeprecated because it
passes the command down to a descendent window (like copy-command and the others) before it calls
delete-selection. (It was
deprecated in 7.0.)
Clicking on a text-edit-pane whose parent is a child
window. Due to an apparent Windows quirk, clicking on a
text-edit-pane whose parent is a
child window did not expose the parent window. A Common Graphics
method has been added to cover for that anomaly.
draw-string-in-box obeys vertical justification when wrap-p is
now handles the case where wrap-p is true and
:bottom. The text had always been top-justified
when wrap-p is true.
grid-widget cell-box obeys vertical justification:
grid-widget check-box cells (see
obey its cell-vertical-justification method (previously
it always acted as if the value was
Bug with grid read-cell-value interacting with AllegroCache is
fixed: a bug was fixed where drawing a grid cell could break
badly if its read-cell-value
method accessed an Allegrocache slot in client-server mode. Waiting on
the socket stream for a reply had allowed further messages to be
handled, which could make a nested access to the object during
scrolling, for example. read-cell-value and write-cell-value now suppress handling further
messages until they return. An application's custom redisplay-window method could have a similar
problem, in which case it should wrap a call to mp:with-message-interrupts-disabled around the
code that does a process-wait.
sort-grid is now robust against missing widget-window: sort-grid no longer breaks if the
grid-widget has no
widget-window at the time. The
sort-column property may now
be specified with a :sort-column initarg. A
grid-column name may now be passed to sort-grid as documented, rather than
only a grid-column object.
New generic function cell-widget: a
grid-widget application may define methods on
the new generic function cell-widget to use the pre-defined cell widgets
in arbitrary cells rather than only in particular grid columns for
each type of widget.
New button-fills-cell property for
static-text-and-button-column-mixin class has a
new button-fills-cell property
that causes the button to fill the grid cell, with the text inside it.
Function that is the value of the button-function property of
static-text-and-button-column-mixin instances now takes six
arguments. If an application uses the
grid-widget columns), then the
function that is the value of the button-function property should now take two
additional arguments for the row-number and column-number (making six
arguments in all). For backward compatibility, the Common Graphics
code will still handle old functions that do not take these arguments,
but all button-function
functions now should officially accept them. So a button function
could now be defined like this:
(grid-widget data-object row column row-number column-number)
Or this alternative would work in both 8.0 and 7.0 and earlier:
(grid-widget data-object row column
&optional row-number column-number)
New function make-message-window and macro
with-message-window. make-message-window creates a window suitable
for displaying as a message window. with-message-window creates and displays such a
window while code is run.
New function import-pixmaps. The new function import-pixmaps makes it easy to convert a set of
.bmp pixmap files into lisp source code for embedding the pixmaps into
the single image file of a delivered application.
A Common Graphics window may now be larger than the screen if
desired. After creation, an application's track-limits method (if any) can constrain the
size of the window as before.
Rich-edit functionality: the functions rich-edit-get-color, rich-edit-get-font, toggle-bold, toggle-italic, toggle-underline, toggle-bullets, left-justify, center-justify, right-justify are used by
rich-edit-multipic widgets and
rich-edit-dialogs. (These were avilable but not
documented in 7.0.) Also see funcall-menu-item-with-rich-edit.
draw-to-x-y: like draw-to, draw-to-x-y draws from the current position to a
location, but the location is specified with coordinates rather than a
allows added code to be run when the mouse is moved during a drag.
New keyword argument for set-selection. set-selection has a new keyword
argumentscroll to scroll the selection into view
if needed. This entry was not included in the originally released
version of these Release Notes.
The IDE Help facility now can use an instance of the new CG
html-browser dialog, to display IDE help inside the IDE rather
than in a standalone HTML browser program using
invoke-private-html-dialog. You can return to the old behavior if
needed by setting the new use-cg-html-browser ide configuration option to
nil. In the new browser you can, for
example, select a code example and then invoke the IDE's Tools | Incremental Evaluation
command on it directly, rather than first copying the example code to
the editor. One disadvantage is that there is no string search in the
CG HTML control (because Microsoft's WebBrowser OLE control does not
appear to provide it).
New use-cg-html-browser configuration option. When the use-cg-html-browser option is
true, help is displayed in the Common Graphics
html-browser. This is more reliable and allows
using IDE menu commands directly on the help page but (because of
apparent limitations of the associated OCX widget) does not provide a
string search capability. If you try to search, you will get a dialog
that allows you to display the text in a third-party browser which
supports such searches. If you set the value to
nil, then the third party browser will be used all
Changes to the behavior of save-options-to-user-specific-file on
Windows: the function save-options-to-user-specific-file, which
allows personalized prefs.cl files (with personal options
settings) on multi-user machines, now uses Windows-specific
directories like My Documents or Personal on Windows, rather than
using the value of a HOMEDRIVE or HOMEPATH environment variable.See
also special-windows-directory which determines
the path of such directories. Also the default value of save-options-to-user-specific-file is
Trace dialog faster, can restrict function traced: the Trace Dialog displays
several times more quickly that in earlier releases. The inhibit-trace-for-object option allows
trace to be disables in the event-handler process of specified
IDE configuration option ide-html-history: ide-html-history allows saving of
previously-viewed HTML pages.
Inspector displays changed property values in a bold font. A
property value will now be displayed in a bold font in the inspector
if it is not equivalent to the programmatic default value for that
property. This highlights values that you've changed, as well as some
sample values that you probably want to change for widgets placed onto
forms. A read-only value will never be bold. A handful of properties
are never shown bold because they generally don't have meaningful
default values and are more distracting than useful when made bold;
these exceptions include the properties child-p, device, tab-position, left, top, width, height, dialog-items, and pixmap-use-handle.
The File | Save command is now implemented for the Runtime Analyzer
Results dialog. You can now save displayed analysis outline to a
text file as well as saving the history. See the description of the
Runtime Analyzer Results
dialog. There are now two buttons on that dialog: the new
Save to File and the older Save button, now renamed
Save to History.
Save command on Class Browser. The Save command is
implemented for the Class Browser outline, to save a
class hierarchy as indented text to a text file.
The Class Browser dialog now uses a multi-picture-button rather
than a tab-control. This was mostly for compatibility with the GTK
port, where the tab-control cannot have multiple rows of tabs. Though
the set of choices is the same, the new buttons display icons rather
than text, so you may need to learn which button is which by holding
the mouse cursor over the buttons until their tooltips appear.
More things can be searched backwards. Searching backward now
works in item-lists, list-views, the inspector, and the tree grapher.
(This had worked only in text windows like the IDE editor.)
Help on widget sublcasses: invoking help on a user-subclassed
widget on a form will find the help for the built-in superclass.
Help command improvements: the Help command is now included
reliably on the right-button shortcut menu of the inspector.
Shortcut menus. The shortcut menu for a form window is now
accessible on the title-bar and menu-bar, in case widgets cover the
entire form interior.
Changing the default package (in the Project Manager dialog) of
an existing project should now be less troublesome, but it is still
far better to decide on the package name when first setting up the
project (especially before creating any form windows).
Handling non-existent package in a project: if you type the
name of a non-existing package into the Project Manager dialog, it
automatically creates a package of that name. This new package had
used the excl and cl packages, even though the code that is generated
for the project does not make the project package use those packages.
That could lead to errors loading the project into a later lisp
session when the project package would no longer use those packages as
it had initially. So the project manager no longer makes the
automatically created package use those packages.
Source code colorization. Source code colorization is no longer
done in an IDE editor buffer if the buffer has been saved to a file
and the file does not have one of the common extensions for lisp
source code (.cl, .lsp, or .lisp).
open-files-in-gnu-emacs mode: when using the open-files-in-gnu-emacs mode, the IDE's Save All
command will tell emacs to save all of its unsaved buffers.
Compiling a project: when you compile the current project, if
it has multiple subprojects and the multiple subprojects all in turn
have a common subproject, then that common subproject will be compiled
only once rather than once for each subproject that has it as a
Some symbols no longer exported from cg package. A handful of
overly-short IDE symbols were exported from CG to avoid a problem with
an app using the symbols as local variables that end up in the IDE
package, which is not available in a standalone application. The
symbols are still exported from the ide package as before, and most of
them are project accessor functions that are probably rarely used by
users. The symbols are:
Optional arguments to full-compile-project: the optional
arguments of full-compile-project are now keyword arguments
to match the similar function compile-project. Usually you would use the menu
command rather than calling this function programmatically, but if you
do call the function with any of its optional arguments then you will
need to change the call to pass keyword arguments instead.
Lost IDE windows: if an IDE window gets "lost" by being moved
outside of the visible screen area (perhaps programmatically), then
the Window List dialog's Show button will move it into view (in
addition to selecting the window as usual).
Moving to the beginning of a definition in the IDE editor: in
the IDE editor, the gesture to move to the beginning of the definition
(alt-uparrow in host mode or control-alt-A in emacs mode) will now
move to the beginning of the previous definition when the text cursor
is already at the beginning of a definition. If there is no
definition that begins before the text cursor, it will move to the top
of the file. Previously it did nothing in these cases. The new
behavior emulates the similar command in emacs.
Missing project files: when there are missing project files
while opening or running a project, you will now be given the
opportunity to locate the files with the file dialog.
Missing modules in a project: when generating a standalone
application from a project, and it fails because a needed CG module
was not included, the error dialog will now mention the particular
module and offer to automatically add it and try the build again.
Names of editor buffers: it's easier to find the name of an IDE
editor buffer that you're looking for when using the editor's pop-up
menu of all buffers (control-B in the default editor mode). It now
displays the pathname-name by itself at the left, and sorts by that
name rather than by the whole pathname.
New IDE configuration option use-ide-parent-window. There's a
new configuration option to use a single parent window for the IDE,
It's on by default on GTK because owner window support is not good
there, but is NOT on by default on Windows because child windows
cannot have menu-bars in Windows, and form windows therefore will not
show their menu-bars. The new option has not been tested rigorously
on Windows, but you can change it by evaluating
(use-ide-parent-window (configuration *ide-system*)) t) in
the IDE, and then restarting the IDE.
Project package now used when a project is run. When doing a
Run Project or running a standalone application that was made
from a project, the value of
*package* will initially be the project's
default package. (This is not done, however, by Run | Run
Form because the form runs asynchronously in an existing IDE
Listener process.) Formerly the package property of a project was
used only for writing an in-package form to any new code files that the
project system generates.
Help menu now has Write a Bug Report item. The Help menu now has a
| Write a bug Report item for use when there is no backtrace
showing (the Debug Window after an error
also has a bug report button). The new menu item lets you choose any
subset of processes, to add their backtraces to the bug report.
maker-function now uses interior argument instead of exterior
argument. When a form window in a project is saved, it will now
generate the maker-function so
that it has a new interior parameter with a
default value that is equal to the form's current interior, and the
exterior parameter will no longer have a default
value. This will cause the running window to be created (by default)
with the same interior on machines or operating systems where the
title bar height or border thickness are different. This avoids, for
example, buttons at the bottom of a dialog being partly clipped off
when a generated application is run on a different machine that has a
larger title bar height. One possible drawback to this design change
would be if an application positions multiple windows that are made
from forms so that their exteriors are adjacent or spaced by a certain
amount. In that case, the application could pass the
exterior argument to the maker-function explicitly. Or it could create
each window in :shrunk state,
then move or resize it as needed once its exterior is known, and then
New navigator examples for cell-widget and windows with multiple
panes. See the Examples tab of the Navigator Dialog.
Some changes to alignment lines and snapping on forms. When
dragging a widget (or block of widgets) on a form, alignment lines and
snapping (see snap-to-components) will no longer be done
between the top of a moving widget and the bottom of a non-moving
widget, or vice versa, or between a left side and a right. Alignment
and snapping are now done only between two top sides, two bottom
sides, two left sides, or two right sides. The cases that were
removed are generally not useful and cluttered things up. Also, the
alignment lines should now reliably be drawn so that they extend to
encompass all of the widgets that are currently aligned with the
moving widget(s), rather than only some of them. Alignment lines and
snapping will also be done between a moving widget (or block of
widgets) and their former position, to make it easy to move the
widgets only horizontally or only vertically.
Allegro CL 7.0 projects should open without problem in Allegro CL
8.0. For projects from releases prior to 7.0, see the
AllegroStore is not available in Allegro CL version 8.0. Users who
wish to continue using AllegroStore should use version 7.0.
There is a new database product, AllegroCache. See
Section 6.1.2 Major new features in Allegro CL 8.0.
Major Additions or Revisions:
Added support for nillable attributes for SOAP elements. The
nillable option, when non-
nil, adds the "xsd:nillable='true'" attribute
to the element (see Element
Definition in soap.htm).
Recognize all Schema components (some Schema features are still
ignored, but will no longer signal errors).
New generic function wsdl-generate-code allows application
programmers to modify the code generated by make-client-interface and make-server-interface.
Other changes include:
There are new RPC functionality allowing users to manage multiple Lisp
images. See Running
several communicating Allegro CL images in
The re-connect keyword argument to make-rpc-client can now have the
value :connect. If specified, when a re-connect
attempt fails, the function will try a new connect. rpc-open-client is also affected since it
may use clients made by make-rpc-client.
Jlinker in ACL 8.0 adds significant new functionality.
A native Java interface allows the Lisp and Java parts
of an application to share the same address space.
Calls between Lisp and Java are comparable in speed
to foreign function calls.
Arguments in calls to Java are converted using the information in the
Java method signature. Consequently, calls to make-immediate-object are now
redundant (but harmless).
New Jlinker Native interface (JNI)
There is now JNI support in the Jlinker. The new interface is
described in the jlinker.htm and can be used
instead of the socket interface. The jlinker JNI interface depends on
the availability of the libjvm shared library in the Java
installation. We have tested the jlinker JNI interface on some of the
machine and operating system combinations where we have found a
suitable Java distribution.
The status on various platforms is as follows:
Windows: tested and working with Java 1.4.2 or later
Linux x86 - tested and working with Java 1.4.2 or later (32-bit ACL and Java).
Solaris - tested and working with Java 1.4.2 or later (32-bit ACL and Java)
Mac OS X - Native (JNI) mode is disabled.
Other UNIX - we have not located a suitable Java, hence not tested.
Change to initial value of *jlinker-error-p*: the default value
of the variable
*jlinker-error-p* is now
t. In previous versions, the default value was
The following variables and operators are defined:
jLinker documentation is in jlinker.htm.
Other jlinker changes
New keyword arguments to jlinker-init. jlinker-init has new keyword
arguments (classpath and
jar) to specify the classpath and the jlinker.jar
file location. Jlinker no longer modifies the CLASSPATH environment
On Windows, Jlinker can examine the Windows Registry to locate Java
components. In typical installations, the user does not need to
customize anything in order to use Jlinker.
No notes at this time
No significant changes to these utilities
No significant changes.
CLX (Common Lisp X) provides an interface between Common Lisp and the
X window system. All versions of Allegro CL include a compiled
version of CLX with the distribution. The fasl
file is code/clx.fasl, loaded by evaluating
(require :clx). The Allegro CL products CLIM and
Allegro Composer use CLX. Users wanting low-level access to an X
server in Lisp may also want to use CLX. CLX is not supported by
The sources to CLX are supplied with the regular Allegro CL
distributions in the contrib/clx/ directory. Note
that during installation, you are asked whether you wish to install
the contrib/ directory and the default is not to
install it. The contrib/ directory is not
included in the Trial distribution, but Trial users can download the
CLX sources from the Franz Inc. website as described next.
The sources to CLX are also available on the Franz Inc. web site (www.franz.com), at the location ftp://ftp.franz.com/pub/clx/.
No significant changes.
There were many changes in release 7.0 tightening Allegro CL's
compliance with the ANSI spec (based in large part on the work of Paul
Dietz, a user of Allegro CL who has been developing an extensive test
suite for ANSI Common Lisp). There have been a few additional changes
in 8.0, though none of significant user-visibility. Users interested
in this project should see Tightening of ANSI Conformance in Allegro
CL and its subsections in