Release Notes for Allegro CL 8.2
This document contains the following sections:
1.0 Introduction
2.0 Information on changes and new stuff since the 8.2 release
3.0 Fasl files are not-compatible between versions and operating systems
3.1 All pre-8.2 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 OS patch needed for Solaris 2.8 on Sparcs
5.3 macOS notes
5.3.1 Allegro CL must be updated to work with macOS 10.10
5.3.2 Installing Mavericks OS (macOS 10.9) may break X11
5.3.3 Installing Mountain Lion OS (macOS 10.8) may uninstall X11
5.4 AIX notes
5.5 Heap start locations
6.0 Release Notes for the base Lisp
6.1 New features in the base Lisp
6.1.1 Features added to Allegro CL 8.1 after the initial release of Allegro CL 8.1
6.1.2 New features in Allegro CL 8.2
6.2 Non-backward-compatible changes in the base Lisp
6.3 Other changes to and notes about the base Lisp
6.4 Base Lisp platform-specific information
7.0 Release Notes for CLIM
8.0 Release Notes for Common Graphics and the IDE
8.1 Common Graphics and the IDE on the Mac
8.2 Significant changes in Common Graphics
8.3 Non-backward-compatible changes in Common Graphics
8.4 Other changes in Common Graphics
8.5 IDE release notes
8.5.1 Opening projects from releases prior to 8.1
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
release 8.2
of Allegro Common Lisp and related products. Many sections are divided
into non-backward-compatible changes (that produce different behavior
in release 8.2 compared to
release
8.1)
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.1 Release Notes, included in
this distribution as the file
version-81-release-notes.htm.
This document describes the changes, major and minor,
from 8.1
to 8.2. Please look particularly at these
sections:
If you notice changed or unexpected behavior with an operator,
variable, class, or facility, search for its name in this document to
see whether there is an entry concerning it.
This section is for information about changes to Allegro CL
8.2 since the 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
-
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.
-
New types keyword argument to dbi:run-prepared-sql. This new
argument to dbi:run-prepared-sql allows specifying
the return type.
-
Update required to use Allegro CL with macOS 10.10. Allegro
CL updates are required to use Allegro CL 8.2 with macOS 10.10. If
you upgrade to 10.10 without updating Allegro CL 8.2, Allegro CL 8.2
will not start up and you must install a patch by hand (rather than
using the normal update tools). A new GTK Framework must also be
downloaded and installed. If you update Allegro CL prior to installing
the new OS, installing the patches by hand is not necessary although
downloading and installing the new GTK Framework is. Please
see Updating for
macOS 10.10 in installation.htm for
information. As noted in that 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.
-
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.
-
New client-flags keyword argument to dbi.mysql:connect 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.
-
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.
-
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 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.
-
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.
fasl files (compiled Lisp files) created by
releases of Allegro CL prior to 8.2
will not load into Allegro CL 8.2. 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.
8.2.beta fasl file will load into 8.2 final. There is no need to
recompile 8.2.beta compiled files.
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.
-
Except for macOS, version 8.2 uses the 8.1 installation
procedure:
installation is described in
installation.htm.
macOS installation is
described in the section Installation on macOS 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 8.2 is known to work with the following minimal operating
system versions. Allegro CL 8.2 runs on all operating system versions
released (not in beta or pre-release form) September 1, 2009. 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.
Note that Allegro CL 8.2 does not run on Windows 98/Me or on macOS
10.4.
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.
32-bit platforms
-
Apple macOS (Intel) 10.5
-
FreeBSD 6.x
-
IBM AIX 5.1
-
Linux (x86), glibc 2.3
-
Microsoft Windows 2000/XP/Vista/Server 2003/7
-
Sun Solaris (SPARC) 2.9
64-bit platforms
-
64-bit Apple macOS 10.5
-
64-bit IBM AIX 5.1
-
64-bit Linux (x86-64), glibc 2.4
-
64-bit Microsoft Windows XP/Vista/Server 2003/7
-
64-bit Sun Solaris (SPARC) 2.9
-
64-bit Sun Solaris (x86-64) 2.10
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.
A problem with Solaris 2.8 where calls to run-shell-command can cause Lisp to hang is
fixed by operating system patch 108993-18 (which supersedes the
earlier patch 108827-36 for this problem). On Solaris 8, it can
also be fixed by adding /usr/lib/lwp to the front of your
LD_LIBRARY_PATH
environment variable. No fix is
necessary for Solaris 2.9.
The patch can be obtained from this Sun website: http://sunsolve.sun.com/search/document.do?assetkey=1-26-49843-1.
Allegro CL 8.2 is only supported on macOS version 10.5 or later.
It is not supported on versions 10.4 or
earlier.
Common Graphics and the IDE are now supported on macOS.
See Section 8.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 8.2 with macOS
10.10. If you upgrade to 10.10 without updating Allegro CL 8.2,
Allegro CL 8.2 will not start up and you must install a patch by hand
(rather than using the normal update tools). Please
see Updating for
macOS 10.10 in installation.htm for
information. Updating Allegro CL 8.2 prior to upgrading to 10.10 does
not reuire hand installation of patches.
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.
In order for Allegro CL 8.2 to run on AIX the following filesets must
be installed:
-
bos.perf.perfstat
-
bos.perf.libperfstat
These filesets should be available on the AIX installation media.
Without these filesets, Lisp will likely fail on startup. The exact
nature of the failure depends of the specific dlopen()
implementation. A typical failure message looks like:
dlopen(/usr/local/allegro/acl81/libacli8110.so, mode) error: Bad address
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 8.1 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 |
AIX 32-bit |
0x30000000 |
0x64000000 |
AIX 64-bit |
0x700001000000000 |
0x700002000000000 |
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 6.1 New features in the base Lisp), one on changes which are not
backwards compatible and so may require code changes,
(Section 6.2 Non-backward-compatible changes in the base Lisp), and one on
miscellaneous changes (Section 6.3 Other changes to and notes about the base Lisp).
We have added a number of new capabilities to Allegro CL. Here we give
links to the documentation of the new features.
The features described in
Section 6.1.1 Features added to Allegro CL 8.1 after the initial release of Allegro CL 8.1 were released
originally as patches to Allegro CL 8.1, but after the initial release
of Allegro CL 8.1. The features described in
Section 6.1.2 New features in Allegro CL 8.2 are new in the Allegro CL
8.2 release.
Various additions to Allegro CL 8.1 were added after the original
release of Allegro CL 8.1. We list them here. All are part of release
8.2.
-
Changes to multiprocessing API in anticipation of Symmetric
Multiprocessing (SMP). SMP will be introduced to Allegro CL in
release 9.0. In SMP, the macros without-interrupts and sys:without-scheduling will no longer lock
objects in code they enclose (this is a side effect of preventing
process switches in a non-SMP Lisp). Therefore, code which depends on
that feature must be rewritten. The
document smp.htm describes the changes and the new
functionality that implements the new API. Because 8.2 does not
implement SMP, code will run as before but we recommend that users
modify their code now in anticipation. There is one noticeable change:
when the compiler encounters without-interrupts or sys:without-scheduling, a warning will be
signaled syaing that these macros are now deprecated. This warning can
be muffled by evaluating
(setq excl::warn-smp-usage
nil)
.
-
New plot widget for drawing X/Y graphs (such as scatter
graphs). An analog of the existing
chart-widget
, the new plot-widget
allows drawing X/Y plots of
various types. The plot-widget
page has several examples. There are
new functions and many chart-widget
operators and classes have been
modified to encompass the new plot functionality. (The biggest change
is where methods are defined, with methods previously defined on a
class now being inherited from a superclass.)
Existing chart-widget
code
should work without change.
-
Enhancements to IDE projects allows easier handling of
subprojects:
see Section 4.6.1
Subprojects in the IDE User Guide.
-
Enhancements to the mail functions send-smtp, send-smtp-auth and
send-letter to support SSL and STARTTLS. The mail
functions send-smtp, send-smtp-auth,
and send-letter
have all been been enhanced to allow for ssl connections and STARTTLS
negotiation ('TLS' stands for Transport Layer Security and is another
name for SSL.) The enhancement is implemented by allowing information
to be included in the value of
the mail-server. See the (linked) function
descriptions for details.
-
Changes to SSL interface allows using more methods and using
ciphers. The methods keyword argument
to make-ssl-client-stream and
make-ssl-server-stream
now accepts more options allowing more control over which SSL protocol
is used. A new ciphers keyword argument allows using a cipher.
-
Enhanced update.exe on Windows now also downloads
updates. update.exe is the program on Windows that rebuilds
images when you have obtained updates using sys:update-allegro (or
the Download
Patches dialog). update.exe has been enhanced to
accept arguments: -u, -p, and -P. When -u
is passed, patches will be downloaded and new images built if
necessary. -p and -P specify how
sys:update-allegro (which
is called when -u is specified) will deal with proxies. See the
description of sys:update-allegro for details.
-
New unix-shared-library examples and documentation. The
description of how to make a Lisp application a shared library on
Unix-style platforms is now applicable to all such
platforms. See unix-shared-library.htm.
-
New util-string module and util.string:string+ function. The
module is designed to provide string utility functions that are more
efficient or more convenient that Common Lisp string functions. The
first new function is string+. It acts like
(concatenate 'string ...)
but accepts any objects
as arguments (stringifying them with princ-to-string) and like
(format nil "..." ...)
but is faster, particularly
for short strings and certain common object types, and easier to
use. See string-utilities.htm.
-
New operating system interface function excl.osi:mkdtemp creates a
uniquely named temporary directory. This new function does not
work on Windows, Solaris, or HP-UX. excl.osi:mkdtemp takes a string
ending in six X's (like "/tmp/mydirXXXXXX") as its argument. It
replaces the six X's with characters that result in a new directory
name, creates the directory, and returns the new name (a string).
-
New compact keyword argument to
net.mail:extract-email-addresses.
extract-email-addresses now accepts
a compact keyword argument, which, when specified
true, causes the results to be returned as a list
of
user@domain
strings.
-
excl.shell:rm has a new no-execute keyword argument. Like the
no-execute argument to other shell functions,
when specified true, information about what would be done is printed
but no further action is taken. See rm and
shell-module.htm.
-
defun-foreign-callable now accepts a returning
declaration. defun-foreign-callable accepts "declarations"
which provide information about the foreign-callable Lisp function. A
:returning
declaration is now accepted. Its value
can be a foreign type. The :returning
declaration
replaces the convert-to-c-types argument in
register-foreign-callable when
it is used.
-
md5-file has a return keyword argument. The documentation
for md5-file did not
describe it but has been corrected.
-
New step interface will step through sources. The documentation is at
The source
stepper in debugging.htm. See also the
new Stepper
Dialog. Note it is not available on Sparc or AIX platforms.
-
describe for a function-object now lists closed over variables if
any. Here is an example using describe:
cl-user(1): (let (x) (defun foo (y) (+ x y)))
foo
cl-user(2): (describe #'foo)
#<Interpreted Closure foo> is a new function.
The arguments are (y)
It closes over the following variables:
x
cl-user(3):
-
Type and dynamic-extent declarations warn about non-visible
variables. If a type or a dynamic-extent declaration references a
variable or an ftype declaration references a function that is not
lexically visible, a warning is signaled. Thus:
(defun show-me (msg &rest args)
(declare (dynamic-extent blargs))
(apply #'format t msg args))
will signal a warning.
-
New coverage tool excl:with-coverage. Coverage analysis
determines how much code has been excercised in a test. A new
macro, with-coverage,
provides coverage information on tested
code. See Coverage
analysis in Allegro CL
in miscellaneous.htm.
-
New start and end keyword arguments to disassemble: the
function cl:disassemble not accepts start and end keyword arguments
which restrict the output to a portion of the disassembled code. See Extensions to cl:make-package,
cl:disassemble, cl:truename, cl:probe-file, cl:open,
cl:apropos in
implementation.htm.
-
New functions test for floating-point Nans and infinities. The
functions exceptional-floating-point-number-p,
nanp,
and infinityp test
whether an object is a floating-point infinity or NaN. The constants
associated with floating-point infinities and NaNs were exported in an
patch to release 8.1. See Floating-point infinities and NaNs, and
floating-point underflow and overflow
in implementation.htm.
-
New cl:time implementation provides more detailed
information. The cl:time macro prints information on the
time taken and the space used when evaluating a
form. cl:time has
been modified to display time in microseconds rather than
milleseconds:
cl-user(1): (time (dotimes (i 100000000) (* i i)))
; cpu time (non-gc) 7.478883 sec user, 0.137910 sec system
; cpu time (gc) 5.481388 sec user, 0.093007 sec system
; cpu time (total) 12.960271 sec user, 0.230917 sec system
; real time 13.215964 sec
; space allocation:
; 0 cons cells, 2,399,443,896 other bytes, 0 static bytes
nil
cl-user(2):
-
Function print-system-state now returns no values. In earlier
releases, print-system-state
returned
nil
.
-
Minor changes to gc information printed after a garbage
collection. The brief message after a scavenge now looks like
this:
gc: XN-E=32% N=444528 T+=0 A-=0 pfu=0+336
pfg=0+11
rather than this: gc: XN-E=32% N=444528
O+=0 pfu=0+336 pfg=0+11
. T+ (meaning bytes tenured to
oldspace) is used instead of O+, and A- (meaning aclfree bytes freed) has been
added. Similar changes have been made to the more verbose
messages. These messages are discussed in the
section Gsgc
switches and the section How do I find out when
scavenges happen? in gc.htm.
-
excl:aclfree and excl:aclfree-aligned now return number of bytes
originally requested or 0. The number of bytes freed is greater
than or equal to the value returned, unless that value is 0, which
normally means no action was taken for some reason (but it is more
complicated, so see the page descriptions). See aclfree and aclfree-aligned for further details.
-
Scavenges may be triggered by aclmalloc calls. Malloc space may
be freed as a side effect of a scavenge (a garbage collection of
newspace, see gc.htm). Now a scavenge may be
triggered by the need for aclmalloc space even if newspace is not
full. See When scavenges
occur in gc.htm.
-
New optional environment argument to
excl:arglist: arglist now takes an optional
environment argument. If specified and non-nil, it must be an
environment object which is used to find the current lexical
definition of the function within that environment rather than looking
for the global definition.
-
New compiler switch verify-type-declarations-switch gives runtime
check for declared variables. Code compiled
while
verify-type-declarations-switch
is true
will have runtime checks added to ensure declared variables which are
set, or let or lambda bound have a value of the correct type. See the
description of verify-type-declarations-switch
for
details and restrictions.
-
New file-version-info argument to generate-application (Windows
only): generate-application takes a
file-version-info keyword argument which
takes a list of keyword/string pairs and these are stored as
VERSIONINFO in the application
executable. See Setting the VERSIONINFO of the application
executable on Windows in delivery.htm.
-
New compiler optimization switches optimize-large-functions-switch,
save-source-level-debug-info-switch, and
generate-accurate-x86-float-code-switch.
optimize-large-functions-switch
allows you
to suppress optizations when they result in too large a compiled
function and associated too long compilation
speed. save-source-level-debug-info-switch
tells
the compiler to write information useful for source debugging and
coverage analysis to the fasl file. generate-accurate-x86-float-code-switch
only affects 32-bit x86. If true (as it is except when speed is 3 and
safety 0), flags are set which ensures the results floating-point
calculations are identical from run to run;
if nil
such calculations are faster but may
differ in the lowest bits from run to run.
-
:follow can be the value of Allegro CL print variables. The
value means use the value of the corresponding CL print
variable. See Allegro CL print variables can follow the CL
print variable value
in implementation.htm.
-
New trace print variables *trace-print-array* and
*trace-print-circle*. See
*trace-print-array*
and *trace-print-circle*
.
-
New trace option :show-stack. See The tracer
in debugging.htm.
-
New macro ensuring-compiled-body and associated function
compile-lambda-expr-in-env. ensuring-compiled-body is
like progn in that it executes
its body forms sequentially, but if encountered in interpreted code, it
wraps the body in a
lambda
and passes it to
compile-lambda-expr-in-env for
compilation and funcalls the
result. Thus the code will be executed compiled in all cases. The
associated compile-lambda-expr-in-env takes a lambda
expression and an environment, and compiles the lambda expression and
returns the resulting function object.
-
New URI slot accessor net.uri:uri-userinfo. uri-userinfo accesses the userinfo slot
of a
uri
object.
-
Windows only: new Open SSL version: Allegro CL Enterprise and
above uses a different version of Open SSL for the Secure Socket Layer
(SSL) protocol, as described in
Secure Socket Layer
(SSL) in socket.htm. On Unix platforms,
the libraries are part of the Allegro CL library so Unix customers
need not make any changes. Windows customers must install the new
version, as described in Installing OpenSSL libraries on
Windows in installation.htm. The
directory used is different so previous installations are unaffected.
-
named-readtable now errors by default when there is no readtable
with specified name. The default value of the
optional errorp argument to
named-readtable is
now
t
rather
than nil
, so (named-readtable
:no-such-name)
errors rather than
returning nil
while (named-readtable
:no-such-name nil)
returns nil
. The
change was made because (setq *readtable* (named-readtable
:my-misspelled-name))
would result
in *readtable*
being
nil
, with bad consequences perhaps hard to
debug. You might have code like this:
(let ((rt (or (excl:named-readtable :myrt)
(setf (excl:named-readtable :myrt) (copy-readtable)))))
...)
That code will error if the :myrt readtable does not exist. This is the fix:
(let ((rt (or (excl:named-readtable :myrt nil) ;; errorp is now NIL
(setf (excl:named-readtable :myrt) (copy-readtable)))))
...)
-
Compiler optimization switch functions now have five (rather than
four) required arguments as compilation-speed quality is now
used. The compiler optimization switches are variables such
as
trust-declarations-switch
. They are all
listed in Examining the current settings and their
effect in compiling.htm. Their value must
be t, nil, or a function of five required arguments. The arguments are
the values of the optization qualities saftey, space,
speed, debug, and compilation-speed. In previous
releases, compilation-speed was not used and the functions took
four required arguments.
This change affects only those users who wrote their own functions to
be the value of the swicthes. It is possible even those functions will
continue to work, depending on how the argument list was specified and
how the function was compiled, but users are urged to update any
functions they wrote.
compilation-speed is initially only used
for optimize-large-functions-switch
.
build-lisp-image
(see building-images.htm) now has a
:opt-compilation-speed
keyword argument, similar to
the
existing :opt-debug
, :opt-space
,
:opt-speed
, and :opt-safety
keyword arguments, setting the initial value of the quality in the
image being built.
-
Standard readtable is now read-only. The standard readtable,
which is the initial value of
*readtable*
when Lisp starts, is now read-only
and cannot be modified. Copies of that readtable can be
modified. See The
standard readtable is read-only, affect on with-standard-io-syntax and
modifying the readtable in init files
in implementation.htm for more information. As the
title of that section implies, we believe the most likely effect of
this change is to break calls to with-standard-io-syntax where the body modified
the value of *readtable*
(which is set to the
standard readtable by the macro), and cause error when forms in an
init file (like .clinit.cl) modify *readtable*
because its value during
initialization is the standard readtable. (In a listener, it is by
default a copy of the standard readtable). We show how to get around
those problems in the linked section.
-
build-lisp-image/generate-application argument name changes:
:c-heap-start and :c-heap-size are now :aclmalloc-heap-start and
:aclmalloc-heap-size. The names of the associated environment
variables have also changed from ACL_BUILD_C_HEAP_START and
ACL_BUILD_C_HEAP_SIZE to ACL_BUILD_ACLMALLOC_HEAP_START and
ACL_BUILD_ACLMALLOC_HEAP_SIZE. The arguments to build-lisp-image which specify the start and
initial size of the Aclmalloc heap (formerly called the C heap) are
now
:aclmalloc-heap-start
(formerly
:c-heap-start
)
and :aclmalloc-heap-size
(formerly
:c-heap-size
). The new names more accurately
describe the heap and its use (it is the heap allocated for space
needed by aclmalloc and certain static arrays and related things). It
has nothing to do with C. generate-application also uses the new
argument names, which are simply passed to
build-lisp-image. The heap
is now refered to in the documentation as the Aclmalloc heap rather
than as the C heap.
The old argument names (:c-heap-size and :c-heap-start) are still
accepted but their use signals a warning. The old environment variable
names and also accepted (the environment variables provide defaults
for the arguments if a value is not specified). Users should update
their code to use the new names. These arguments to build-lisp-image and the associated
environment variables are described in the
section Arguments to build-lisp-image 2: defaults
not inherited from the running image
in building-images.htm.
-
Defaults for :include-locales and :runtime-bundle arguments to
generate-application changed to t. Those arguments to
generate-application
previously defaulted to
nil
. Including the
bundle and the locales in applications is always safer. Only quite
restrictive space considerations (rare with modern computers) should
necessitate not including those files. See
also delivery.htm, where generate-application is discussed in detail.
-
MOP function compute-default-initargs argument list changed:
the MOP
function compute-default-initargs
has had two (undocumented) arguments not specified by the MOP: the
class-precedence-list and the direct default initargs, both calculated
by finalize-inheritance.
Starting in 8.2, compute-default-initargs accepts only one argument; the class. In
specialized methods on compute-default-initargs, the other two arguments can be
re-manufactured thus:
(let ((direct (mop:class-direct-default-initargs class))
(cpl (slot-value class 'mop:class-precedence-list)))
-
*default-external-format* no longer supported. Actually, the
variable
*default-external-format*
has effectively not
been supported since the introduction of locales in version 7.0 but
the documentation incorrectly said it was supported. The value
of external-format arguments
(to open and other
functions) which do not have specific defaults effectively defaults
to (find-external-format *locale*)
(see
find-external-format
and *locale*
).
-
Heap start locations modified for 32-bit Mac and Linux. The
32-bit Linux Lisp Heap Start is changed from 0x71000000 down to
0x20000000, while the C Heap Start of the C heap on 32-bit Macs is
changed from 0x64000000 to 0x74000000. Both changes give the Lisp heap
more room to grow. You can modify the heap start locations by building
new images (see building-images.htm. Even though
this change is in the non-backward-compatible section, it is unlikely
that any users will be adversely affected.
-
New initial values for *trace-print-length* and
*trace-print-level*.
*trace-print-length*
now has initial value 25
(previously nil
); *trace-print-level*
now has initial value 5
(previously nil
).
-
Changes to the symbol implementation. In order to better
support SMP, symbols have changed their shape and access style.
Instead of 3 AUs (Allocation Unit = 2 natural words) symbols are now 4
AUs in size. The symbol-value-vector is still accessed via the symbol
indirectly (but through a different slot), and accesses to values
through this vector are still independent per-thread, but the access
method has changed.
Also, (and the primary reason for this change) the global-symbol-value
access has changed to be a direct access from within the symbol
itself. The first fullword slot of a symbol is the value slot (it is
the second word, since the first word has a type code in it). The
value slot now serves as the global value slot - i.e. that location
that stores the symbol's value when the symbol isn't bound by a lambda
or let form in the current thread. Originally, the global-value cell
was the first entry in the symbol-value-vector, which might be
reallocated if it needs to grow for more threads - this would have
presented a strong challenge and a likely harsh slowdown for atomic
global-symbol-value accesses, and it would even have required accesses
to known-bound symbols to be locked. Now, global-symbol-value reads
and writes can easily be made atomic because there is no indirection
and no possibility for the re-allocation of the object that holds the
global slot.
This change does not affect most users, but users who, for example,
reference symbols from foreign code using the specification in
the misc/lisp.h file will have to modify their code.
-
New function for source debugging. The functions
validate-lisp-source and print-function-meta-info provide information
about source-level debugging.
-
New Operating System Interface functions: fdatasync,
which synchronize the in-core parts of a file to disk,
and sysconf, which gets configuration
information at runtime (such as the allowable number of open files).
-
Macro with-breakpoints-installed renamed
with-ldb-stepping-enabled. The name change to with-ldb-stepping-enabled better reflects the
functionality. The old name can still be used but we recommend using
the new name.
-
Inspector now tracks the right margin. The TTY inspector, used
except when the IDE is running, now uses the value
of
*print-right-margin*
to decide how much data to display. See The inspector and the right margin
in inspector.htm.
-
New default values for *tenured-bytes-limit*. The default value
for
*tenured-bytes-limit*
(which is the number of
bytes tenured that trigger a global gc) has been changed from 8 to 20
Mbytes in 32-bit Lisps and 16 to 50 Mbytes in 64-bit Lisps.
-
in-package converts symbols used for string designators to
uninterned symbols. It has long been true (although not previously
documented) that the macroexpansion of defpackage has converted symbols used as names
to uninterned symbols. Starting in release 8.2, the macroexpansion
of in-package
does this as well. See cl:defpackage and cl:in-package
in implementation.htm for details and a discussion
of why this is useful.
-
New generic function file-character-position:
file-character-position determines
the current character position of a stream and returns it, returning
nil
if the value cannot be determined or does
not make sense.
-
New condition purespace-write-error signaled when an attempt is
made to modify a constant string in a pll file. See
purespace-write-error
for
details. Such modification attempts have always signaled an error, but
until this release just a simple-error
.
-
New tar facility. This facility, actually added as a patch in
version 8.1, allows the contents of tar file to be
extracted. See tar
support in Allegro Common Lisp
in miscellaneous.htm.
-
class-precedence-list available as a slot value before
mop:class-precedence-list can access
it. mop:class-precedence-list signals an error if called
before a class is finalized, but the class-precedence-list is
available as a slot value --
(slot-value class
'mop:class-precedence-list)
as soon as it is calculated by
mop:finalize-inheritance, which might be well before the actual
finalization. See class-precedence-list: when is it
available? in implementation.htm.
-
SOAP notes:
SOAPAction
header is now
conformant - earlier version failed to place string quotes around the
value. XMLDecl
is now (correctly) optional -
earlier versions signalled an error if this item was absent in the
SOAP message. Many SOAP examples were pointing to obsolete web
services. These examples are now deleted or commented
out. See soap.htm for documentation on SOAP.
There are no entries at this time. Information may be placed here in
documentation updates after the initial Allegro CL 8.2 release.
The CLIM manual has not been updated (other than minor corrections)
for the 8.2 release. There have been no significant changes to CLIM
functionality compared to 8.1, though there have been bug fixes and
performance enhancements.
(Repeated mostly from 8.1 Release Notes.)
The documentation for CLIM is in an online PDF file, clim-ug.pdf.
On Linux and FreeBSD, Allegro CLIM works with Open Motif 2.1 and
2.2. Open Motif 2.2 is available at no charge
from www.openmotif.org. Allegro
CL 8.2/Allegro CLIM will work with either version. Redhat Linux 7.2 is
supplied with Lesstif, a version of Motif that does not work with
CLIM. See the Linux architecture specific information in the
Allegro CL
FAQ for information on how to install Redhat Linux 7.2 without
lesstif and how to uninstall lesstif if already present. On all other
Unix platforms, CLIM uses the platform-supplied Motif.
Certain CLIM demos on Solaris 64 bit give segv or otherwise fail
when displaying over the network, language environment must be set to
C. This is a problem when running any Sun GUI (such as the CDE
environment or the Gnome 2.0 interface) on a Solaris64 machine. When
bringing up the environment, set the language/locale to "C". (On the
login screen, there's an "Options" button, which displays a menu that
has a "Languages" submenu. Choose "C". Note: the default value is
typically "en_US".) The "C" setting can process all of the 64-bit
font sets. However, difficulties arise when displaying over the
network. If you are displaying on the monitor of the machine running
Allegro CL (and CLIM), the demos work as long as the language/locale
is "C". They typically do not work when displaying on a monitor over
the network. As of this writing, there is no fix for the problem.
Common Graphics and the IDE and now available on
macOS. See Section 8.1 Common Graphics and the IDE on the Mac for more
information.
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 8.5 IDE release notes and its
subsections provide information about the IDE.
Common Graphics and the IDE and available on the Mac. 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.
The look has changed, with a new Franz icon and new icons for various
operations. The Project Window toolbar is now all related to
programming and widgets have been moved to their own
floating Widget
Palette.
-
New split-bar widget. The
split-bar
control can be used to allow the end
user to interactively resize multiple tiled windows panes, or to move
and resize groups of widgets.
-
New widget palette. Widgets are displayed on a floating palette
rather than on the Project Window. A new item on the Form menu
displays this pallette, see Form | Show Widget
Palette. See also show-widget-palette-when-click-form.
-
Enhancements to IDE projects allows easier handling of
subprojects:
see Section 4.6.1
Subprojects in the IDE User Guide.
-
New Install IDE menu. The Install menu has an item New
Patches for getting patches (replacing Help | Download
Patches, which is no longer present) and items for updating
AllegroCache and AllegroStore.
-
New graph-layout and related functions. A new grapher utility
function graph-layout
calculates how to create a graph from nodes and links. It does not do
actual drawing. Instead, it calculates the information necessary for
the graphing program.
-
The various breakpoint menu items on the Run menu now relate to the
stepper dialog rather than tracing. See the Run menu for details.
-
The tabs property now uses character widths as units for
text-editing controls. tabs used to use pixels as its units for all
controls (tabs applies to
various outline and list controls as well as these text-edit
controls:
multi-line-editable-text
,
text-edit-pane
, rich-edit
, and rich-edit-pane
). Behavior is unchanged for the
outline and list controls, but for the text-edit controls, the units
are now character widths.
-
Using the main keypad Enter key. On the Windows platform, a
virtual-key-down method will
receive more consistent argument values when the Enter key on the main
keypad is pressed while holding down the Alt
key. The key-code argument had been the value of
vk-enter
, which
represents the numeric keypad Enter key, and
the buttons argument was always the value of
extended-key
, regardless
of the actual shift keys that were down. Now
the key-code will be vk-return
and the buttons
argument will be the actual shift keys that were down. This would also
affect comtab keystrokes defined with set-event-function for the same keys.
-
Right-hand Alt key is (by default) no longer handled by Common
Graphics on Windows. The configuration option
reserve-righthand-alt-key
specifies whether the right hand Alt key (somethimes called the AltGr
key) will be handled by Common Graphics or passed directly to the
OS. The initial value of that option is
nil
(meaning pass to the OS). The option did not exist prior to 8.2, and
the right hand Alt key was handled by Common Graphics, as if the
option were true. Thus the initial behavior has changed. This option
affects Windows only.
-
Help | Download patches is now Install | New
Patches. See Install
menu.
-
Minor change is position of
pop-up-menus-for-many-sorted-choices:
the position argument for
pop-up-menus-for-many-sorted-choices
is now relative to the upper-left corner of the interior of the
relevant window rather than just the upper-left corner thus making the
position what is expected for scrolled windows. This is a minor change
and only technically not backward-compatible.
-
Scrollbars for the IDE workspace no longer enabled by default, now
controlled by ide-page-size configuration option. When
use-ide-parent-window was
enabled, the IDE workspace had scrollbars. The new configuration
option ide-page-size now
controls whether such scrollbars are enabled. The scrolling commands
on the View menu are
present only if the value of ide-page-size is such that scrolling is
enabled.
-
section-box and cross-section-box incompatibly changed. These
are
grid-widget
functions. section-box has a
changed argument list, with fewer required arguments and with
different meanings (so any call must be rewritten). section-box and cross-section-box now return
nil
when the cross-section is empty (rather
than a box object that has negative size).
-
New generic function cache-cell-values for
grid-widgets. cache-cell-values caches the values for all
cells of
grid-widget
that
are not cached already. This may make scrolling faster and prevents
cell values from being read at unpredictable redisplay times, when it
might not be safe.
-
New Windows-only list-view features. On Windows,
the
list-view
control now
supports check boxes (see show-check-boxes and on-check and the list-view-item
property checked), grid lines (see show-grid-lines), full row selection (see
full-row-select), and
draggable headers (see draggable-headers).
-
Parenthesis and other character matching can be done with a pop-up
window. This feature was added because Windows-style matching does
not work on the Mac
(see Section 8.1 Common Graphics and the IDE on the Mac). The
variable
*show-parenthesis-matches-as-pop-up-window*
controls the behavior. The initial value of that variable is true on
the Mac and nil
on other platforms. Setting
it to nil
on the Mac will suppress matching
behavior. If the value is set to true on other platforms, the marks
will only be visible momentarily (specifically
for *parenthesis-match-pop-up-milliseconds*
milliseconds), which may be preferred by some users.
-
New math utility functions. These function find intersections
of tell when points are on line segments or other objects. The new functions include
line-segment-intersection,
line-segment-intersection-x-y,
line-segment-intersects-box-p,
line-segment-intersects-box-x-y-p,
line-x-at-y,
line-x-at-y-x-y,
line-y-at-x,
line-y-at-x-x-y,
radial-line-box-intersection,
radial-line-box-intersection-x-y,
radial-line-circle-intersection,
radial-line-circle-intersection-x-y, and
on-line-segment-x-y-p.
-
New box functions. box-center-x and box-center-y return the (integer)
vertical/horizontal midpoints of a box. center-to-box and center-to-box-x-y returns a box centered at a
specified point.
-
New tab-side property controls where tab-control tabs are
located. tab-side can be
:top
(the default), :bottom
,
:left
, or :right
. The associated
tab-control
will have the
tabs on the specified side. (See tab-side page for information about this
property on Windows XP.)
-
Home and End keys will scroll to the top and bottom of the
scrollable canvas when handle-scrolling-keys is true. See
handle-scrolling-keys.
-
set-first-visible-line now works on scrolling-static-text. See
set-first-visible-line and
scrolling-static-text
.
-
New plot-view regression-line option. Regression lines can now
be drawn on
plot-widget
s,
using the plot-view
property draw-regression-lines. Associated properties
control the appearance of regression lines.
-
New marker-lines property of chart-axes. The marker-lines property of a
chart-axis
places lines at specified locations.
-
New configuration property ignores redundant mouse moved
calls. If the configuration property ignore-redundant-mouse-moves is true (as it is
by default), mouse-moved will
not be called if the X and Y coordinates of the mouse position are
unchanged, even if the system detects mouse movement. (There are
reports of bogus calls to mouse-moved when using the Emacs-Lisp interface
and this property suppresses those calls.)
-
New configuration option
invoke-web-browsers-with-keystrokes. The
invoke-web-browsers-with-keystrokes
configuration option determines how the function
invoke-private-html-browser
invokes a third-party HTML-browsing program on the Windows
platform. If true, the system simulates typing a URL into the
browser. Otherwise it invokes the browser by other means.
-
New function scroll-window-to-middle centers contents of a
window. scroll-window-to-middle is a convenience
function scrolls a window as needed so that equivalent amounts are
scrolled off the left and right sides, and off the top and bottom
sides.
-
draw-arrowhead now returns the location at the base of the
arrowhead. draw-arrowhead
returns two value, the x and y coordinates of the base of the
arrowhead, allowing you to only draw the arrow line to the base and
not thereby obscuring the tip when the line is thick.
-
New items on View | Manage Windows
submenu: View | Manage Windows has new
items Initialize Window Location and Initialize All Window
Locations which moves and resizes the currently selected or all
IDE windows to the original location and size.
-
New app property default-error-handler-for-delivery. The
default-error-handler-for-delivery
property allows you to customize behavior when an unhandled error
occurs in an application. The description of the property has examples
of what you might do. Also defined is the default handler
report-unexpected-error-and-exit.
The Advanced tab of
the Project
Manager dialog has a widget for this property
labeled Default Error Handler for Delivery.
-
New event handlers for back and forward mouse
buttons. mouse-back-down,
mouse-back-up,
mouse-forward-down, and
mouse-forward-up have as
values functions that are called when the back/forward button is
pressed/released. Microsoft calls these buttons X button 1 and 2. The
forward and back button on ThinkPads also call these functions when
pressed/released.
-
chart-axis labels may be angled on Windows. See
major-label-angle and
minor-label-angle for
details. This is available on Windows only.
-
Color aliasing and gradients supported when drawing on
Windows. There are numerous variables and properties associated
with this new feature. Start with
*antialiasing*
and *color-gradient-filling*
.
-
New replicate-pixmap generic function tiles a graphical-stream with
a pixmap. replicate-pixmap
acts like copy-to-stream
except it tiles the whole area with the pixmap rather than making one
copy.
-
New features on Tab Order dialog. The Tab Order dialog has a new button to
sort the tab order vertically by widget position. (This feature was
actually added in release 8.1 in a patch).
-
New normal-exterior function returns the size of the window when in
normal state. normal-exterior takes a window argument and
returns the size (as a
box
object) that window would have if its state were :normal
.
-
New buffer-size argument to ask-user-for-existing-pathname and
ask-user-for-new-pathname. Both ask-user-for-existing-pathname and
ask-user-for-new-pathname have
a buffer-size keyword argument, used only on
Windows. Its default value should suffice for all calls but a larger
buffer size may be specified.
-
Chart-view property values-are-stacked may now have value
:downward. The value
:downward
for
values-are-stacked, a
chart-view
property,
causes chart-objects to be
stacked in reverse order, which, when chart-orientation
is :vertical
, would match the direction in which
the objects are listed from top to bottom in the chart's legend.
-
display-html can also post. display-html, which displays an HTML text file
(or a plain text file) or a web page, can now display text specified
as part of the uri-or-path argument.
-
The inspect dialog now handles a mouse's back and forward
buttons. See the Inspect dialog.
-
New item-list option select-on-multiple-characters. See
select-on-multiple-characters
which allows you to select from an
item-list
by typing the initial charcaters
(rather than just the first character).
-
New class argument to with-message-window and new message-window
class. By default, with-message-window creates a window of the
message-window
class but
you can subclass message-window
and specify that subclass if you
want a different appearance.
-
New keystroke for moving to previous expressions in an IDE
listener. In an IDE listener (like the Debug window), you can scroll through
previously-evaluated forms by holding down the control and alt keys
and pressing the up and down arrow keys.
-
simple-click-toggle now applies to outline widgets. See
simple-click-toggle.
-
string-search and string-replace have new lines-of-padding keyword
argument. The value of the lines-of-padding
argument to string-search and
string-replace should be an
integer (default 0) which specifies the minimum number of lines of
text visible above and below the string match, when possible.
-
New condition class memory-bitmap-not-created. A condition of
type
memory-bitmap-not-created
is signaled if an
error occurs when creating the backing-store memory bitmap for a
window. This typically indicates that not enough memory was available
to create the memory bitmap.
-
New option
map-control-left-click-to-right-click. map-control-left-click-to-right-click
makes clicking the left mouse button while the control key is down the
same as clicking the right mouse button with no keys down, which
mimics one button Mac behavior.
-
New Stepper Dialog steps through
sources. See Stepper Dialog.
-
ide:comtab-report has new argument list (not
backward-compatible). The arguments to ide:comtab-report are now keyword arguments
rather than optional arguments so any call to that function specifying
argument values must be rewritten.
-
The Apropos dialog has some new
columns. The Apropos has new columns for Compiler
Macro (abbreviated Cmp Mac) and Symbol Macro
(abbreviated Sym Mac).
-
ide:source-file-types replaces ide:file-dialog-source-types. Use of
ide:file-dialog-source-types
is deprecated. Use ide:source-file-types instead. These options
determine what file types are displayed initially in various file
dialogs.
-
New handle-multiple-packages-in-buffer configuration
option. The ide:handle-multiple-packages-in-buffer option
specifies whether commands such as Tools | Incremental
Compile and Tools | Incremental Evaluation
will read source code in the correct package even when the editor
buffer contains multiple in-package forms for different packages.
-
New editor-string-search-lines-of-padding configuration
option. The ide:editor-string-search-lines-of-padding option
specifies the numbers of lines scrolled into view (if possible) above
and below a string match in an editor buffer.
-
New ide-priority configuration option. The ide:ide-priority option controls the
mp:process-priority of the IDE
process. It can be set using the Run | Prioritize IDE
Response menu command, or with setf. Its value is initially 8 which make the
IDE process have higher priority than other processes (created in the
default manner). This makes the IDE more responsive but may slow down
other applications. You can toggle the value to 0 to make other
processes more responsive.
-
New IDE option for using color-gradients and anti-aliasing in
tree-graphs. ide:use-color-gradients-in-tree-graphs, if
true, binds
*color-gradient-filling*
to true while drawing
various IDE graphs while ide:use-antialiased-text-in-tree-graphs binds
*antialiasing*
to true
when drawing the text in nodes of those graphs.
-
all-files has new arguments. New keyword arguments
to all-files (which returns a
list of files in a project) control the contents and order of the
files returned.
-
New generic function editable-files. editable-files, like distributed-files, takes a project and returns
the editable files included in that project.
-
New function use-trace-dialog-in-this-process causes the current
process to send its output to the Trace Dialog. The output will be
directed there while the Trace Dialog is present. Most IDE
processes alread do this Run | Run
Project). use-trace-dialog-in-this-process allows you to
redirect output from other processes.
-
New generic function ide:sample-initargs specifies defaults for a
widget being placed on a form. ide:sample-initargs is called when a widget is
being placed onto a form window, to determine the sample property
values that it will initially have.
-
New generic functions allow displaying the Inspect dialog even when
IDE is not running. ide:ide-inspect and
ide:ide-inspect-standalone
display the Inspect even when the IDE is running
(but is loaded).
-
Enhancement to the Find in Files dialog. There is a new
matching test lines field which shows the particular text lines in the
file which is selected, perhaps allowing you to see whether the
matches are of interest. See the description of
the Find In
Files dialog.
-
Widgets in Trace dialog can be
resized. The Trace
Dialog now contains
split-bar
widgets that allow widgets in the
dialog to be resized.
-
New option shift-windows-onto-screen-at-startup. If
shift-windows-onto-screen-at-startup is true
(the default is true, which was the previous behavior) allows you to
control whether windows postion out of view should be moved into
view. Occasionally, that is not desirable and can now be suppressed.
Allegro CL 8.1 projects should open without problem in Allegro CL
8.2.
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.
Mozilla support
The system needs to know the directory where the GTK control supplied
by Mozilla to support the html-widget
resides. (On windows, the widget is
implemented in another way.) It may not be practical to search for the
location automatically. See mozilla-library-path, *mozilla-library-path*
, and find-mozilla-gtk-path.
Event handler processes
Because Linux currently does not use native threads and Windows does,
on Windows, all windows handle events in their own thread associated
with the window while on Linux/GTK, there is one event-handling
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
-
New function override-native-shortcuts. override-native-shortcuts allows you to override
GTK shortcuts. Doing so makes menus less visually attractive but
prevents shortcuts from overriding modality of dialogs and other minor
inconveniences (see the description for all details).
-
Linux has a built-in hand cursor, which is the value of
hand-cursor
. That variable is
nil
on windows. (find-cursor
:hand-cursor)
works correctly on both,
-
Linux pixel size issues: because Linux/GTK seems not to have a
reliable notion of pixel size, the functions pixels-to-points, points-to-pixels, and font-pixel-height are provided. They work on
Windows but are usually not necessary.
-
Timer resolution on Linux/GTK: see
*cg-timer-resolution*
.
-
Check marks in menus: on Linux/GTK: you must specify at
creation time whether a menu-item will ever be checked. See checkable.
-
Modal dialogs: when displaying a modal dialog, the owner window
is usually disabled. On GTK, this may take too long.
*modal-dialogs-disable-owner*
handles this.
-
f10 key: it requires special handling on Linux.GTK, see handle-f10.
-
Scroll increments: the new function scroll-increment is needed on Linux/GTK. It
works on Windows but there it is essentially the same as user-scroll (which does not work on
Linux.GTK).
-
Using the IDE parent-window: issues of mixing windows from
various applications are more complex on Linux/GTK than on
Windows. See the functions use-ide-parent-window, maximize-ide, ide-exterior, and top-ide-window, and the classes
ide-parent-window
, ide-child-window
, and ide-owner-window
. The IDE menu item
View |
Maximize IDE (Linux/GTK only) is related.
-
On GTK, the help commands use a third-party browser rather than a dialog
within the IDE. On GTK, the IDE's help facility will no longer
use a CG html browser inside the IDE by default, due to the
unpredictability of the Mozilla GTK widget on which it is built.
Instead, use-cg-html-browser
will default to
nil
so that a standalone
browser is used. If the value of this configuration option is still
true from an earlier release, you may wish to change it to nil
. If use-cg-html-browser is true and the CG browser
fails, the IDE will automatically turn the option off for you, though
it's possible for the IDE to be hung at that point so that you cannot
save the options file. When use-cg-html-browser is nil
, then a standalone Firefox is invoked if use-private-html-browser is true, and
otherwise the URL or file path is simply placed onto the system
clipboard for the user to paste into an HTML browser program.
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.
-
New functions in the windows package access and set the version
info of a file. See win:file-version-info and
win:set-file-version-info. The set function
allows you to modify the version info in the executable file (now just
a copy of a standard Allegro CL executable like allegro.exe)
used by your application so its version info is about your
application. An application executable can also be modified when
copied to the application directory by specifying a value for the
file-version-info keyword argument
to generate-application.
See Section 2.0 Information on changes and new stuff since the 8.2 release for changes since the
release. There were no significant changes at the time of the release.
No significant changes.
CLX (Common Lisp X) provides an interface between Common Lisp and the
X window system. All versions of Allegro CL include a compiled
version of CLX with the distribution. The fasl
file is code/clx.fasl, loaded by evaluating
(require :clx)
. The Allegro CL products CLIM and
Allegro Composer use CLX. Users wanting low-level access to an X
server in Lisp may also want to use CLX. CLX is not supported by
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.