Release Notes for Allegro CL 10.1
This document contains the following sections:1.0 Introduction
2.0 Information on changes and new stuff since the 10.1 release
2.1 Changes to the runtime analyzer made in 12/2018 and 2/2019 (10.1 only)
3.0 Fasl files are not-compatible between versions and operating systems
3.1 All pre-10.1 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 Required versions of OpenSSL needed for the :ssl module
5.2 The ARM-64 (aka ARMv8 and Aarch64) platform
5.3 macOS notes
5.3.1 Updating macOS may break X11
5.4 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 10.0 after the initial release of Allegro CL 10.0
6.2 Non-backward-compatible changes in the base Lisp
6.3 Other changes to and notes about the base Lisp
6.4 Multiprocessing and SMP release notes
6.5 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 Other changes in Common Graphics
8.3.1 Miscellaneous bug fixes in Common Graphics
8.4 IDE release notes
8.4.1 Miscellaneous bug fixes in the IDE
8.4.2 Opening projects from releases prior to 10.1
8.5 Common Graphics and the IDE on the Mac
8.6 Functionality to handle differences between Windows and GTK
8.7 Release notes for the winapi module
9.0 Release notes for AllegroServe
10.0 Release notes for The Emacs/Lisp interface
11.0 Availability of CLX for Allegro CL
12.0 Release notes for Orblink
Appendix A. ANSI Conformance in Allegro CL
This document provides the release notes for
of Allegro Common Lisp and related products. Many sections are divided
into non-backward-compatible changes (that produce different behavior
in release 10.1 compared to
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 10.0 Release Notes, included in
this distribution as the file
This document describes the changes, major and minor,
to 10.1. Please look particularly at these
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.
The following changes have been implemented by patches and/or updates
since the initial release of Allegro CL 10.1. See sys:update-allegro for
information on getting patches and updates.
This section is included in the versions 10.0 and 9.0 updated release
notes because some updates are retrofitted to those earlier
releases. Each change says whether it applies to releases prior to
New function wait-for-io-available in
but allows an application to wait for output possible on one set of
streams as well as for input availble on another set. This function is
for version 10.1 only and is not defined in version 9.0 or 10.0. The
patch for this function was released in May, 2019.
New quiet keyword argument to
build-lisp-image. build-lisp-image (and generate-executable and generate-application, which
call build-lisp-image) can
generate a great deal of output which is only of interest if there is
a problem creating the desired image. The
new quiet keyword argument, accepted by
all three functions, suppresses that output unless an error is
signaled. See building-images.htm for details of
the quiet argument.
AllegroServe documentation moved to
github. The AllegroServe
documentation is now in github rather than being part of the regular
Allegro CL documentation set. The documents
The macro with-at-most-one-form released for 10.1. The
will signal an error
if its body contains more than one form and optionally, depending on
the value of the if-null-body keyword argument,
if the body contains no forms. The purpose is to ensure
conditionalized code where only one form is supposed to be executed,
will error if two or more forms or, optionally, no forms would
execute. This macro was reported to have been released in
2018 for versions 10.0 and 10.1 but that information was
incorrect. The macro has now been released for version 10.1 only.
New process pool facility allows reusing processes multiple
times. The new process pool facility, described in
pools section in the multiprocessing.htm
document, allows setting up a pool of processes, each of which runs a
task and then remains available for a further task.
Using a pool saves the overhead of creating and
destroying process objects. This is useful when you expect to have
many short to medium tasks to be run in their own processes. This new
facility is in release 10.1 (and later) only.
Support for Allegro Composer has ended. Allegro Composer
(see composer.htm), a development environment for
Allegro CL, depends on various out of date tools (such as
no-longer-supported versions of CLX). We have determined it is no
longer possible to continue to support this product. Users on Windows,
Linux, and MacIntosh machines are urged to use the IDE
(see cgide.htm) instead.
Many supported message digest function previously undocumented. The
section MD*, SHA*, HMAC,
and other message digest support, and RC4 cypher functions
in the miscellaneous.htm document describes
supported message digest functions. Until a recent documentation
update, many digest functions were present but not documented
(including support for MD4, SHA224, SHA256, SHA384, SHA512, and
RMD160). This has been corrected. These functions exist in versions
9.0, 10.0 and 10.1.
Significant changes to the runtime analyzer [10.1 only]. A
series of patches released in December, 2018, make significant changes
to the runtime
analyzer. (See https://franz.com/support/patches/
for information on released patches.) These changes are for release
10.1 (and later) only. Releases 9.0 and 10.0 are
unchanged. See Section 2.1 Changes to the runtime analyzer made in 12/2018 and 2/2019 (10.1 only)
for more information.
More changes to net.uri:parse-uri and net.uri:render-uri and new
operators net.uri:string-to-uri and net.uri:uri-to-string. The
change listed just below has been partly reverted. net.uri:parse-uri will not decode the
characters #\+, #\= and #\& in the query field if they are percent
encoded. This is contrary to RFC 3986, but otherwise there is no way
to pass these characters as field values. The new
function net.uri:string-to-uri does no
decoding of the query field. Its inverse is the new generic function
net.uri:uri-to-string. This update applies
to all supported versions (9.0, 10.0, and 10.1).
URI and URN implementation brought up to modern standards. A
patch changes the implementation of the handling of URIs to follow
RFC3986 (which replaces the obsolete RFC2396) and RFC8141. New
accessors have been added (for IPv6 and zone-id of URIs and r-, q-, and
f-components of URNs). The URI interface is described
in uri.htm. This update applies to all supported
versions (9.0, 10.0, and 10.1).
Running Lisp with a shell script facility improved. This now
works on all platforms, including Windows (in a UNIX-like command
shell like that provided by Cygwin) and FreeBSD (prior to the recent
update, you could not run Lisp with a shell script on Windows or
FreeBSD). Other changes include using environment variables to specify
certain control arguments. See Starting using a shell script
in startup.htm. The change is for 10.1 and later
add-typep-transformer has a new re-exapnd keyword
argument. add-typep-transformer allows the compiler to
transform the form
(typep x type)
(funcall predicate x). The new argument, when
it is true and when the predicate is a symbol naming a function,
causes the transformed form to be
potentially allowing compiler macros for predicate (if such
exist) to further inline code. Thie feature is for 10.1 and later
Macro with-coverage modified to cover all functions within a
function group. The macro with-coverage reports of calls to
functions specified in a list which is the first argument of the macro
during evaluation of the body of the macro. A change introduced by a
patch means that additionally all function within a function group,
such as functions defined with flet forms, are also instrumented even
when they are not explicitly included in the function list. See
with-coverage for more
information and an example. Also, a bug where flet functions in the list could cause
purespace storage errors has been fixed. The patch is for 10.0 and
The patch for the macro with-at-most-one-form has been released for
10.1 only. In an earlier version of these release notes, we said
that the patch for the macro with-at-most-one-form
was released for versions 10.0 and 10.1. By an oversight, the patch
was not released. It now has been but for version 10.1 only. The macro
ensures that one and only one of a set of conditionalized forms
results from the evaluation of the macro's body. The case where zero
forms result is also handled.
Support added in the :ssl module for for Service Name Indication
(SNI). The value of the new
is a list of supported SSL features. In 10.1, it
:sni only. Also, acl-socket:make-ssl-client-stream
accepts a server-name keyword argument. This
feature and the variable are 10.1 only. They are not supported (and
the variable does not exist) in 9.0 and 10.0.
mplog facility. Allegro CL has had since version 10.0 a
multiprocessing logging facility which, when enabled, writes a log of
multiprocessing events which may assist in debugging multiprocessing
problems. This facility is now documented. It is already in the
product (10.0 and 10.1) and can be loaded by
There is a patch which
exports the symbol
sys::mplog. Without that patch, you need to
fully package qualify (as unexported) that symbol. All other
functionality is named by exported symbols in the mplog package.
multiprocessing logging (mplog) facility
The Lisp Base start for Windows 64-bit increased to #x200000000 in
10.1. This change (from #x100000000) was made with the initial
release of Allegro CL 10.1 but was not noted in its own release
note. (The table in Section 5.4 Heap start locations was
updated. The 64-bit SMP version on Windows already had a Lisp Base
start of #x200000000.)
prefixp generic function has a new prefix-length optional
argument. The generic function prefixp has a new optional argument
prefix-length restricts the prefix
sequence to (subseq prefix 0
prefix-length). The value
of prefix-length must
nil or a non-negative fixnum less than or
equal to the length or the prefix argument. With
nil (the default) the results are
unchanged. Modified by a patch released in April, 2018. The change is
for release 10.1 only.
New date functions calculate values of days and dates ignoring time
of day. A new suite of functions take universal time values and
calculate the number of days between them, or which happens on an
earlier or later day, or return a universal time falling on a day a
specific number of days after a given universal time, along with other
such calculations. The functions include day-difference, date=, day-number,
and so on. All are listed in the
and date calculation functions
in miscellaneous.htm. These functions
are only available in release 10.1 (and is not available in 10.0 or
New function excl:day-difference. Replaced by entry just above.
Websocket update. A subsequent patch has enhanced the Websocket
described in the section
API in miscellaneous.htm. There are two new
open-websocket have new keyword
arguments. The required argument to
open-websocket, left out of the
previous documentation, was not correctly documented.
applies to Allegro CL 10.0 and 10.1 only.
New Support for Websockets. A new module which implements the
websocket protocol specified in
RFC 6455 has been
made available as a patch to 10.1 and 10.0. It is described in the section
API in miscellaneous.htm.
applies to Allegro CL 10.0 and 10.1 only.
Installing 32-bit Allegro CL on Fedora Linux 25 and later requires
extra installation steps. See
Allegro CL to run on 64-bit Fedora 25 and later
in installation.htm for more information. This
applies to Allegro CL 9.0, 10.0, and 10.1.
New macro mp:do-periodically. The new macro mp:do-periodically alternates executing a body
of code with sleeping a specified amount of time, all within a
non-returning loop (you can break out of the loop by calling
return). While coding
such a loop is easy, a hand-coded one may cons excessively
while mp:do-periodically is
tailored to cons hardly at all. See the description
of mp:do-periodically for more
information. This change applies to releases 9.0, 10.0 and 10.1.
New :utf-8s strict external format. When this external format
is in effect, non-UTF8 characters will be filtered out, replaced by a
designated error character. Optionally, a warning or error may be
signaled when an improper character or character sequence or
associated improper octets are
encountered. See Strict
external formats which do not allow improper characters
in iacl.htm for more information. New functionality
associated with the
:utf-8s external format is
described there. This change applies to releases 10.0 and 10.1
but not to release 9.0.
Mouse wheel support for GTK. This was actually added some time
ago but the documentation was not updated. It is
now. See mouse-wheel,
With a 10.1-only patch (actually, a collection of related patches and
a new shared library) released in December, 2018 and in January, 2019,
the implementation of and the interface to the runtime analyzer have
changed significantly. Specifically, at the highest level, the new
Provides a way to manipulate analyzed profile runs using named profiles.
Allows profiles to be specified in both disassemble and
Fixes the misnamed
argument of many profiler interface functions
:current-profile is retained with a warning but
:profile is the new keyword specifying a profile.
Adds a named-profile facility, for simple identification of multiple
profile runs within the same Lisp.
Add a new display function. See prof:show-outline-profile
Use of some operators and arguments have been deprecated:
The current-profile keyword argument to
various functions has been replaced with the
new profile keyword argument. The value of
profile must be a profile object (as
returned by prof:find-named-profile) or the name of a
named profile (such as created with prof:save-named-profile). The default value
of profile is the current profile, if
there is one. Specifying
:profile :current also
indicates the current profile. The profile stored by the deprecated
macro prof:save-current-profile is not suitable as
the value of profile.
The functions which accepted
a current-profile keyword argument and
which now accept a profile keyword
The current-profile keyword argument is
still accept though using it signals a warning.
New named profile data structures and functions that manipulate them
Previously you saved the results of a profile run with the
prof:save-current-profile macro, which made the profile information
the value of a specified variable. In the revised implementation,
profile data structures can be named and then retrieved and referred
to by that name. Three function support the use of named profiles:
Either a named profile name or a named profile data structure are
suitable as values of the profile argument
to various runtime analyzer functions.
fasl files (compiled Lisp files) created by
releases of Allegro CL prior to 10.1 will not load
into Allegro CL 10.1. 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 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 10.1 uses the 10.0 installation
Installation is described in
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
See Installation sizes and supported Operating
System versions in installation.htm for a list
of supported platforms and minimal Operating System versions. Allegro
CL is tested with new OS versions as they are released (but not
pre-release or beta versions). In general, Allegro CL can be assumed
to work on newer versions, including those released after Allegro CL
10.1 itself was released.
The :ssl module, when loaded, finds the newest installed version of
OpenSSL libraries on your machine and loads
them. See Secure Socket Layer
(SSL) in socket.htm for information on
how OpenSSL libraries are found and loaded.
If you load foreign libraries which themselves use OpenSSL, either in
a development image or in a delivery (application) image, those
libraries must be compatible with the version of OpenSSL used by the
:ssl module. If they are not, the :ssl module cannot be used.
The current supported version of OpenSSL is 1.0.1. We understand there
are plans to end support for version 1.0.1 on December 31, 2016. By
that time, support for version 1.0.2 will be available.
Allegro CL is now available on the ARM-64 platform under some linux
implementations. The ARM-64 is also called the ARM64, the ARMv8, and
The ARM-64 processor
(see the Wikipedia
and the designer
website here) is
a RISC processor particularly suited to smaller devices.
Only 64-bit Allegro CL runs on the ARM-64, with SMP and non-SMP
versions (there is no 32-bit Lisp on the ARM-64). Common Graphics and
the IDE (see cgide.htm) are supported in the
non-SMP ARM-64 version.
Installation on the ARM-64 is similar to installation on other Linux
platforms. See installation.htm. See
the Installation sizes and supported Operating
System versions in that document for information on minimal
operating system versions needed by Allegro CL.
Allegro CL 10.1 is only supported on macOS version 10.11 or later.
It is not supported on versions 10.10 or
Common Graphics and the IDE are now supported on macOS but are not
supported on the SMP version on the Mac.
See Section 8.5 Common Graphics and the IDE on the Mac for more
information. Both the IDE and CLIM require certain tools (X11, GTK,
Open Motif) which may have to be installed
separately. See Installation on macOS
in installation.htm for details.
The Runtime Analyzer (see runtime-analyzer.htm)
does not work properly on the 64-bit macOS port (there is no
problem on the 32-bit port).
Building shared libraries on macOS
shared libraries on macOS 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.
We have had reports that updating macOS may cause X11 to be stop
working properly. The symptom is blank rectangles in Common Graphics
applications (including Gruff). X11 is necessary for the IDE, CLIM,
and Allegro Composer. To fix the problem, install the latest version
from http://xquartz.macosforge.org/landing/) after
updating the macOS.
When building large new images, it is often useful to specify Lisp
heap and ACLmalloc heap start locations. See the discussion of the
aclmalloc-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 10.1 as delivered.
Values are Hexadecimal integers.
|ARM 64-bit SMP
|FreeBSD 64-bit SMP
|Linux (x86) 32-bit
|Linux (x86) 32-bit SMP
|Linux (AMD64) 64-bit
|Linux (AMD64) 64-bit SMP
|macOS 64-bit SMP
|Windows 32-bit SMP
|Windows 64-bit SMP
|Solaris (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).
Version 10.1 is a maintenance release of Allegro CL. It contains bug
fixes and optimizations and other improvements but does not have major
There is now support for the ARM
processor. See Section 5.2 The ARM-64 (aka ARMv8 and Aarch64) platform for more
Other new features
Improved support for UTF-16 characters. A number of functions
associated with UTF-16 characters have been
added. See Appendix 1: Operators,
Symbols, Variables Documentation
in iacl.htm for links to the new functionality.
Support for the GB18030 external-format. See the list of
external formats and the table notes in the
External-Format Types in iacl.htm for
The following items were included by patches in Allegro CL 10.0 (and
some in earlier releases of Allegro CL) after the release of 10.0 and
therefore were not in the original 10.0 documentation. All are part of
10.1 and the 10.1 documentation. Some changes to 10.1 may also be
backported to 10.0 and/or 9.0, and thus added to the release notes for
those products, but those changes are documented in other sections of
sys:lispval-storage-type has new :stack-allocated
type. Objects which reside on the stack are identified
Note that on a non-os-threads Lisp the value may be seen
:stack-allocated even if it is outside of the
stack it resides and should have been
OpenSSL libraries must be installed in order to use OpenSSL in
socket communication. Except on Windows, prior to a patch released
in June, 2016, Allegro CL included the necessary OpenSSL libraries
with its SSL module. This meant that users did not have to obtain
those libraries themselves but it also meant that users could not use
the latest OpenSSL version until the Allegro CL module was
updated. (Note that not all Allegro CL versions support SSL.) With the
patch released in June, 2016, this has changed. OpenSSL libraries
must be installed on all platforms. These will be linked to when the
Allegro CL SSL module is loaded. An error will be signaled if the
needed OpenSSL library files cannot be
found. See Secure Socket Layer
(SSL) in socket.htm for more infrmation
on the new scheme. Note that some operating systems include OpenSSL
libraries with their standard OS updates. On those platforms (which
include the Mac and some versions of Linux), Allegro CL users will
likely have to take no action: the OpenSSL libraries will be found in
the standard location for the platform. Also, as said above, there is
no change in Windows, where users have always downloaded the OpenSSL
library files, other than the change to the API described
in Secure Socket Layer
(SSL) in socket.htm.
Some compiler switches obsolete. The compiler
are no longer used. The variables still exist and can be set (so
existing code will not beak) but the values are ignored. Peephole
optimizations are now always done during compilation and arguments are
always saved. It was determined that any possible savings were too
small to be worth doing. This change was made in the initial 9.0
release but was not properly documented.
New types keyword argument to dbi:run-prepared-sql. This new
argument to dbi:run-prepared-sql allows specifying
the return type.
New EC2 implementation: an updated interface to the Amazon
Elastic Compute Cloud (EC2) has been released in a patch dated
November 4, 2014. The API version support is moved to version 2014-09-01.
See ec2.htm for further information.
A new for-as-in-sequence subclause for the loop
macro. The loop
macro now supports a
which iterates over a list or a simple, general vector. Existing
(standard) subclauses include
for-as-across (for vector) and this new subclause
combines them, as so allows the sequence operated on to be a list or a
simple vector at runtime. See cl:loop and the for-as-in-sequence subclause for looping over sequences
in implementation.htm. This new subclause was added
in a patch in May, 2014.
New universal date parser. New functions
convert strings denoting times in various standard formats to
universal times and universal times to strings in various
formats. Converting durations to strings is also supported. This is
not part of the date-time module described
in date-time.htm but since the functionality is
related, the General
date to universal time parsers section in that document
describes the new facility. These functions were added in a patch
released in May, 2014.
jLinker update: a patch released in April, 2014 made a number
of changes to the jLinker module. There are now several calling
models, including a new calling style where Lisp functions are
generated by analyzing Java jar files or classes. The names of the
Lisp functions are systematically derived from the Java names and
mimic the overloading style used in Java; in most cases, the Lisp name
is easily deduced from the Java name so that perusing a translation
table is rarely needed. The correct Java method to call is determined
at run time by comparing the Lisp argument types to Java
signatures. See Calling Style from Lisp to Java
Major update to SSL socket module. (This change is not related
to the Heartbleed problem described in the next item.) The interface
to SSL sockets has been upgraded. SSL contexts, re-usable objects
which contain configuration values for SSL server and client streams,
are now supported. Contexts are created with
make-ssl-client-context. make-ssl-server-stream and
now have context keyword arguments which take an
SSL context as a value. Also, the default value for
the method argument to make-ssl-server-stream and
:tlsv1+. These modifications were added in a patch
released in April, 2014.
Fix for OpenSSL Heartbleed bug available. The OpenSSL
requires new library files and application rebuilds. See
Corner Article at
instructions. Users are strongly recommended to apply this fix.
The list value of *global-gc-behavior* should not be used in an SMP
Lisp. The variable
*global-gc-behavior* controls when and how
often global garbage collections happen. On possible value for this
variable is a list of a positive integer (specifying a number of
seconds), and a real greater than or equal to 1.0 (and optionally a
boolean specifying verbosity). This value is designed to trigger
global gc's after a specified amount of idle time. But idle time is
ill-defined in an SMP Lisp. The list value for
*global-gc-behavior* uses sys:funcall-after-idle-timeout, which, as
the next item notes, should not be used in SMP Lisps.
sys:funcall-after-idle-timeout should not be used in an SMP
Lisp. In an SMP Lisp, idle time is ill-defined. The function
sys:funcall-after-idle-timeout, which calls
a function after a specified idle time, should not be used.
Documentation for load-compiled corrected. The function
load-compiled, when first
implemented, compiled a file but did not write a fasl file. That was
changed some time ago so load-compiled is a roughly equivalent to
the :cload top-level command
(compiling and loading file). The documentation has been corrected.
Enhancement to net.post-office:send-letter. The first argument
to net.post-office:send-letter, the
server specification, can now specify an alternate transport
mechanism, instead of the usual SMTP network
protocol. See net.post-office:send-letter for
details. The patch implementing this cahange was released in early
Some MySQL changes. A
new client-flags keyword argument
to connect was added to
8.2 in a patch but was not documented in either the 8.2 or 9.0
documentation until now. A patch released in early August, 2013,
modified the behavior of the host keyword
argument to connect,
which can now be a list. insert-db now has
an on-dup-keys keyword argument improves handling
when the insert tries to insert a row with the same values in key
columns as an existing row. Also, some support for stored procedures
has been added. See
MySQL and stored procedures in mysql.htm.
A patch released in late Jult, 2013 implements a major jLinker
upgrade. A major patch release of jlinker (version 7.1) adds
several new features. The patch consists of Lisp code in a new fasl
file and Java code in a new jar file. New features include connection
pooling, better socket handling, and improved error hierarchy. A
number of functions have been modified, but all modifications are
backward compatible. See jlinker.htm for a complete
discussion of the patch. The patch is for version 9.0 only. It does
not apply to earlier releases.
New regexp patch fixes some replace-re behavior and enhances
match-re. A bug in replace-re caused handling of BOS and EOS
markers incorrectly. So
(replace-re "abc abc bc" "^abc\\s+"
"_") would return "__bc" rather than "_abc
(replace-re "abc def " "def$" "_" :end
7) would return "abc _ " rather than "abc def ". This has
been fixed and the correct values are now returned. As part of the
change, match-re has
additional keyword arguments start-unbounded and
end-unbounded. The behavior of match-re is unchanged if the new arguments are
Better control over proxies in Aserve. If you allow proxies in
AllegroServe, you may open a security hole. Proxies, which before were
general, can now be restruicted to specific machines using the new
proxy-control object, if desired. See the Proxy section of
the the AllegroServe documentation
The profiler may now be included in runtime images (except those
created by Allegro Express).
New jlinker-init keyword argument: :end-function. The value of
the end-function keyword argument
to jlinker-init should be
a function called when a jlinker connection is terminated. The
function gets a single argument, the jlinker connection
instance. Added by a pacth released May 1, 2013.
All nicknames removed for the excl package. This was done when
9.0 was released but we neglected to document it. The nicknames
stream. In fact, it is illegal for a package
nickname to be the package name (so excl was removed). The other two
names (which were added when the symbols in those packages were merged
into the excl package) were removed so that they would not appear as
qualifiers to excl symbols when
excl:*print-nickname* is true. This is a
backward incompatible change. Users who depend on stream or franz
as nicknames can add them back using rename-package if desired. This item is
repeated below in Section 6.2 Non-backward-compatible changes in the base Lisp.
regexp patch fixes some bugs, changes split-re behavior. WARNING:
some changes result in changed behavior (nil might be returned instead
of (""); some forms no longer signal errors).. A patch released in
February, 2013 fixes some regexp bugs and changes the behavior
of split-re to match PERL
behavior. split-re now has a
limit keyword argument; it not longer errors when
the regexp argument matches the empty string; and
trailing empty fields are removed. See regexp.htm
and also the description of split-re, where we have examples of the
New ability to dump virtual images on Windows.
See Virtual dumplisp:
for very large images and pseudo-forks on Windows
We have revised the regexp.htm and have removed the
discussion of the older regexp module (which is still
maintained for backward compatibility, and individual functions are
still documented in the operators pages)). All new code should use the
regexp2 module described in regexp.htm.
text-line does not work on file streams. The
common-graphics:text-line function only
multi-line-editable-text widgets. It
does not work on file streams. The documentation has been updated to
make that clear.
The following changes result in different behavior in Lisp compared to
build-lisp-image arguments :c-heap-start and :c-heap-size are no
longer supported. These arguments to build-lisp-image and
replaced some time ago
with aclmalloc-heap-start and
acl-malloc-heap-size but were still
accepted (with a warning) for several releases. They have now been
removed and should not be
used. Use :acl-malloc-heap-start
and :acl-malloc-heap-size instead.
The macro excl:atomic-read-modify-write no longer
supported. The macro was never documented and has now been
sys:resize-areas warns when :old argument is unspecified.
signal a warning when no value is given for
the old keyword
argument. old defaults to 0, meaning there
will be as little free space as possible in the old area after the
function returns. That is rarely what is desired. If that is what you
want, specify a value of 0 to avoid the warning.
:redhat10 is no longer on *features* on Linux versions.
Listed are other changes to and notes about Allegro CL.
vcredist_*.exe executables copied to application directory on Windows.
Allegro CL applications on Windows may need to run
vcredist_x86.exe or vcredist_x64.exe during
installation in order to work properly. The generate-application program now copies the
appropriate one of these files to the application's destination
directory. See the Windows specific information section
in delivery.htm for more information.
New function nice-signal-name. nice-signal-name takes a signal number (an
integer) as its argument and returns a string which is a meaningful
and easy to interpret description of the associated
nil is returned when the signal
number is unknown. The function strsignal (which is the name of
the UNIX library function that does the same thing) is a synonym
of nice-signal-name. Both
work on all platforms. This function is available with a patch in
Allegro CL 10.0.
New variable *script-name*. The
*script-name* is bound to the name of
the script file being run when Allegro CL is being executed by a UNIX
script file. See Starting on UNIX using a shell
script in startup.htm for more
information on running Lisp using a script on Unix.
On Windows, starting Allegro CL causes the PATH environment
variable to include the Allegro CL directory. PATH is modified
because loading DLLs on Windows from the directory in which the
Allegro CL executable otherwise will not
work. See What
Lisp does when it starts up in startup.htm
for information on the startup sequence.
sys:with-command-line-arguments does nothing when the
:command-line-arguments argument is specified nil. When the
:command-line-arguments argument to
unspecified, its value is replaced with the actual command-line
arguments used to start Lisp. If, however, its value is
nil, it is assumed you want
the sys:with-command-line-arguments form to do
nothing, and that is what now happens.
New variable *unicode-version*. The
*unicode-version* is bound to a string
containing the version number for the Unicode Character Database used
to build the Allegro CL character name table and collation rules.
script keyword argument to compile-file allows compilation of UNIX
scripts. compile-file (whose implementation in
Allegro CL is described
an additional script keyword argument
which, when true (the default) allows the initial lines which start
#! to be ignored by the compiler, so that Lisp
code after those initial lines can be
compiled. See compile-file
in compiling.htm for more information.
print-type-counts prints information about open and closed old
areas. print-type-counts prints information
about Lisp objects in the heap. It has always printed information
about old areas. Now information about just open old areas and just
closed old areas (those that are and are not gc'ed during a global gc)
can be requested.
sniff-for-unicode has new return-bom keyword argument. If
nil, sniff-for-unicode returns a third value with
information on BOMs (Byte Order Markers) in the argument stream.
Unicode external formats handles
:unicode external-format detects BOMS
for UTF-8 UTF-16BE and UTF-16LE. The
external-format is like
:unicode, but input is
assumed big-endian if no BOM is
:unicode-le external-format is like
:unicode, but output is always little-endian with
BOM. See The unicode
and fat External-Format Types; the unicode BOM
is iacl.htm for more information.
sys:lispval-storage-type has new :pure type and new function
sys:purep exists as a predicate.. Objects which are stored in pure
space, and are thus read-only and shareable, will have this storage
type returned by
sys:lispval-storage-type. See pll-file (and links from there) and
information on memory management using cl:room
in gc.htm for more information on pure space. The
new function sys:purep
returns true when applied to objects which reside in pure space.
New generic function mp:process-sequence returns unique process
id. The default method for the generic function mp:process-sequence returns an integer
identifier unique to the argument process. This identifier can be used
in various places, in particular in many top-level commands that take
processes as arguments. This value is displayed in the output of the
:processes top-level command.
Top-level commands dealing with processes can take a process
sequence number as arguments. The new generic
returns an integer identifier of a process. This value can be passed
as the process argument to top-level command
and :kill. See
processing for :processes, :focus, :arrest, :unarrest and
:kill in top-level.htm for more
Top-level commands dealing with processes have their argument
processing regularized. The commands are
New on-error argument to map-over-directory. map-over-directory now has
an on-error keyword argument which
specifies what it should do when it encounters an unreadable
directory. When this argument has its default
:ignore, the unreadable directory is skipped
without notice. The skipping without notice behavior is what was done
in earlier releases so the default behavior has not changed. When
on-error has any other value, calling programs
will see the errors that occur from accessing unreadable directories.
MOP class redefinitions and SMP. An application that updates a
class definition while it is running should be designed to ensure that
none of the objects are accessed, even for generic-function dispatch,
until the redefinition is complete. A new section in smp.htm makes
New arguments to build-lisp-image: initial-oldspace and
initial-newspace. Two new argument to build-lisp-image (actually described
are :initial-newspace and :initial-oldspace. They
specify the sizes of newspace and oldspace when an image is first
created at the start of building a final
image. initial-newspace is rarely important and
is included for completeness and rare
cases. But initial-oldspace can be important. If
the final built image has too many oldspaces, global gc's can take
longer and compressing them (with sys:resize-areas) can be difficult. If you
notice that the final image has many oldspaces, try a larger value for
initial-oldspace to reduce that number. Like
other size arguments to build-lisp-image, these argument value can be
specified with environment variables, ACL_BUILD_INITIAL_NEWSPACE and
ACL_BUILD_INITIAL_OLDSPACE. If these environment variables have
values, they override values specified in the call
Sizes in build-lisp-image argument can be specified with strings
ending in #\g or #\G to indicate gigabytes. Various arguments
which specify sizes in calls to build-lisp-image (actually described
in building-images.htm), such a
:lisp-heap-start, etc. #\k and #\m (and their
uppercase analogs) have been accepted for some time to mean kilobytes
and megabytes. See Table Note 3: specifying starts and sizes
for heaps and old and new space
in building-images.htm for more information.
:regexp2 added to modules loaded by develenv.cl and :regexp
removed. develenv.cl is a file with require statments for modules which are useful
to include in Allegro CL development and delivery images. See
runtime application in runtime.htm. This
file used to include the
:regexp module. That has
now been replaced with the
:regexp2 module. The
:regexp2 module is described
SIGPIPE signals are not handled. See add-signal-handler if you want a signal
Applications are built in application mode. When an Allegro CL
application is built with generate-application, generate-executable, or using the project
system in the IDE, the image will be built in application
mode. In this mode, certain variables have different initial
values and signal handling is different (particularly with respect to
messages reporting signals). See Application mode
in delivery.htm for more information.
New multiprocessing macro with-locked-queue. mp:with-locked-queue macro has been added to
facilitate specializing enqueue and dequeue methods for subclasses
mp:queue. (This macro
was also added as a patch to version 10.0.)
New function gcpath:find-gcpath and new macro
gcpath:find-gcpath and gcpath:collected-newstuff,
both documented in Functions for finding gc
paths and new objects in gc.htm, allow
for finding a path of object references that shows why an object is
not garbage and for determining what non-transient objects are created
by evaluating a form.
The special operator named-annotated-function documented. The
special-operator named-function was incorrectly labeled
a macro in earlier releases. The special operator
named-annotated-function was not
documented (although it existed) and now is.
Allegro CL 32-bit distributions including Express contain a script
which installs Ubuntu 32-bit libraries.. The 32-bit ACL
distributions, Express included, now contain a
script, ubuntu32.sh, which will install 32-bit Ubuntu libraries
(which are not included with Ubuntu distributions, see
Allegro CL to run on 64-bit Ubuntu).
The following are multiprocessing and SMP-related changes.
An SMP Lisp will fail if there is a thread which prevents garbage
collections. In an SMP Lisp, code that runs atomically, with
interrupt checks optimized out, could block the gc indefinitely. This
represents a bug in the Lisp program that cannot be debugged in Lisp.
When the garbage collector recognizes such a situation, it will print
some diagnostic information and kill the entire Lisp process. A
message will say which process(es) are blocking gc's.
New with-virtual-timeout macro. The new mp:with-virtual-timeout macro is similar
to sys:with-timeout except
only non-gc cpu time is counted toward the timeout, not real time. In
an SMP Lisp, time can be further resticted to a single thread.
New macro memtrace-def allows definition of memtrace
defines the wrapper but does not perform any fwrap operations. This
allows memtrace to be used
in runtime code.
There are no entries at this time. Information may be placed here in
documentation updates after the initial Allegro CL 10.1 release.
The CLIM manual has not been updated (other than minor corrections)
for the 10.1 release. There have been no significant changes to CLIM
functionality compared to 10.0.
Common Graphics and the IDE are supported on Windows SMP Lisp but
are not supported in SMP Lisps on the Mac and Linux. They are
supported in the non-SMP Lisps on Windows, Linux, and the Mac.
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
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).
The section Section 8.4 IDE release notes and its
subsections provide information about the IDE.
Most changes to Common Graphics in Allegro CL 10.1 are bug fixes and
incremental improvements. There is also the following change which
assists in identifying the causes of compiler warnings.
New tools for identifying code that causes compiler warnings.
The dialog that shows compilation warnings has a new button for
showing one of the functions that has warnings in the editor. And
when source debugging information was compiled in (see the compiler
can select an individual warning and then the form inside the function
that triggered the warning will be selected in the editor. Also, when
a runtime error is signaled for a call in a function whose source code
location is known, the restarts dialog will include a restart for
showing the calling function in the editor, and it will also select
the form for the erroring call if source debug info is present.
Here is an example of the pop-up window followed by a picture of the
editor. There are two functions whose compilation signaled warnings,
the first because the argument was unused and the other (the third
definition) because an unbound, undeclared variable (y) is used.
There are no non-backward compatible changes in release 10.1.
New arguments to add-toolbar and remove-toolbar. Additional
optional arguments to add-toolbar and remove-toolbar control whether existing
toolbars and child-windows are rezied (for
add-toolbar) and existing child-windows are resized (for
arguments have in fact been present for several releases but not
documented until now.
New function monitor-info. The function monitor-info returns information about
all the monitors that are present. This function returns a list whose
length is the number of monitors. For Common Graphics on GTK, the
list elements are each a single-element list containing a box
specifting the coordinate range of the monitor. On Windows, the list
elements are four element lists with the same first element and
additional information in the remaining elements.
The clipboard on Windows can contain items at custom
locations. See clipboard-object for a discussion of clipboard
locations passed as the value of
the (required) clipboard-format
argument. Examples show how such items can be accessed by the Lisp
application that posted them and by other Lisp applications.
On the Mac, the Common Graphics "Alt" is now the Mac's Option/Alt key
rather than the Command key as before. This is more consistent with
other applications, and reduces conflicts with global Mac keyboard
shortcuts that use the Command key. If you needed to revert to the
old behavior, you could do so by setting the internal global
nil, though we hope that that is not
On the Mac, the Command key (sometimes along with the
Option key) can now be used with the arrow keys to scroll by pages and
to move to the start and end. This applies to the text-editing
control as well as to widgets that are implemented in Common Graphics
(rather than supplied by the underlying windowing system). This takes
the place of the PageUp/PageDown/Home/End keys found on other
platforms, when not using something like Emacs that provides the
Fixed: The function fill-circle drew in the wrong place when
*antialiasing* is true
and the window is scrolled.
Fixed: Drawing with a fill-texture did not align textures properly
when the window is scrolled.
Fixed: Keypresses on non-English keyboards that produced
multi-byte characters were not handled correctly by Common
Graphics. (Patched for 10.0.)
Fixed: Common Graphics reversed the behavior of the
commands on the Microsoft Windows right-click pop-up menu on a window
scrollbar to scroll to either the top or the bottom of the window.
(Patched for 10.0.)
The file dialog on Windows could crash when no
:default-extension argument is passed. (Patched in 10.0.)
stream-origin failed within
grid-widgets, keystrokes such as Alt-O to invoke
the "OK" default-button still work while editing text in a grid
hangs could occur when dragging a grid row or column past the end of
its section to cause the section to auto-scroll, especially for a
larger grid that's drawing lots of stuff.
when the edit-start-trigger of a grid cell is
:get-focus, the text editing will begin whenever
the cell gets the keyboard focus, including when selecting the dialog
that the grid-widget is on or alt-tabbing back to the application.
Previously it required tabbing to the cell or pressing the Enter key.
Fixed: on Linux and Mac, configuring a second monitor to
the left of the primary monitor led to improper placement of IDE
windows as well as modal dialogs in applications.
Fixed: programmatically moving a top-level window on the
Mac to a different monitor left the window invisible in the Mac's
default mode where it uses a separate "space" for each monitor. You
will probably still need to turn off that Mission Control option if
you want to turn off the IDE's option to use a single parent window
and then place different IDE windows on different monitors, because
the separate IDE windows are still on a single owner window. Leaving
the IDE on a secondary monitor and unplugging that monitor and
plugging it back in could still leave the IDE invisible as well unless
you turn off that Mission Control option.
Fixed: In generated Common Graphics applications on Mac and Linux,
using the macro in-cg-process could lead to severe
failure due to accidentally causing multiple lisp processes to handle
events from the single GTK event queue.
Fixed: on Windows, if
*antialiasing* is true then the
functions draw-to and
draw-to-x-y did not
update the current drawing position.
Fixed: on Linux and Mac, the functions
ask-user-for-new-pathname broke if the
:initial-directory argument is the root directory.
Fixed: on Windows, clipboard-object can now write and read
back text from multiple "locations" on the system clipboard.
Fixed: sometimes a fill-texture could simply stop being
drawn when using it to fill areas.
The IDE is supported on the Windows SMP Lisp. It is not supported in
the Mac or Linux SMP versions of Allegro CL 10.1. It is supported in
the non-SMP version of those platforms.
The non-SMP version runs on one hardware processor at a time, and
corresponds to earlier versions of Allegro CL.
New option show-quick-symbol-info-on-space. The option
ide:show-quick-symbol-info-on-space, if enabled
(as it is by default) will display information about a symbol in the
status bar when a space is typed after a symbol name in the listener
or in an editor buffer. This option may interfere with some input
methods that use multiple keystrokes for typing some characters, if
one of the keys in such a sequence is the spacebar. If this happens,
you can turn this option off, as described on the documentation page,
to avoid the problem.
New option find-in-files-search-subprojects-later. The option
specifies the initial value of the Search Subprojects Later
checkbox on the Find In Files dialog. The value
is remembered in the options file so it will be the same in the next
invocation of the IDE.
New option use-ide-debugger-on-all-processes: the
configuration option controls controls whether the IDE's debugger will
be used for all non-IDE processes when they signal errors, rather than
using the base Lisp's debugger.
The trace dialog now shows elapsed time for each traced call.
See the Trace
Moving the mouse over a local variable in the stepper's definition
pane shows the current variable value. See
Fixed: On the Windows platform, invoking the user's
preferred third-party web browser for IDE help failed if Internet
Explorer has been explicitly disabled. This includes showing Franz
news when the Express version starts up.
Fixed: The Processes dialog could fail to show some
processes in an SMP lisp, due to unpardonably sorting the global
list. (Patched for 10.0).
Fixed: In the runtime analyzer results dialog, keyboard
shortcuts that were intended only for the main outline tab could break
when used on other tabs. The shortcuts also prevented typing some
characters to move to list items that begin with those characters.
Fixed: When using the incremental-search option in the
IDE's editor, and the warn-on-no-action-taken option is also on,
then a warning dialog awkwardly appeared while typing the search string
when there is no match for a further typed character. The font in the
small window for the search string is now a fixed-width font as well.
Fixed: On Linux and Mac, the IDE's source code editor
sometimes did not read in the correct package, and so compilation of
individual definitions failed.
Allegro CL 10.0 projects should open without problem in Allegro CL
Common Graphics and the IDE and available on the Mac but only on the
non-SMP Lisp. You must run X11 (it is in the /Applications
directory and comes with recent versions of macOS and is usually
installed by default on 10.1, but see Installation on macOS
in installation.htm for full details). Usage is
like that on Linux. See cgide.htm for details.
These are known problems using CG and the IDE on the Mac:
Parenthesis-matching marks are drawn on pop-up windows. They
cannot be drawn directly on a lisp-edit-pane, so instead a pop-up
window (which otherwise looks like it is drawn directly on the pane)
is displayed. See
which must be set to true, as it is initially on macOS, and
For complete information on the differences between Windows and GTK,
This section is repeated from the 10.0 release notes.
Common Graphics and the IDE 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
tries to handle the differences. Some of the
variables/operators/etc. are only available on one of the two platforms.
Known bug with menu-items and buttons
GTK Only: all-black menu-items and half-black buttons. There
is still a mystery on the GTK platform where all button widgets can
turn half black along a diagonal line, and all menu-items on some
platforms will be totally black. This seems to happen only when
opening a project from the Startup Action dialog, though, so a
workaround is to not reopen a project from that dialog and instead to
use the Recent menu
or File | Open Project just afterward. We
have tracked the problem down to the use of transparent-pane windows
such as the frame-child of a form window, but beyond that it is a
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.
The with-message-window window
is now a frameless-topmost-p
window on the GTK platforms to avoid problems that it had otherwise.
This means that deselecting the owner window will close the message
window, and so it may be a good idea to display the message in an
additional place such as a status bar.
The winapi module contains certain functions, in the windows package,
that perform OS-related tasks. See The Windows API and a Windows API program with
windows but without CG in cgide.htm for
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 (franz.com), at the location ftp://ftp.franz.com/pub/clx/.
No significant changes.
We discuss ANSI conformance in Conformance with the ANSI specification
in implementation.htm. Elsewhere in
implementation.htm we discuss specifics of our
implementation of certain Common Lisp functionality.