Release Notes for Allegro CL 10.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 10.0 release
4.0 Fasl files are not-compatible between versions and operating systems
4.1 All pre-10.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 9.0 after the initial release of Allegro CL 9.0
7.2 Non-backward-compatible changes in the base Lisp
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 Significant changes in Common Graphics
9.2 Non-backward-compatible changes in Common Graphics
9.3 Other changes in Common Graphics
9.4 IDE release notes
9.4.1 Opening projects from releases prior to 10.0
9.5 Common Graphics and the IDE on the Mac
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 10.0
of Allegro Common Lisp and related products. Many sections are divided
into non-backward-compatible changes (that produce different behavior
in release 10.0 compared to
release
9.0)
and changes
unrelated to backward-compatibility. Note that a bug fix is not
considered a backward-incompatible change even if it does result in
changed behavior because the previous behavior was erroneous.
You may wish to look at the 9.0 Release Notes, included in
this distribution as the file
version-90-release-notes.htm.
This document describes the changes, major and minor,
from 9.0
to 10.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)
.
There is a patch which
exports the symbol
sys::mplog
. Without that patch, you need to
fully package qualify (as unexported) that symbol. All other
functionality is named by exported symbols in the mplog package.
See The
multiprocessing logging (mplog) facility
in miscellaneous.htm.
-
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
described in the section
Websocket
API in miscellaneous.htm. There are two new
generic functions
websocket-published-plist and
websocket-state and
open-websocket have new keyword
arguments. The required argument to
open-websocket, left out of the
previous documentation, was not correctly documented.
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. It is described in the section
Websocket
API in miscellaneous.htm.
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. See Strict
external formats which do not allow improper characters
in iacl.htm for more information. New functionality
associated with the
:utf-8s
external format is
described there. This change applies to releases 10.0 and 10.1
but not to release 9.0.
-
Mouse wheel support for GTK. This was actually added some time
ago but the documentation was not updated. It is
now. See mouse-wheel,
mouse-wheel-present,
and mouse-wheel-scroll-lines.
The following changes have been implemented by patches and/or updates
since the initial release of Allegro CL 10.0. See sys:update-allegro for
information on getting patches and updates.
-
sys:lispval-storage-type has new :stack-allocated
type. Objects which reside on the stack are identified
as
:stack-allocated
by
sys:lispval-storage-type.
Note that on a non-os-threads Lisp the value may be seen
as :stack-allocated
even if it is outside of the
stack it resides and should have been
called :static
.
-
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 information
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.
-
with-output-to-buffer now accepts :growable as a value of the
buffer argument. The lambda list for the macro
with-output-to-buffer
is
((var &optional buffer &key external-format)
forms)
. Specifying the buffer
argument to be nil
is different from not
specifying it at all (specifying it nil
means
do not create a buffer, just count octets written, while not
specifying a value means create an extendable array as the
buffer). However, when a value was specified for
the external-format keyword argument, there was
no way to get the unspecified behavior since some value must be given
to buffer. That is now fixed. The
value :growable
is equilivent to not specifying a
value.
-
JSON-RPC API: JSON-RPC is lightweight remote procedure call
protocol similar to XML-RPC. The new JSON-RPC module in Allegro CL
provides an API within Lisp to
JSON-RPC. See The
JSON-RPC API in miscellaneous.htm for
more information.
-
string-to-native and octets-to-native have new keyword
arguments. A patch released in 2015 changes string-to-native and octets-to-native (both of which copy data
either to static space or to a specified location) so that both have
new result-vector
and null-terminate keyword arguments. The
first allows users to specify that the data should be copied to an
existing vector. The second controls whether of not the copied data
will be null terminated. result-vector
defaults to
nil
and null-terminate defaults
to t
. These default values mean the behavior
of these function when the new argument are not specified is
unchanged.
fasl files (compiled Lisp files) created by
releases of Allegro CL prior to 10.0
will not load into Allegro CL 10.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 10.0 uses the 9.0 installation
procedure:
Installation is described in
installation.htm.
-
The distribution includes 8 bit and 16 bit character images
(this information is repeated from earlier Release Notes). Allegro CL
has images that support 8 bit characters only, or 16 bit
characters only. It is our expectation that most users will use the 16
bit images. Executables supplied with the distribution either have or
do not have `8' in the name. Those with 8 in the name (mlisp8 and
alisp8, e.g.) support 8 bit characters. Those without a number in the
name support 16 bit characters. Image (dxl) files also come in 8 and
16 varieties. Again, 8 in the name means 8 bit character
support. Character support for images and executables must
match. Trying to start an executable with the wrong type of image
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 10.0 is known to work with the following minimal operating
system versions. Allegro CL 10.0 runs on all operating system versions
released (not in beta or pre-release form) July 1, 2015. 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.9
-
64-bit Linux (x86-64), glibc 2.11
-
64-bit Microsoft Windows Vista/7/8 &Server
-
64-bit Sun Solaris (SPARC) 10, also called 2.10 (no SMP version)
-
64-bit Sun Solaris (x86-64) 10, also called 2.10 (no SMP version)
-
FreeBSD 9.1 (SMP only)
32-bit platforms
-
Apple macOS (Intel) 10.9
-
FreeBSD 9.1 (no SMP version)
-
Linux (x86), glibc 2.11
-
Microsoft Windows Vista/7/8 & Server
-
Sun Solaris (SPARC) 10, also called 2.10 (no SMP version)
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 10.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.5 Common Graphics and the IDE on the Mac for more
information. Both the IDE and CLIM require certain tools (X11, GTK,
Open Motif) which may have to be installed
separately. See Installation on macOS
in installation.htm for details.
The Runtime Analyzer (see runtime-analyzer.htm)
does not work properly on the 64-bit macOS port (there is no
problem on the 32-bit port).
Building shared libraries on macOS
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 10.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 10.0 as delivered.
Values are Hexadecimal integers.
Operating System |
Lisp base |
C base |
FreeBSD 32-bit |
0x40000000 |
0xa0000000 |
FreeBSD 64-bit SMP |
0x10000000000 |
0x80000000000 |
Linux (x86) 32-bit |
0x20000000 |
0xa0000000 |
Linux (x86) 32-bit SMP |
0x20000000 |
0xa0000000 |
Linux (AMD64) 64-bit |
0x10000000000 |
0x80000000000 |
Linux (AMD64) 64-bit SMP |
0x10000000000 |
0x80000000000 |
macOS 32-bit |
0x20000000 |
0x74000000 |
macOS 64-bit |
0x1000000000 |
0x80000000000 |
macOS 64-bit SMP |
0x1000000000 |
0x80000000000 |
Windows 32-bit |
0x20000000 |
0x54000000 |
Windows 32-bit SMP |
0x20000000 |
0x54000000 |
Windows 64-bit |
0x100000000 |
0x8000000000 |
Windows 64-bit SMP |
0x200000000 |
0x8000000000 |
Solaris 32-bit |
0x4000000 |
0x54000000 |
Solaris 64-bit |
0x1000000000 |
0x80000000000 |
Solaris (AMD64) 64-bit |
0x1000000000 |
0x80000000000 |
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).
Major changes
The following are major changes in version 10.0.
1. New garbage collection algorithms. There are three significant enhancements to the garbage collector:
-
Support for using multiple threads while gabarge
collecting. The system can use multiple threads when garbage
collecting. This is clearly faster in SMP Lisps because the
threads run concurrently but it is faster even in non-SMP
Lisps. See Using
multiple threads in global gc's
in gc.htm for more information.
-
Better algorithm for gc'ing items on the stack. Because variables on the stack are not initialized (since doing so would significantly slow execution speed), there may be pointers to objects which are in fact garbage from the associated uninitialized stack frames. In earlier releases, these pointers were considered valid and so the objects they pointed to were considered live. Now, with better bookkeeping, most such pointers are identified as not current resulting in the dead objects they point to being gc'ed. See Precise gc's of the stack
in gc.htm for more information.
-
Support for skipping time-consuming steps when the benefit is
low. When a global gc is performed, it ends with adjustment and
compactification phases which consolidates available space in
oldspace into larger blocks. While this maximizes the amount of
useful space available, these are the most time consuming steps of a
global gc. Now, the system estimates how much space will be saved by
these steps and if the amount is less than a user-settable value,
the steps are skipped. See Assessing whether the adjustment and
compactification phases are justified
in gc.htm for more information.
In general, no action is required by users to take advantage of the
new features. The exception is careless dynamic extent declarations
(where objects were used outside the actual scope of the declaration)
can result is data being overwritted. See The LIFO section of the stack and dynamic-extent
declarations in gc.htm for an example and
more information.
If for some reason you wish to diable the new features
(other than number 2, precise gc'ing of the stack, which cannot
be disabled), instrucions for doing so are given in the
documentation linked to in the feature description.
See gc.htm for a general description of the
garbage collector (the links in the list of new features above
go to specific sections in that document). The new function
sys:gc-parameters
provides information about parameters relevant to the new
features. The functions sys:gc-parameter and
sys:gc-switch can be used to
poll specific parameters and switches and (with setf) set those that can be
changed. (The older functions
sys:gsgc-parameters,
sys:gsgc-parameter, and sys:gsgc-switch are obsolete and should
not be used, although they are still defined.)
2. Full hierarchical packages. Allegro CL has for some time
supported hierarchical packages, allowing packages with names like
foo.bar.baz
to be referred to
as .bar.baz
when in the foo
package and .baz
when in
the foo.bar
package. But the implementation was
still a flat naming system. One result was that you could not (without
defining lots and lots of additional nicknames) use nicknames in the
hierarchy. So defining the common-lisp-user.foo
did
not mean that cl-user.foo
also named that package,
even though cl-user
was a nickname of the
common-lisp-user
package.
Starting in release 10.0, Allegro CL supports full package
hierarchy. Package nicknames can be used in this
hierarchy. See Hierarchical Packages
in packages.htm.
Other new features
-
Package alternate names. Allegro CL has for some time allowed
package nicknames to be printed instead of the package name because
usually the nickname is shorter. So when
*print-nickname*
was true, nicknames would be
used when a package name had to be printed. The nickname used was the
first name in the list of nicknames. However, it was pointed out that
a package name could not also be a nickname, and so packages with
short and convenient names, like excl
, could not
have any nicknames as one of them would be used
when *print-nickname*
was true. In 10.0, this has been revamped. Packages now have an
alternate name, which can be the package name or one of the
nicknames. The alternate name must be specified at package creation
time. Both defpackage
and make-package have
an :alternate-name
option/argument, as described
in Extensions to cl:make-package,
cl:disassemble, cl:truename, cl:probe-file, cl:open,
cl:apropos and cl:defpackage and cl:in-package, both
in
implementation.htm. If an alternate name is
not specified, the first nickname in the nickname list is used, or the
package name if there is no nickname. *print-nickname*
is now obsolete and should
not be used. *print-alternate-package-name*
controls
whether the package name or alternate name is used by the
printer. package-alternate-name returns the
alternate name for a package (whether the alternate name specified
when the package is created or the default name used when no alternate
name is defined.)
-
string-to-universal-time and universal-time-to-string enhanced to
include dates outside universal time range including negative
years. Both string-to-universal-time and
universal-time-to-string
have been enhanced to accept dates outside the universal time range
(which start midnight, January 1, 1900 GMT). Even negative years (BCE
dates) are accepted. Only
:w3cdtf
format dates can
be outside the universal time range.
-
New functions encode-extended-time and
decode-extended-time. encode-extended-time and decode-extended-time are versions of
decode-universal-time and
encode-universal-time that
work with year outside the universal time range (midnight, Jnauary 1,
1900, GMT and later). Both functions work with negative years (as
input to
encode-extended-time and
output from decode-extended-time). Note that the two year
abreviation for recent and near future years in the universal time
functions (so in 2015, year 90 means 1990 and year 25 means 2025) is
not supported for these functions -- 90 means 90 CE, 25 means 25 CE,
both which years are during the Roman Empire and the Han period in
China.
-
Some compiler explantions have been revised. Because of new
handling of the stack, some messages associated with tail merging and
self tail merging have been revised and a new one has been added
(Mnotc). See compiler-explanations.htm for a list
of such messages and their interpretation.
-
New function excl:current-thread, sys:*current-thread* is
deprecated. excl:current-thread returns the thread
object which is currently running. It should be used in place of
sys:*current-thread*
, whose use is
deprecated.
-
The runtime analyzer can now report real time as well as CPU
time. The runtime analyzer can now run with
type
:real-time
(in addition
to :time
, :space
, and
:count-only
). In :real-time
mode, hits come in real time rather than CPU time, and marking of time
depends on CPU load and other factors. See prof:start-profiler and
runtime-analyzer.htm for more information. The
IDE's Runtime Analyzer
Control dialog has a Real Time radio button to specify
real-time profiling.
-
New trace logging facility. A new tracing facility stores trace
information to an internal structure rather than printing it. This
allows for better control in the presence of multiprocessing and also
distorts timing less since there is no I/O overhead. See
See Memlog: A Facility for
Minimally Intrusive Monitoring of Complex Application
Behavior in smp.htm for more information.
-
Enhanced source-level debugging information. The quantity of
source-level debugging information has been increased and its nature
has been enhanced. This information is collected when the
compiler-switch
comp:save-source-level-debug-info-switch
is true (see the description of that variable for information on when
it is true). Collecting this information does increase stack use
during compilation. If you run into problems with stack overflow
during compilation, evaluate (setq
comp:save-source-level-debug-info-switch nil)
to suppress
source debug information.
The following items were included by patches in Allegro CL 9.0 (and
some in Allegro CL 8.2) after the release of 9.0 and therefore were
not in the original 9.0 documentation. All are part of 10.0 and the
10.0 documentation. Some changes to 10.0 are also backported to 9.0
and/or 8.2, and thus added to the release notes for those products,
but those changes are documented in other sections of this document.
-
New EC2 implementation: the interface to the Amazon Elastic
Compute Cloud (EC2) was updated. The API version support is moved to
version 2014-09-01. See ec2.htm for further
information.
-
A new for-as-in-sequence subclause for the loop
macro. The loop
macro now supports a
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.
-
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.
-
jLinker update: a patch 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+
.
-
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. These are
included in 10.0.
-
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.
-
Some MySQL changes. A
new client-flags keyword argument
to connect was added in
an patch. 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 major jLinker
upgrade. A major 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.
-
regexp update fixed 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 of
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.
-
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 update 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).. An released for 9.0
and included in 10.0 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.
The following changes result in different behavior in Lisp compared to
earlier releases.
-
tenuring returns the values of the last body form rather than the
first. The tenuring
macro now evaluates its body as if in a progn, and so the values of the last
form are returned. In earlier releases, it evaluated the body as if in
a prog1, so the
values of the first form were returned.
Listed are other changes to Allegro CL.
-
dumplisp now allows specifying a header. dumplisp now has a
dxl-header keyword argument which
specifies a file whose contents are used as the header. The header can
be viewed by Unix utilities like head and more. The
header must be in a specific format (it must contain octets and be an
exact multiple of 8192 octets long, with a maximum size of (* 9 8192)
octets, and its first character must be one of the characters in the
range from #\1 to #\9). The function dribble-for-dxl-header will produce a file
suitable for a dxl header from a Lisp dribble.
-
New top-level commands :register and
:set-register. :register
prints the value of a register when debugging a frame with saved
context. :set-register sets the value.
-
excl-osi:with-stream-lock now has a wait
keyword argument. On systems that support file
locking, with-stream-lock executes its
body with a lock on its stream argument. In earlier releases, it would
always wait until the lock could be acquired. Now there is
a wait keyword argument which specifies
whether to wait or to signal an error if the lock is not immediately
aacquired.
-
New stream timeout functions stream-input-timeout and
stream-output-timeout. The generic functions stream-input-timeout and
stream-output-timeout can be
used to put timeouts on streams waiting for input or output. This is
most useful in socket code. Using these functions has the advantage
over wrapping in a mp:with-timeout form because the
timeout is more sepcific.
-
db:frame-reference-p will identify bogus frames. For a variety
of reasons, certain things on the stack that look like frames are not
in fact valid frames. Attempting to treat them as valid frames can
cause an error. The function db:frame-reference-p
tests whether a frame is valid. When operating on frames (with, for
example, the functions listed in debugger-api.htm),
testing validity first with db:frame-reference-p
is recommended.
-
New function hash-primify. hash-primify takes a fixnum and, up to
specified limits, returns a prime number greater than the argument
value. Above the limit, it returns a number not divisible by 2, 3, 5,
or 7. The value is suitable for a hash-table size.
-
New generic function excl:mapped-file-simple-stream-buffer. The
generic function excl:mapped-file-simple-stream-buffer returns
an aligned pointer when passed
mapped-file-simple-stream
.
-
New types keyword argument to dbi:run-prepared-sql. This new
argument to dbi:run-prepared-sql allows specifying
the return type.
-
New warning class
excl:compiler-free-reference-warning.
compiler-free-reference-warning
is signaled
when the compiler encounters a variable it does not recognize (and
thus assunes is special). A warning has always been signaled but in
earlier releases, it was a simple warning.
-
prof:*maxsamples* initial value is now
most-positive-fixnum.
prof:*maxsamples*
specifies the maximum
number of samples that will be collected by the runtime analyzer
(see runtime-analyzer.htm). The analyzer will
stop collecting samples when prof:*maxsamples*
have been collected
even if stop-profiler
has not been called. In earlier releases, the initial value
of prof:*maxsamples*
was 100,000. Now it is
most-positive-fixnum
(which, note,
has different values in 32-bit Lisps and 64-bit Lisps).
-
make-random-state allows additional values for
the state argument. The Common Lisp function
make-random-state
takes a state optional argument. The value in
ANSI Common Lisp can be a
random-state
, t
,
or nil
. Allegro CL now allows the value to
also be an integer (which will be used to seed a new random-state
object) or the keyword :entropy
, which will use
other programs available on the computer to seed a random-state
object. Because state is now allowed to have
these additional values, the seed argument (the
second optional argument, an Allegro CL extension) is no longer needed
and its use is deprecated. See the description of the Allegro CL
implementation of make-random-state
in cl:random and
cl:make-random-state
in implementation.htm.
-
The :step command in ldb mode has more options.
The :step in ldb mode has revised
options, including an N argument to the
:step :cont
to allow serveral steps at once, a slide-dir
argument which directs the stepper how to deal with macroexpansions
and forms.
-
Changes to SOAP interface. There are new keyword arguments
to make-client-interface
(op-is-action) and encode-wsdl-file
(use) and new generic functions soap-sent-string
and soap-received-string. See soap.htm
for information on the SOAP interface.
-
New class keyword argument to mkstemp and with-open-temp-file OSI
functions. The class keyword argument can be
used to specify the class of the stream being created. It defaults
to
file-simple-stream
. See
mkstemp and
with-open-temp-file.
The following at SMP-related changes.
-
New lisp_focus function in gdb interface. The gdb interface now has a
lisp_focus() function which specifies which thread has
focus. See gdb (or
windbg) interface in debugging.htm for
more information.
There are no entries at this time. Information may be placed here in
documentation updates after the initial Allegro CL 10.0 release.
The CLIM manual has not been updated (other than minor corrections)
for the 10.0 release. There have been no significant changes to CLIM
functionality compared to 9.0.
Common Graphics and the IDE are supported on Windows SMP Lisp but
are not supported in SMP Lisps on the Mac and Linux. They are
supported in the non-SMP Lisps on Windows, Linux, and the Mac (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.
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.4 IDE release notes and its
subsections provide information about the IDE.
-
load-pixmap can now load pixmaps in many formats on Windows, not
just BMP. load-pixmap now
uses (when the new keyword argument use-gdi-plus
is true) the newer GDI+ API of Windows, where Windows can load a
variety of types of pixmap files itself. (Previously, pixmaps on
Windows were loaded using specialized Lisp code which decoded BMP
files.) On any platform, files of type BMP, PNG, JPG, GIF, and TIFF
can be loaded files ICO files can be loaded on
Windows. See load-pixmap.
-
New calendar widget. This new widget displays a calendar and
allows user to choose a date. It is similar to the the Microsoft OCX
DatePicker, but is implemented in Common Graphics and works on all
supported platforms. See the description on the
calendar
widget page. The new
function ask-user-for-date
uses this widget. The numerous property accessor functions associated
with this widget and its related classes are all linked to on
the calendar
page.
-
Alpha blending of colors is now supported on Windows. The new
variable
*alpha-blending*
, which is used only on Windows,
specifies whether displayed colors should be alpha blended, which
means that drawing or filling functions will blend the newly drawn
color with the exiting color. Alpha values are integers between 0 and
255 inclusive, with 255 meaning no blending (new color is displayed)
and 0 meaning no blending (old color is displayed, as if there was no
new drawing), and intermediate values meaning use some old and some
new. See *alpha-blending*
for further
details. make-rgb and
copy-to-stream have
new alpha arguments (a new keyword argument to
make-rgb, a new optional one
to copy-to-stream) which will
specify the alpha blending factor when *alpha-blending*
is true and which are ignored
when it is false (and which are always ignored on platforms other than
Windows).
-
Touch gesture support. On the Windows platform, Common Graphics
provides an interface to Microsoft's support for touchscreen gestures,
which was new in Windows 7 and works the same way in Windows
8. See About Touch
Gesture Support in Common Graphics on Windows
in cgide.htm. See also gesture-event, touch-event and also
two-stroke-mixin
.
These are the non-backward compatible changes in release 10.0.
-
New configuration option
use-mouse-clicks-to-copy-lisp-forms. For some time, it has been
true when editing Lisp code, you could copy a form with
Control-Left-Click when the cursor was at the beginning of a Lisp
form. That ability can now be turned on and off with the configuration
option use-mouse-clicks-to-copy-lisp-forms. The initial
state is off (that is the non-backward compatible change -- previously
it was always enabled). See use-mouse-clicks-to-copy-lisp-forms for
information on how to enable it.
-
New unchecked-pixmap and checked-pixmap properties for
menu-items (Windows only). The new checked-pixmap property can be used to specify a
pixmap to display when a
menu-item
is checked (a default pixmap
is used if this property is nil
). The new
unchecked-pixmap can be used
to specify a pixmap to display when a menu-item
is unchecked (noting is
displayed when this property is nil
).
-
New mouse-in and mouse-out methods for outline
items. outline-item-mouse-in and
outline-item-mouse-out are
called when the mopuse cursor moves into and out of (respectively) an
outline-item
. This allows
doing things like displaying help for the specific item.
-
Hotspots can now have tooltips.
hotspot
s can now have
tooltips. See tooltip and
show-tooltip.
-
New function cg-argument-checking. cg-argument-checking is a boolean
function which originally returns nil but is setf'able. When it
returns true, some Common Graphics functions will check the validity
and appopriateness of their arguments when called. This facility is
usually enabled for development or debugging since it imposes a
performance cost.
-
save-pixmap has new quality keyword argument used when writing JPEG
files. quality is an integer between 0
and 100 inclusive (default 100), specifying a tradeoff value between
image quality and file size. See save-pixmap.
-
Option to disable Microsoft Visual Styles for widgets. The new
widget property disable-visual-styles can be used to disable
Microsoft Visual Styles for a specific widget (dialog item). Visual
Styles reflect the current theme that the user has chosen for their
whole Windows environment. Sometimes this theme can override a
property of a widget, such as its background-color. To stop that from happening,
one can set the disable-visual-styles property of the widget to
true, though this may result in a generally plainer style for that
widget. This property only has effect on Windows.
-
New outline widget property
handle-home-key-shortcuts. handle-home-key-shortcuts allows keys in the
middle of the keyboard (J, K, D, F, T, and B) to have the same effect
as keys often on the right, like the arrow keys, Home, and End when
an
outline
widget
is selected.
-
common-graphics package name and nickname switched. In earlier
releases, the common-graphics package has the
name
cg
and
nickname common-graphics
. Now it has name
common-graphics
and nickname cg
.
-
On GTK, setting the justification (alignment) of a list-view column
now works correctly. Before, setting the justification
(alignment) of a
list-view
column
to :center
or :right
only in the
header cell, leaving the body cells always left-aligned. (This always
worked correctly on Windows.)
-
On recent releases of Ubuntu, where they have
shifted menu bars onto title bars, removing a menu bar from a window
and adding another one left the previous pull-down menus there with
the new ones. This has been fixed.
-
The rubber-banding functions like get-box and get-shape-line sometimes left droppings on the
window if other agents draw content onto the window during the
rubber-banding. This has been fixed. Also, other events will now
continue to be handled when the mouse is not being moved during
rubber-banding.
-
A problem where if pixmaps are created in multiple
processes at virtually the same time and they use the same
texture-info
object, they
could be drawn incorrectly thereafter has been fixed. Please note
that testing of the fix is difficult. If you experience problems,
please report them.
-
A problem where modal dialogs could not be shown on monitors other
than the primary one has been fixed. (It happened
because pop-up-modal-dialog was too restrictive
when ensuring that the dialog is not unseen due to being placed
outside of the screen's coordinate range.
The IDE is supported on the Windows SMP Lisp. It is not supported in
the Mac or Linux SMP versions of Allegro CL 10.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.
-
New IDE option specifies how many backtrace frames to show. The
backtrace-frames-to-show user option
controls the number of frames (function calls) that a backtrace will
initially show when you go into the debugger. The initial value is 50.
-
Save command writes contents of certain dialogs to editor buffers
rather than files. For the Class Browser,
the Trace
Dialog, the Runtime Analyzer
Results dialog, Inspector panes, and the backtrace pane
in Debug
window after an error, the File | Save menu choice writes
the dialog contents to an editor buffer rather than to a file. It is
assumed the most users want to look at the information in the dialog
rather than permanently saving it. User who wish to actually save the
information to a file can save the editor buffer.
-
Large tooltips appear over debug frames and inspector
values. When looking at frames in the Debug Window after an error
and in the Inspect dialog, if values are truncated
because the bound value of *print-length* or *print-level* are too
small, or because there is not enough space, moving the cursor over
the frame or value will cause a large tooltip to appear displaying
more information.
-
ide:build-project has new full-compile keyword
argument. ide:build-project has a new
full-compile keyword argument. It defauls
to
nil
but when true, all Lisp source files
in the project will be compiled even if a fasl file later than
the source file exists.
-
Various tools using outlines can be navigated with main keyboard
keys. The Debug Window after an error,
Class Browser,
Trace,
Runtime Analyzer
Results, and
Allegro Tree of
Knowledge dialogs all are (or contain) instances of the
outline
widget. Because the handle-home-key-shortcuts is enabled for all
these outlines, they can all be navigated quickly by pressing the J,
K, F, and D keys as alternatives to the down, up, right, and left
arrow keys respectively, and the T and B keys for the Home and End
keys.
-
New name for the options file: allegro-ide-options.cl. The
IDE's options (also called preferences) file is now
called allegro-ide-options.cl, and will no longer
append version information such as -9.0 or -express, or a machine name
on Unix. (The old name was prefs-[other info].cl.) The version info
had been appended to avoid errors that could otherwise happen when
starting up an earlier version of ACL after a later version had saved
an options file that included new options that the earlier version did
not know about. That problem is now solved by writing a somewhat
different format to the file that avoids the problem. By using the
same file name for different releases, and continuing to write the
file outside of the Allegro installation by default, your option
values from 10.0 and beyond will continue to be used when upgrading to
future versions beyond 10.0.
-
New item to bring all IDE tool windows into view on the View
menu. The View | Manage Windows item on
the View menu has a
new sub-item Shift All Windows Into View which will ensures all
IDE tool windows are wholly in the parent window or the screen (if the
parent window is not used). Windows are resized only if necessary.
-
New backtrace-safe-mode option. backtrace-safe-mode can be enabled if the
backtrace fails to appear when the Debug button in
the Restarts dialog associated with the Debug window is
clicked. This option does not appear in the Options dialog because it
should in general not be necessary. The description
of backtrace-safe-mode has
code which can be used to enable the option.
-
Local variables are no longer shown by default in debugger
frames. The Debug Window after an error
shows stack frames. When you open a frame for a function call in a
backtrace by clicking its arrow icon on the left (or pressing the
right arrow key), only the arguments that were passed to the function
will be shown when the new include-local-variables-in-backtraces option is
off, as it is by default. When it is on, the local variables (mostly
from let bindings)
are also shown after the arguments. The option can be toggled by
pressing the button for it in the toolbar at the top of a backtrace
pane. The button has an uppercase L on it, and appears depressed when
the option is on. Or you can set the value programmatically using
the include-local-variables-in-backtraces option.
-
use-trace-dialog-in-this-process no longer useful. Use
of use-trace-dialog-in-this-process is deprecated
as of release 10.0 because it is no longer needed. The Trace Dialog
will now always be used for all processes whenever the trace dialog is
present. This function will now simply signal a warning about that.
-
ide:backtrace-print-length, ide:backtrace-print-level,
ide:backtrace-print-circle removed. Those symbols no longer name
operators. They are replaced, respectively, by
ide:dialog-print-length,
ide:dialog-print-level, and
ide:dialog-print-circle, all
of which apply to more dialogs than just the debugger pane in the
Listener. Further, ide:dialog-print-array is also (newly)
defined.
-
The Debug Window has a new Clear History
button. The Debug
Window (also called the listener) has a toolbar at the top
with buttons for a new prompt, completion from history, evaluation and
so on (all described on the Debug Window page). A new button has been
added, to the right of the other button and labeled with a blue X:
Clear History. If clicked, the command history displayed in the drop
down widget on the right of the toolbar will be cleared. This is
useful when using get-objects and get-references, new functions for determining
live objects in the running Lisp image.
-
New menu items on the right button menu over an Inspect
dialog. The Inspect dialog has these new items on
its right button menu:
Inspect Callers (when the item being inspected is an
operator); Inspect Users (when the item being inspected is a
global variable); and Inspect Referencers.
-
Class Browser makes browsing a different class in a new window
easier. The right-click pop-up menu in the outline widget of the
Class
Browser has a new Browse in New Window command to
browse the selected class in a separate class browser dialog.
-
Non-CG/IDE processes will now always invoke the IDE's debugger
rather than the command line interface in the base lisp's listener
window. You no longer need to pass
an
:initial-bindings
argument to make-process (or use with-cg-bindings) in the process to be
debugged, as you did before to make this happen.
-
Problem where project might lose track or a file is fixed
(bug22455). Pointing a project to the new location of a file
that was moved outside of the IDE did not mark the project as modified
to ensure that the change gets saved, and so the project might not
remember the change in the next IDE session. This is now fixed.
-
The runtime analyzer can now report real time as well as CPU
time. See prof:start-profiler and
runtime-analyzer.htm for more information. The
IDE's Runtime Analyzer
Control dialog has a Real Time radio button to specify
real-time profiling.
-
Autoloading messages no longer mess up symbol completion. The
problem where doing symbol completion in the listener might cause
autoloading messages could get printed in the middle of the symbol has
been fixed.
-
When inspecting the arguments and local variables of a function
call in the debugger, the right-click pop-up menu has a new "Sort
Local Variables" to sort the variables alphnumerically.
-
There is a new more basic first CG example in the Navigator dialog
for drawing and handling mouse events. See the Navigator Dialog.
-
The Google Maps example in the IDE's Navigator dialog has been
ported to the current version of the Google Maps Javascript API.
It had stopped working in late 2013 when Google removed support for
the previous version. See the Navigator Dialog.
-
A problem on the Windows platform, where calling (exit) in an IDE
listener or in the console did not fully exit Lisp, requiring that it
be killed with the Windows task manager, has been fixed.
-
Symbol completion and package qualifiers. During symbol
completion, the IDE no longer prints a package qualifier if the
symbol's own package is used by the current package, even if the
parent package is not used by it. Also it prints the package alternate
name if there is one, rather than the main name.
Allegro CL 9.0 projects should open without problem in Allegro CL
10.0.
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.
For complete information on the differences between Windows and GTK,
please see
cggtk-relnotes.html.
This section is repeated from the 9.0 release notes.
Common Graphics and the IDE run on Windows and Linux with
GTK. Certain differences between the two operating systems and
windowing systems mean that some things do not work the same in
Windows as in GTK and vice versa. The functionality listed here
tries to handle the differences. Some of the
variables/operators/etc. are only available on one of the two platforms.
Known bug with menu-items and buttons
GTK Only: all-black menu-items and half-black buttons. There
is still a mystery on the GTK platform where all button widgets can
turn half black along a diagonal line, and all menu-items on some
platforms will be totally black. This seems to happen only when
opening a project from the Startup Action dialog, though, so a
workaround is to not reopen a project from that dialog and instead to
use the Recent menu
or File | Open Project just afterward. We
have tracked the problem down to the use of transparent-pane windows
such as the frame-child of a form window, but beyond that it is a
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.
-
no entries
No notes at this time
No notes at this time.
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.