Release Notes for Allegro CL 9.0
This document contains the following sections:
1.0 Introduction
2.0 Information on changes and new stuff since the 10.1 release
3.0 Information on changes and new stuff since the 9.0 release
4.0 Fasl files are not-compatible between versions and operating systems
4.1 All pre-9.0 Lisp compiled files must be recompiled (old fasl files will not load)
4.2 Fasl files may be incompatible in different Lisps on same hardware
5.0 Release Notes for installation
6.0 Release notes for specific platforms
6.1 Required versions of OpenSSL needed for the :ssl module
6.2 macOS notes
6.2.1 Allegro CL must be updated to work with macOS 10.10
6.2.2 Installing Mavericks OS (macOS 10.9) may break X11
6.2.3 Installing Mountain Lion OS (macOS 10.8) may uninstall X11
6.3 Heap start locations
7.0 Release Notes for the base Lisp
7.1 New features in the base Lisp
7.1.1 Features added to Allegro CL 8.2 after the initial release of Allegro CL 8.2
7.2 Non-backward-compatible changes in the base Lisp
7.2.1 New features in Allegro CL 9.0
7.3 Other changes to and notes about the base Lisp
7.4 Multiprocessing and SMP release notes
7.5 Base Lisp platform-specific information
8.0 Release Notes for CLIM
9.0 Release Notes for Common Graphics and the IDE
9.1 Common Graphics and the IDE on the Mac
9.2 Significant changes in Common Graphics
9.3 Non-backward-compatible changes in Common Graphics
9.4 Other changes in Common Graphics
9.5 IDE release notes
9.5.1 Opening projects from releases prior to 9.0
9.6 Functionality to handle differences between Windows and GTK
9.7 Release notes for the winapi module
10.0 Release notes for AllegroServe
11.0 Release notes for The Emacs/Lisp interface
12.0 Availability of CLX for Allegro CL
13.0 Release notes for Orblink
Appendix A. ANSI Conformance in Allegro CL
This document provides the release notes for
release 9.0
of Allegro Common Lisp and related products. Many sections are divided
into non-backward-compatible changes (that produce different behavior
in release 9.0 compared to
release
8.2)
and changes
unrelated to backward-compatibility. Note that a bug fix is not
considered a backward-incompatible change even if it does result in
changed behavior because the previous behavior was erroneous.
You may wish to look at the 8.2 Release Notes, included in
this distribution as the file
version-82-release-notes.htm.
This document describes the changes, major and minor,
from 8.2
to 9.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.
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
version 10.1.
-
Allegro CL 10.1 now supports SSL 1.1. You may now load either
SSL 1.0 or 1.1 into Allegro CL 10.1. See Secure Socket Layer (SSL)
in socket.htm for more information. Allegro CL 9.0
and 10.0 only support SSL 1.0.
-
The Allegro CL FAQ has moved to a new location. The FAQ is now
found at
https://github.com/franzinc/cl-faq/. The previous
location https://franz.com/support/faq/ now simply contains a
link to the new location. Links within the documentation are being
updated but some may still point to the old location. As part of the
move, obsolete items (references to old OS's and expired Allegro CL
versions, for example) have been removed.
-
The buffer argument to make-buffer-input-stream and
with-input-from-buffer can be an aligned pointer (10.1 only). An
aligned pointer is a fixnum which is interpreted as a machine integer,
as described in Aligned Pointers and the :aligned
type in
ftype.htm. The buffer
argument to
make-buffer-input-stream and
with-input-from-buffer is
usually a vector but can also be an aligned pointer so data can be
read from C space. This change added by a patch released in July, 2019
and is for 10.1 and later only.
-
New fixed index feature for class slots (10.1 only). A new
feature added to Allegro CL 10.1 is the ability to specify the index
which the value of a slot will have in an instance's slot values
vector. When an instance of a class is created, it is provided a
vector of slot values. Generally, which slot value is at which index
in that vector cannot be easily determined and subsequent changes to
classes may result in the index changing. A new slot option,
excl:fixed-index (note: a symbol in the excl package, not in the
keyword package) can be used to specify the index of a slot in the
vector. That index is then fixed regardless of subsequect class
changes. (Conflicting indices cause errors when an attempt is made to
create an instance.) Knowing the index allows significant optimization
of slot accesses. This change added by
a patch released in July, 2019 and is for 10.1 and later only.
-
New embellisher metaclass allows adding code to the class definition
(10.1 only). Because defclass forms are macroexpanded when seen but
macroexpanded code is usually executed later when the class is actually
defined, it is difficult to add code to execute along with the
macroexpanded defclass code. A new feature in Allegro CL (10.1
and later only) defines the
defclass-embellisher-class
metaclass. Subclasses of this metaclass will add desired code to the
defclass macroexpansion. Two such metaclasses are
defined (fixed-index-class
and
fixed-index-filling-class
) and another is
shown in an example. Users can write their own as well. As said, this
feature, added by a patch released in July, 2019, is for 10.1 and later
only.
-
New pgid keyword argument to run-shell-command (UNIX only, 10.1
only). run-shell-command
has a new keyword argument pgid. It allows control of the process
group of the process spawned by the run-shell-command call, which allows better
control over signal distribution. A Control-C typed to interrupt the
Lisp will send a SIGINT to every process in that Lisp's process
group. Using the pgid argument to specify that the
spawned process will be in a separate process id group, Lisp can be
interrupted while the spawned process continues to run. . This argument is
available in release 10.1 only. It is not supported in releases 9.0
and 10.0.
-
New function wait-for-io-available in
10.1.
mp:wait-for-io-available is similar
to wait-for-input-available
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
are Main
AllegroServe
document, htmlgen
document, and
AllegroServe
Tutorial.
-
The macro with-at-most-one-form released for 10.1. The
macro
with-at-most-one-form 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 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.
-
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
only.
-
add-typep-transformer has a new re-exapnd keyword
argument. add-typep-transformer allows the compiler to
transform the form
(typep x type)
into (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 (predicate x)
,
potentially allowing compiler macros for predicate (if such
exist) to further inline code. Thie feature is for 10.1 and later
only.
-
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
10.1 only.
-
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
variable
acl-socket:*ssl-features*
is a list of supported SSL features. In 10.1, it
contains :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
evaluating
(require :mplog)
. This
facility is not available in Allegro CL 9.0.
-
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 6.3 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
be
nil
or a non-negative fixnum less than or
equal to the length or the prefix argument. With
the value 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. These functions
are only available in release 10.1 (and is not available in 10.0 or
9.0).
-
New function excl:day-difference. Replaced by entry just above.
-
Websocket update. A subsequent patch has enhanced the Websocket
API.
This
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.
This
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
Getting 32-bit
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. 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,
mouse-wheel-present,
and mouse-wheel-scroll-lines.
These changes were made after the initial release of Allegro CL 9.0.
You must update you images to use most of the functionality described
(see sys:update-allegro).
-
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
switches
comp:peephole-optimize-switch
,
and comp:save-arglist-switch
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.
-
Update required to use Allegro CL 9.0 with macOS 10.10.
Allegro CL updates are required to use Allegro CL 9.0 with macOS
10.10. Please see Updating for macOS 10.10
in installation.htm for information. Note that, as
described in the linked section, XQuartz must also be reinstalled.
-
A new for-as-in-sequence subclause for the loop
macro. The loop
macro now supports a
for-as-in-sequence
subclause
which iterates over a list or a simple, general vector. Existing
(standard) subclauses include for-as-in-list
and
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
string-to-universal-time and
universal-time-to-string
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
in jlinker.htm.
-
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-server-context and
make-ssl-client-context. make-ssl-server-stream and
make-ssl-client-stream
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
make-ssl-client-stream
is
:tlsv1+
. These modifications were added in a patch
released in April, 2014.
-
Fix for OpenSSL Heartbleed bug available. The OpenSSL
Heartbleed bug
(see https://www.openssl.org/news/secadv_20140407.txt)
requires new library files and application rebuilds. See
the Tech
Corner Article at
https://franz.com/support/tech_corner/heartbleed040914.lhtml for
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
November, 2013.
-
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
bc". Also, (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
not specified.
-
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 in
the the AllegroServe documentation
for details.
-
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
were
excl
, franz
,
and 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 7.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
changes.
-
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
works on
text-edit-pane
s and
multi-line-editable-text
widgets. It
does not work on file streams. The documentation has been updated to
make that clear.
fasl files (compiled Lisp files) created by
releases of Allegro CL prior to 9.0
will not load into Allegro CL 9.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 file.
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
reason)
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 9.0 uses the 8.2 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
fails.
-
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
clim8.dxl.
Allegro CL 9.0 is known to work with the following minimal operating
system versions. Allegro CL 9.0 runs on all operating system versions
released (not in beta or pre-release form) January 1, 2012. Allegro
CL is tested with new OS versions as they are released (but not
pre-release of beta versions). Unless there is a note in a subsection
below, Allegro CL can be assumed to work on newer versions, including
those released after that date.
Because Ubuntu no longer supports 32-bit libraries, 32-bit
Allegro CL requires special
action. See Getting 32-bit Allegro CL to run on 64-bit
Ubuntu for more information.
64-bit platforms
-
64-bit Apple macOS 10.6
-
64-bit Linux (x86-64), glibc 2.11
-
64-bit Microsoft Windows XP/Vista/7 &Server
-
64-bit Sun Solaris (SPARC) 2.10 (no SMP)
-
64-bit Sun Solaris (x86-64) 2.10 (no SMP)
-
FreeBSD 8.2 (no non-SMP)
32-bit platforms
-
Apple macOS (Intel) 10.6
-
FreeBSD 8.2 (no SMP)
-
Linux (x86), glibc 2.11
-
Microsoft Windows XP/Vista/7 & Server
-
Sun Solaris (SPARC) 2.10 (no SMP)
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.x.
Allegro CL 9.0 is only supported on macOS version 10.6 or later.
It is not supported on versions 10.5 or
earlier.
Common Graphics and the IDE are now supported on macOS but are not
supported on the SMP version on the Mac.
See Section 9.1 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
Building
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.
Allegro CL updates are required to use Allegro CL 9.0 with macOS
10.10. Please see Updating for macOS 10.10
in installation.htm for information.
We have had reports that installing the Mavericks OS on Macs (Mavericks
is macOS 10.9) causes 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
of XQuartz
(available
from http://xquartz.macosforge.org/landing/) after
installing Mavericks (regardless of what version, if any, was
installed before installing Mavericks).
We have had reports that installing the Mountain Lion OS on Macs
(Mountain Lion is macOS 10.8) causes X11 to be uninstalled, and
does not itself include X11. X11 is necessary for the IDE, CLIM, and
Allegro Composer. If you find X11 uninstalled (so it is no longer in
the Utilities sub-folder of the Applications folder, you
can reinstall it by downloading and
installing XQuartz.
If you have an older version of macOS and need to install/reinstall
X11, install it from your installation medium.
When building large new images, it is often useful to specify Lisp
Heap and C-heap start locations. See the discussion of the
lisp-heap-start and
c-heap-start keyword arguments in Arguments to
build-lisp-image 2: defaults not inherited from the running
image in building-images.htm. Here are
the initial locations (called `bases') in Allegro CL 9.0 as delivered.
Values are Hexadecimal integers.
Operating System |
Lisp base |
C base |
FreeBSD |
0x40000000 |
0xa0000000 |
Linux (x86) |
0x20000000 |
0xa0000000 |
Linux (AMD64) 64-bit |
0x1000000000 |
0x2000000000 |
macOS 32-bit |
0x10000000 |
0x74000000 |
macOS 64-bit |
0x1000000000 |
0x2000000000 |
Windows 32-bit |
0x20000000 |
0x54000000 |
Windows 64-bit |
0x100000000 |
0x200000000 |
Solaris 32-bit |
0x4000000 |
0x54000000 |
Solaris 64-bit |
0x1000000000 |
0x10000000000 |
Solaris (AMD64) 64-bit |
0x1000000000 |
0x10000000000 |
This main section contains three subsections (which have additional
subsections): one on new features
(Section 7.1 New features in the base Lisp), one on changes which are not
backwards compatible and so may require code changes,
(Section 7.2 Non-backward-compatible changes in the base Lisp), and one on
miscellaneous changes (Section 7.3 Other changes to and notes about the base Lisp).
Full SMP support is added for the Windows, Linux, and Mac platforms
(but not on Solaris or FreeBSD). This is the major new
feature. Non-SMP distributions are also provided for all platforms.
See smp.htm.
This section describes features added to Allegro CL 8.2 after its
initial release (about which users may be unfamiliar). All are part of
the 9.0 release.
Major update to AllegroServe
A new version of AllegroServe, version 1.3.1, has been released. It is
available from github
(https://github.com/franzinc/aserve/)
or as a patch for Allegrop CL 8.2. Of particular importance are
automatic compression and inflation of files, chunking support, and
new choices for security, including the TLS v1.0 (also called SSL
v3.1) protocol for secure
communications. See aserve/aserve.html,
which is the AllegroServe documentation.
The changes include:
-
New compression and chunking support on
AllegroServe. AllegroServe can now compress responses on the fly
if requested. Aserve's client code can request a compressed transfer
and can uncompress the result. Further, In the past AllegoServe
disabled chunking for an SSL server and told users to use the http/1.0
protocol for clients when SSL was being used. Now those restrictions
are gone. The default for the server will be to use chunking in all
cases and clients can specify http/1.1 for requests over SSL. See
documentation
(aserve/aserve.html) for
API changes related to these new features.
-
Security options. net.aserve:start and
net.aserve.client:do-http-request have a :ssl-method keyword
argument which can be used to specify v2.0, v3.0 or TLS v1.0 (SSL
v3.1) communication protocols. Specifying :tslv1 means that you only
want to communicate using TLS v1.0 (SSL v3.1), the most modern and
secure of the protocols.
-
Delay sending headers for computed entities. Errors can occur
when running the computed entity function. When an error occurs one
would like to send back a different response such as '500 - Internal
Server Error'. In order to make this possible the http response code
and the headers that follow that are not immediately sent back to the
server when with-http-body starts. Instead they are held in
request-reply-stream and are only sent when the computed entity
function sends data to the stream. Thus if you do computation before
sending any data you can avoid having any response sent to the client
until the computation finishes.
-
publish-directory can accept a list of destinations. When a
request comes in publish-directory will search one or more
directories for the requested file.
-
Other AllegroServe changes. (1) The :keep-alive arguement
to do-http-request will now cause do-http-request to
return a fifth value: a socket connected to the server. That fifth
value will be
nil
if the server refuses to
keep the connection with the client open. Even if the server agrees
to keeps the connection alive it will close it after some period of
inactivity. (2) do-http-request takes a :connection argument
which is how the socket returned by do-http-request should be
passed to the next do-http-request call. It is ok if the value
of the :connection argument is nil
or closed
socket. do-http-request will notice that the socket is
unusable and will create a new one. See documentation
(aserve/aserve.html).
jLinker revision patch removed
A jLinker patch released in April, 2011, has been withdrawn. If you
downloaded the patch, doing a further update will revoke it. It was
decided that the changes could not be accomodated in deployed
applications. The changes will be re-introduced in release 9.0.
We have further revised jlinker.htm and the
documentation of jlinker-init in light of removing
the patch.
Major changes to the Allegro CL interface to the Amazon
Elastic Compute Cloud (EC2), some incompatible
The Amazon Elastic Compute Cloud (EC2), described
in ec2.htm has had a major revision, with support
now provided for regions. The changes are described at the beginning
of ec2.htm. Note that some changes are
incompatible: some argument lists have changed, a number of variables
have been removed, defaults for some arguments are changed, and so
on. There is also much new functionality.
Other changes since the release
-
New installation for Mac 64-bit graphics utilities. You need
GTK and X11 to use the IDE or CLIM with Allegro CL on the Mac, and
additionally OpenMotif for CLIM. Previously, installation of these
utilities for 64-bit Lisps was very involved and difficult. This
process has been simplified substantially, as described
in Installing X11,
GTK, and Open Motif on macOS
in installation.htm.
-
dequeue method can now wait with a
timeout. The wait keyword argument to
dequeue can now be a real
number, indicating how many seconds a process should wait when asked
to dequeue an empty queue (waiting for an item to be added to the
queue so it can be dequeued). If the time limit is reached, the value
of the new empty-queue-result argument is
returned. If wait is
nil
and the queue is empty, an error is returned (as
before). If wait is a real less than or equal to
zero and the queue is empty, dequeue returns the value of the
empty-queue-result immediately.
-
Deflation (compression) of data now supported. The class
util.zip:deflate-stream
and
related functions allow you to compress data which can then be written
to a file or to a vector. The existing function
util.zip:inflate will uncompress
the data. The deflate utility was added in a patch released in March,
2011.
-
The macro in-case-mode, designed to assit loading fasl file
compiled in one case mode into a Lisp using another case
mode. While it is always better to use source files and associated
fasl files compiled in the case mode you are using in your running
Lisp (see case.htm), sometimes this is not
possible. The new macro in-case-mode will permit loading fasl
files compiled in a different mode from the running Lisp in most
cases.
-
Structures may be passed and returned to foreign functions by value
as well as by reference. See Passing structures by value
in foreign-functions.htm for more
information. Until this change, all structures were passed and
returned by reference, even when the specification indicated (because
no *) that by value was desired. Because of this change, existing code
that seems to specify by value will signal a warning but will still be
converted to by reference. You must modify the code (specifying a
value for the pass-structs-by-value argument
to def-foreign-call) or set
the value of
ff:*pass-structs-by-value*
appropriately to get
by value behavior.
-
All nicknames removed for the excl package. This was done when
9.0 was released but we neglected to document it (we added this item
is a doc update). The nicknames
were
excl
, franz
,
and 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 above in Section 3.0 Information on changes and new stuff since the 9.0 release.
-
Significant changes, many non-backward-compatible, changes to the
Amazon Elastic Compute Cloud (EC2)
interface. See ec2.htm for details. The release
notes for the changes are at the beginning oif that document.
-
The asdf module does not autoload. Users need to
evaluate
(require :asdf)
to use it.
-
delete, delete-if, delete-if-not, and delete-duplicates and in-place
deletion. Certain deletion operations on vectors by delete,
delete-if, delete-if-not, and delete-duplicates modified the vector in place,
and so some programs, aware of this, might use the argument vector
rather than the result vector (that is, might assume the result vector
is the argument vector modified rather than a new vector). However, in
a SMP Lisp (and, in fact, but rarely in a non-SMP multiprocessing
Lisp), multiple threads traversing the vector simultaneously while one
deletes elements could cause heap corruption and so a new variable,
*delete-in-place*
,
specifies whether deletion in place is allowed. The initial value of
this variable is nil
in SMP Lisps (meaning
in-place deletion is not allowed), so the argument vector is never the
same as the result vector in that case. Code which assumed it was the
same can now fail. See cl:delete, cl:delete-if, cl:delete-if-not,
cl:delete-duplicates: multiprocessing issues in
implementation.htm for more information.
-
*cl-default-special-bindings* replaced by
*required-top-level-bindings* and other changes to process
initialization and
bindings.
*cl-default-special-bindings*
has
been renamed *required-top-level-bindings*
. A new variable
*required-thread-bindings*
provides bindings
for all threads. New macros required-thread-binding and
required-top-level-binding
add to the alists which are the values of those
variables. Processes and their dynamic environments
(both models) in multiprocessing.htm
and Setting global
variables in initialization files
in startup.htm have been updated to reflect these
changes.
-
The debugger API has some keyword arguments changed to optional
arguments, and other API changes. The debugger API, described
in debugger-api.htm has new (and incompatible)
argument lists for db:oldest-frame and db:output-frame:
they arglists used to have both optional and keyword argument and now
just have optional arguments. Also, there is a new function
db:newest-frame. And most single-letter argument names
(like p and e) now have
descriptive names (like process
and environment) though that change does not
affect the interface since the arguments are in all cases required or
optional. See debugger-api.htm for details.
-
with-output-to-buffer has modified argument list. To make it
more like with-output-to-string,
the buffer argument to with-output-to-buffer is now an optional
argument rather than a leyword argument. Further, the behavior when no
value is supplied for the buffer argument is different: before it was
equivalent to specifying nil and resulted in a bit bucket being used
(so the number of characters written was available but not the
characters themseleves). Now unsupplied means create an actual buffer
which extends when needed and whose contents are available
with get-output-stream-buffer.
Specifying
nil
has the same meaning as in earlier releases.
-
Some command-line arguments now start with -- rather than -. --ee,
--qq, --backtrace-on-error, --batch, --kill, --locale, and
--compat-crlf. See Command line arguments
in startup.htm for a list of command-line
arguments. The single - versions still work but are not longer
documented and will likely be removed in a later release.
-
New Idy5 compiler message notes that a dynamic-extent declaration
is ineffective. See this section
of compiler-explanations.htm. The message appears
when there is a dynamic-extent declaration but it is ineffective
because declarations are not trusted.
-
def-foreign-call now has :documentation keyword
argument.
(setf documentation)
works works on
foreign functions but this new feature allows specifying the
documentation without writing a wrapper function. See
ff:def-foreign-call.
-
New gensym variant excl:gen-sym. excl:gen-sym is identical to cl:gensym except that a symbol is accepted as
its optional argument, in which case the symbol-name is used. This is
useful for programs that are intended for use in either ansi or modern
lisps, where it is desired to print any gensyms without requiring
escapes.
-
with-staged-output and synchronized-output-stream-p allow
coordination when writing to a stream. synchronized-output-stream-p (which is
setf'able) determines whether
a stream is marked as suitable for synchronized
output. with-staged-output
then ensures output is staged. Most built-in output functions are
called in the body of with-staged-output.
-
New functions peek-byte and unread-byte. peek-byte resembles peek-char except it peeks at a single byte
rather than a character. unread-byte similarly
resembles unread-char except
it unreads one byte rather than one
characters. See peek-byte and unread-byte
in streams.htm for a general discussion of these
functions.
-
New compiler switch enforces optimal branch alignment on 64-bit x86
platform.
align-branch-targets-switch
,
when true, tells the comnpiler to optimally align code branches on
64-bit x86 platform. Ignored on all other platforms.
-
New tester macro, variable useful for testing in SMP. Allegro
CL provide a test harness described
in test-harness.htm. While there has always been
issues when testing in a multiprocessing environment, in a non-SMP
Lisp these were fairly insignificant. They are more serious in an SMP
Lisp, so changes have been made to better manage the tester. These
include a new macro to use when incrementing results,
inc-test-counter; a
new variable which controls whether output should be labeled by
thread,
*test-report-thread*
; and locking to
avoid intermixed tester output
mesages. See Running tests in multiple threads (Lisp
processes) in test-harness.htm
for more information.
-
yes-or-no-p and y-or-n-p now have better default format control
strings. yes-or-no-p and
y-or-n-p previously had
empty default control strings. Now the defaults are "(Yes or No)? "
and "(Y or N)? ".
-
Change to package locking. Package locking is described
on Package
locking and package definition locking
in packages.htm. Packages locked against
definitions used to accept new definitions only if the name of
*package*
, or
any of its nicknames, was on the locked package's
implementation-packages list. Definitions will still be accepted in
these cases, but will also be allowed if *package*
is eq to the locked package.
-
New queue keyword argument to schedule-finalization, new function
call-finalizer. schedule-finalization, which allows defining a
function to be called when an object becomes garbage, has a
new queue keyword argument. If
non-
nil
, it must be a queue
object. When the object is marked as
garbage, instead of running the finalization function, the system will
place a finalizer object, which is a list of the finalization function
and the object, on the queue. It is then the responsibility of the
program to apply the function call-finalizer to that list at some
later time.
-
New HMAC functions for MD5 and SHA* encoding support.
See the new
hmac-init, hmac-string, hmac-update, and hmac-final which handle SHA* digest
algorithms.
See MD5, SHA1,
HMAC, RC4, and other encoding support
in miscellaneous.htm for more information.
-
New general functions for MD* and SHA* encoding support.
Various new encoding algorithms are now supported, inlcuding
MD2, MD4, MD5, SHA1, SHA256, SHA512, and
RMD160.
There are new
functions digest-init,
digest-update, digest-final, digest-string, and digest-file which encode and support all those
formats. They are similar to the existing md5-*
and sha1-* functions, with the same arguments,
except digest-init, digest-file, and digest-string have a name
required argument to specify the encoding format being
used). See MD*, SHA*,
HMAC, and other message digest support, and RC4 cypher
functions in miscellaneous.htm for more
information.
-
Expanded #A reader macro, new variable
*print-simple-array-specialized*. The standard #A template is
expanded from #nAdata to #{n}A{t}data where the
n
is optional (defaulting to 1) and t
can specify the
element type it is one of unsigned byte 4, 8, 16, 32 or 64, or signed
byte 8, 16, 32, or 64. See The #A reader macro
in implementation.htm for details. The printer will
use the new template when appropriate when the
variable *print-simple-array-specialized*
is true.
-
user-homedir-pathname and username-to-home-directory documentation
about behavior on Windows corrected.
cl:user-homedir-pathname
and excl:username-to-home-directory were
incorrectly documented in 8.2. The documentation has been
corrected. (Essentially, the current user's home directory is returned
in all cases, and that is discovered from the HOMEDRIVE and HOMEPATH
environment variables, or, failing that, from the HOME environment
variable. #P"C\\" is returned if none of those environment variables
have valid values.) The behavior of cl:user-homedir-pathname on Windows is discussed
in What user-homedir-pathname does on
Windows in implementation.htm.
-
get-output-stream-buffer now returns a second
value. get-output-stream-buffer now returns the number
of elements written to the buffer as a second returned value.
-
excl:uncompile and cl:function-lambda-expression succeed in more
cases. Both may succeed when source level debugging information is
stored (here succeed means returning a
non-
nil
first value for
cl:function-lambda-expression
and actually uncompiling the function for uncompile). See uncompile
and cl:function-lambda-expression
in implementation.htm for more information.
-
The :local and :set-local top-level commands have a raw option,
:r. This option displays locals in raw
mode. See :local for a discussion
of this mode. :set-local allows
values to be set in raw mode.
-
Previously undocumented :x option to :local top-level command causes numbers
to be displayed in hexadecimal. This option actually existed in
earlier releases but was not
dicumented. See :local.
-
There is now CRL (certificate revocation list) support in the SSL
(secure socket layer) implementation. See make-ssl-client-stream and
make-ssl-server-stream.
-
make-ssl-server-stream now has a prefer-server-cipher-order keyword
argument. When choosing a cipher during an SSLv3 or TLSv1
handshake, normally the client's preference is used. However, if the new
prefer-cipher-server-order keyword argument to
make-ssl-server-stream is
non-
nil
(the default
is nil
), the server's preference will be used
instead.
-
mapped-file-simple-stream has new release-handle option to
open. The
mapped-file-simple-stream
class can now be
opened with its handle released upon openning so the handle is
available for other uses. See
the release-handle option.
-
New arguments to def-foreign-call to control garbage-collections
while foreign code is running. The new arguments to
def-foreign-call are
allow-gc
and release-heap-implies-allow-gc.
-
add-signal-handler has new delayed-interrupts keyword
argument. If the delayed-interrupts keyword
argument to add-signal-handler is true, the handler be run
in a with-delayed-interrupts, else it will be run
with interrupts enabled.
-
New function mp:process-queue-interrupt. The new generic
function mp:process-queue-interrupt is like
mp:process-interrupt but calls the interruptions with
with-delayed-interrupts
being in effect which guarantees order of arrival processing.
-
The pid argument to excl.osi:getsid is now optional. See
excl.osi:getsid. The default
value is 0.
-
New exit-on-missing-shared-library keyword argument to
build-lisp-image. This new argument to build-lisp-image causes the new image to exit
with a non-zero exit status after printing an appropriate error
message if a shared library cannot be found.
-
The time macro now reports page faults. The general description
of the time macro is in the
ANS.
-
Additional keyword argument to excl.osi:find-in-path. If
the executable keyword to find-in-path
(ignored on Windows) is non-
nil
, then only
matches of files that have execute bit set in their mode are returned.
-
New command line argument --debug-startup. --debug-startup
prevents errors from being handled automatically by -L, -e, --ee and
init file processing. Instead, errors land in the debugger unless
--batch is also specified. See Command line arguments
in startup.htm for a list of command-line
arguments.
-
New Windows-only command line arguments +left, +top, +width,
+height. These specify the position and size of the console
window. See Command line arguments
in startup.htm for a list of command-line
arguments.
-
New variable sys:*zlib-system-library*. The value of
sys:*zlib-system-library*
is the name of the
gzip library used by the deflate module.
See Support for gzip
compression and decompression
in miscellaneous.htm.
-
Use of cltl1 package is deprecated. The compiler-let special operator has been moved
to the excl package. Use of other functionality in the cltl1 package
should be avoided. The cltl-1 module is no longer autoloaded.
-
New :direction keyword argument to dbi:bind-parameter. This
argument allows specification of the direction of the parameter in a
call to
dbi:bind-parameter.
-
def-function-spec-handler has new :defunable operation. The
value is a boolean indicating whether defun can be used on this
function-spec. See def-function-spec-handler.
Because SMP is the major addition to Allegro CL 9.0 on the Windows,
Linux, and Mac platforms. Consequently multiprocessing in Allegro CL
has changed, we group all SMP and multiprocessing release notes into
this section.
-
Atomic update routines will work on any symbol. In the initial
implementations of SMP, only symbols defined with defvar-nonbindable were suitable as places for
atomic update operators like push-atomic. This is not longer true. Any
symbol can be used as such a place. defvar-nonbindable is therefore no longer
associated with atomic updates but is retained because it may be
useful for other purposes. (This item was added after the initial
release of the 9.0 documentation.)
-
with-shared-lock, with-exclusive-lock, and sharable-lock-lock have
new recursive-p argument and return different values. The
operators with-shared-lock,
with-exclusive-lock, and
sharable-lock-lock, added with
a patch in 8.2, have new return values and have a new argument,
recursive-p. See the descriptions for details.
-
make-sharable-lock has new argument constructor, recursive-p
argument can have new values. See the description
of make-sharable-lock.
-
New mp:condition-variable class. A condition-variable provides
another way to synchronize the behavior of multiple
threads. See Condition
Variables in smp.htm.
-
New macro with-sharable-lock. with-sharable-lock is similar but more powerful
than with-shared-lock.
-
New generic function mp:process-join. mp:process-join suspends the current process
until the process thread of another process exits. This is a bit more
complicated than it sounds (processes can be associated with more than
one thread, so the question is, which is meant), as noted in the
documentation.
-
New generic function lockedp. lockedp tests whether a lock is held.
-
New generic function process-lockedp. See process-lockedp.
-
time macro reporting of new space additions. In the statistics
reported by the garbage collector, the new-copied number is now the
net copied to newspace. When multiple sequential scavenges are
required, the number reported represents the amount copied into
newspace by the last scavenge, not the total copying done by all the
scavenges.
There are no entries at this time. Information may be placed here in
documentation updates after the initial Allegro CL 9.0 release.
The CLIM manual has not been updated (other than minor corrections)
for the 9.0 release. There have been no significant changes to CLIM
functionality compared to 8.2, though there have been bug fixes and
performance enhancements.
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 (the
same platforms on which they were supported in release 8.2).
The first
subsection describes changes to Common Graphics and
the IDE that are non backward-compatible. Please review this section
and make whatever necessary changes to your code to obtain the desired
behavior in release 8.2.
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 9.5 IDE release notes and its
subsections provide information about the IDE.
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.6, 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
*show-parenthesis-matches-as-pop-up-window*
,
which must be set to true, as it is initially on macOS, and
also *parenthesis-match-pop-up-milliseconds*
.
-
No annotations in form windows when designing dialogs. The
annotations include widget resizing handles and alignment lines.
-
draw-rounded-box and fill-rounded-box have smaller
corners. Rounded box corners on GTK are smaller than in 8.x, but
now match beheavior on Windows. See draw-rounded-box and fill-rounded-box.
-
Variables dst, ds~t, d~st etc. renamed. The exported constant
symbols like
dst
and ~d~st
for
paint operation bit flags have been renamed to po-dst
and po-~d~st
, etc., to avoid errors in apps that
use a local variable named dst
.
-
New grid-widget functions determining which subsection gets
keyboard focus. The new generic functions are focus-row-section, focus-column-section, and
focus-subsection. See
grid-widget
for general information on grid
widgets.
-
New class-grid property horizontally-scrollable. The
horizontally-scrollable property of a
class-grid
specifies
whether the user can interactively scroll a class-grid horizontally,
to bring other grid columns into view.
-
New properties to control whether a grid-section scrolls when the
user drags a grid-subsection to a new position among its
siblings. scroll-parent-section-while-dragging controls
whener scrolling happens and scroll-parent-section-distance controls the
scroll increment. See also
grid-widget
for general information on that
widget.
-
Several new functions for manipulating outline-items. These new
generic functions have been added for progammatically manipulating
outline-item
s
on outline
widgets:
select-on-typing,
move-up-one-outline-item,
move-down-one-outline-item,
hide-outline-item-children,
show-outline-item-children,
outline-item-removed,
outline-item-added,
outline-items-reordered,
remove-outline-item,
add-sibling-outline-item,
add-child-outline-item, and
shift-outline-item.
-
New configuration option
delay-pop-up-menus-until-mouse-buttons-up. delay-pop-up-menus-until-mouse-buttons-up, when
true, delays the appearance of a pop-up menu until all mouse buttons
are up. Its initial value is
nil
on Windows
but true on GTK (Linux and Mac). On GTK, we have not found a way to
prevent a mouse button release event from selecting an item on a
pop-up menu that was invoked while a mouse button is down. That
behavior can lead to the user not seeing the menu altogether, or even
selecting an arbitrary item if the menu is placed under the mouse
cursor but does not appear until the mouse button has already been
released. That does not happen when the value of this new option is
true.
-
New function set-console-exterior on Windows only. The function
set-console-exterior allows
you to set the size and location of the console Window if there is
one. This is a Windows-only function.
-
ask-user-for-new-or-existing-directory and ask-user-for-directory
have some new arguments. ask-user-for-directory now has
a include-edit-box keyword argument (adds
a text-entry widget to the dialog) and
a new-dialog-style keyword argument (use
the new MS style for the dialog). ask-user-for-new-or-existing-directory has a
new special-folders keyword argument
(allows specifying special Windows folders like My
Documents). See the descriptions of
ask-user-for-new-or-existing-directory
and ask-user-for-directory for full details.
-
New macro with-cg-bindings. with-cg-bindings allows establishing the Common
Graphics variable bindings in an existing process where it is not
feasible to pass
*default-cg-bindings*
at process
creation time.
-
window-message now returns a meaningful
value. window-message
returns
t
if the message was displayed in
some status bar (either that of the argument window or an ancestor of
the argument window) and returns nil
otherwise.
-
set-paragraph-format limited to 32 tab stops. This is a Windows
limitation. The number of tab stops is specified by
the tabs keyword argument to
set-paragraph-format. Previously specifying a
value greater than 32 would cause an error. Now values greater than 32
are treated as if 32 were
specified. Specifying
nil
removes all tab
stops.
-
New outline control properties: ancestor-background-color and
highlight-ancestors. these properties control whether an
outline
widget will draw the
background of each ancestor outline-item
of the currently selected item in a
different color.
-
select-on-multiple-characters and
select-on-multiple-characters-time-limit now are properties of outline
widgets, along with new properties
select-on-multiple-characters-item-test and
select-on-multiple-characters-callback. See select-on-multiple-characters, select-on-multiple-characters-time-limit,
select-on-multiple-characters-item-test, select-on-multiple-characters-callback
and
outline
.
-
New validate-edited-slot-value method allows validation of new slot
values in object-editors and class-grids. The new method validate-edited-slot-value can be used
with
object-editor
s and
class-grid
s to validate
input.
-
pop-up-string-dialog and ask-user-for-string have new cursor-at-end
argument. This specifies whether the cursor should be placed at
the end of the string to be modified (allowing for easy extension) or
the beginning (easier for replacing). See pop-up-string-dialog and ask-user-for-string.
-
pop-up-menus-for-many-sorted-choices has new case-insensitive and
on-help keyword arguments. The
new case-insensitive keyword argument
to pop-up-menus-for-many-sorted-choices allows
specifying whether or not choices starting with the same letter, but
some lowercase and some upper, should be grouped together. The
new on-help argument allows you to specify a
function which may be used for displaying status bar messages as the
user highlights individual menu items.
-
pop-up-lettered-menu has new stream and on-help keyword
arguments. The new stream argument to
pop-up-lettered-menu is either
the screen or else a window that will serve as the owner of the pop-up
menu. The new on-help argument allows you to
specify a function which may be used for displaying status bar
messages as the user highlights individual menu items.
-
New printer-class keyword argument to
with-output-to-printer. with-output-to-printer now has
a printer-class keyword argument which
allows you to specify a subclass of
cg:printer
as the type of stream to instantiate,
if desired.
-
New outline widget property lines-of-padding. The
lines-of-padding property of
outline
widgets specifies
how many items should be in view around a selected outline-item
The IDE is supported on the Windows SMP Lisp. It is not supported in
the Mac or Linux SMP versions of Allegro CL 9.0. 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.
-
The :runtime-bundle build-flag is now included in the initial
build-flags value. See ide:build-flags.
-
Class Interface Editor dialog changes. The
Class
Interface Editor has been enhanced to make the properties
that you can specify interactively for a
class-grid
be more nearly complete]
-
The Inspect now shows package names of slot values.
-
New checkbox on Find in Files dialog to specify whether
subprojects should searched. The Search Subprojects Later
checkbox, when checked while searching a project, causes the entire
project hierarchy to be searched. When unchecked, only the top-level
project is searched. See the Find In Files dialog.
-
Revised Include Subdirectories checkbox on Find in Files
dialog. The Include Subdirectories checkbox is now
labeled Include Subdirectories or Subprojects and controls
searching subprojects when searching a project. See
the Find In
Files dialog.
-
ide:shift-windows-onto-screen-at-startup now works on the single
parent window. ide:shift-windows-onto-screen-at-startup will
move the single parent window (which contains all IDE subwindows
when ide:use-ide-parent-window is true) into
view. Its behavior when ide:use-ide-parent-window is false is
unchanged.
-
New functionality for using Unicode in text files. New
configuration options and other operators allow better handling of
Unicode text on Windows. See compile-files-as-utf8,
external-format-for-saved-files, external-format-for-save,
*use-unicode-winapi-for-cg*
,
automatic-font-changing,
dual-fonts-for-languages,
ide:ide-auto-font-changing,
ide:ide-dual-fonts-for-languages,
write-bom-to-utf8-files,
and load-utf8-if-no-bom.
-
New Inspect Dialog option 'Inspect Sorted Copy'. This option
appears on the Inspect dialog when inspecting a list
or a vector. If chosen, a new sequence copied from the inspected one
and sorted by print name is inspected. This may make finding items in
long sequences easier.
-
File | Build Project Exe now File | Build Project
Executable. The Build Project Exe item ion
the File menu is
now File | Build Project Executable. We
wish to make clear the command does more than create a
single exe file.
-
New IDE option find-in-files-show-html-files-in-browser. If the
IDE configuration option ide:find-in-files-show-html-files-in-browser is
true (its initial value) then HTML files (as determined by the file
type) will open in a browser rather than an editor buffer.
-
New IDE option find-in-files-file-list-portion. If the IDE
configuration option ide:find-in-files-file-list-portion allows
users to specify the proportion between the heights of the two lower
widgets in the Find In Files dialog, which list
the files that have matches followed by the matching lines in the
selected file.
-
Stepper dialog now has yellow highlighting for code which has
limited information. The Stepper Dialog highlight code being
stepped through. Green menas source code debugging info is available,
orange means you are stopped at a macro form, etc. Now yellow is a
possible highlight color and means you can do a Step Into to
step through the function that is being called on that step, though no
source debug info is known for the function that is being entered and
so it will be stepped through at the assembly language level.
-
New command on Run menu: Show Definition in Stepper Dialog. The
menu command Show Definition in Stepper
Dialog on the Run
menu displays the source code of the selected function or
method in the Stepper
Dialog and allows you to set breakpoints inside the
definition without breakpointing the entrance to and exit from the
function.
-
New project property concatenate-project-fasls. The project
property concatenate-project-fasls, when true, causes
all project fasl files to be concatenated into a single fasl
file. This property can be set with setf or with the
Concatenate Project Fasls check box on the Options tab of the
Project
Manager dialog.
-
Finer control of opening files in Emacs from the IDE. The
function ide:open-files-in-gnu-emacs allows you to
specify that the File | Open command should open files in an Emacs
buffer rather than an IDE editor buffer. If you make the value of that
property
:open-only
,
the File | Save All menu command will not save
Emacs buffers. If the value of the property is any other true
value, File | Save All will save all unsaved Emacs
buffers.
-
Improved type-ahead in IDE listeners. Typing ahead in an IDE
listener while an evaluation is happening will now echo the characters
at the end of the text as you type them, rather than only after the
evaluation is complete. Any printing that's done to the listener will
always be sent to the end of the listener's text rather than to the
text cursor position.
Allegro CL 8.2 projects should open without problem in Allegro CL
9.0.
For complete information on the differences between Windows and GTK,
please see
cggtk-relnotes.html.
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
total mystery.
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
thread. default-application-window-subkey, *use-single-cg-event-handling-process*
, and
*single-cg-event-handling-process*
allow
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.
Miscellaneous
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
more information.
-
Unicase names for several functions removed. This is a
non-backward-compatible change. For example, CreateWin and
related functions existed with uppercase names in ANSI Lisp and
lowercase names in nonANSI Lisp is earlier releases but now exists
only with a mixed case name. See The Windows API and a Windows API program with
windows but without CG in cgide.htm for
more information.
No notes at this time
The command fi:lisp-find-definition no longer sets a mark.
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
Franz Inc.
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.