Release Notes for Allegro CL 9.0
This document contains the following sections:
1.0 Introduction
2.0 Information on changes and new stuff since the 9.0 release
3.0 Fasl files are not-compatible between versions and operating systems
3.1 All pre-9.0 Lisp compiled files must be recompiled (old fasl files will not load)
3.2 Fasl files may be incompatible in different Lisps on same hardware
4.0 Release Notes for installation
5.0 Release notes for specific platforms
5.1 Mac OS X notes
5.1.1 Allegro CL must be updated to work with Mac OS X 10.10
5.1.2 Installing Mavericks OS (Mac OS X 10.9) may break X11
5.1.3 Installing Mountain Lion OS (Mac OS X 10.8) may uninstall X11
5.2 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.2 after the initial release of Allegro CL 8.2
6.2 Non-backward-compatible changes in the base Lisp
6.2.1 New features in Allegro CL 9.0
6.3 Other changes to and notes about the base Lisp
6.4 Multiprocessing and SMP release notes
6.5 Base Lisp platform-specific information
7.0 Release Notes for CLIM
8.0 Release Notes for Common Graphics and the IDE
8.1 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 9.0
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 is a copy of the version 9.0 release notes included with
the version 10.0 documentation, providing release notes for release
9.0 of Allegro Common Lisp and related products. Note: if you are
using version 9.0, you should not refer to this document but to the
current
actual 9.0
Release Notes as this document is simplified and also not updated
for changes to 9.0 after the 10.0 release.
This document describes the changes, major and minor, from 8.2 to
9.0. Please look particularly at these sections:
These changes were made after the initial release of Allegro CL 9.0.
You must update you images to use most of the functionality described
(see sys:update-allegro). Note that this section
is not updated for changes made after the 10.0 release. See the
current
actual 9.0
Release Notes for the latest 9.0 information.
-
New EC2 implementation: an updated interface to the Amazon
Elastic Compute Cloud (EC2) has been released in a patch dated
November 4, 2014. The API version support is moved to version 2014-09-01.
See ec2.htm for further information.
-
Update required to use Allegro CL 9.0 with Mac OS X 10.10.
Allegro CL updates are required to use Allegro CL 9.0 with Mac OS X
10.10. Please see Updating for Mac OS X 10.10
in installation.htm for information. Note that, as
described in the linked section, XQuartz must also be reinstalled.
-
A new for-as-in-sequence subclause for the loop
macro. The loop
macro now supports a
for-as-in-sequence
subclause
which iterates over a list or a simple, general vector. Existing
(standard) subclauses include for-as-in-list
and
for-as-across
(for vector) and this new subclause
combines them, as so allows the sequence operated on to be a list or a
simple vector at runtime. See cl:loop and the for-as-in-sequence subclause for looping over sequences
in implementation.htm. This new subclause was added
in a patch in May, 2014.
-
New universal date parser. New functions
string-to-universal-time and
universal-time-to-string
convert strings denoting times in various standard formats to
universal times and universal times to strings in various
formats. Converting durations to strings is also supported. This is
not part of the date-time module described
in date-time.htm but since the functionality is
related, the General
date to universal time parsers section in that document
describes the new facility. These functions were added in a patch
released in May, 2014.
-
jLinker update: a patch released in April, 2014 made a number
of changes to the jLinker module. There are now several calling
models, including a new calling style where Lisp functions are
generated by analyzing Java jar files or classes. The names of the
Lisp functions are systematically derived from the Java names and
mimic the overloading style used in Java; in most cases, the Lisp name
is easily deduced from the Java name so that perusing a translation
table is rarely needed. The correct Java method to call is determined
at run time by comparing the Lisp argument types to Java
signatures. See Calling Style from Lisp to Java
in jlinker.htm.
-
Major update to SSL socket module. (This change is not related
to the Heartbleed problem described in the next item.) The interface
to SSL sockets has been upgraded. SSL contexts, re-usable objects
which contain configuration values for SSL server and client streams,
are now supported. Contexts are created with
make-ssl-server-context and
make-ssl-client-context. make-ssl-server-stream and
make-ssl-client-stream
now have context keyword arguments which take an
SSL context as a value. Also, the default value for
the method argument to make-ssl-server-stream and
make-ssl-client-stream
is
:tlsv1+
. These modifications were added in a patch
released in April, 2014.
-
Fix for OpenSSL Heartbleed bug available. The OpenSSL
Heartbleed bug
(see https://www.openssl.org/news/secadv_20140407.txt)
requires new library files and application rebuilds. See
the Tech
Corner Article at
https://franz.com/support/tech_corner/heartbleed040914.lhtml for
instructions. Users are strongly recommended to apply this fix.
-
The list value of *global-gc-behavior* should not be used in an SMP
Lisp. The variable
*global-gc-behavior*
controls when and how
often global garbage collections happen. On possible value for this
variable is a list of a positive integer (specifying a number of
seconds), and a real greater than or equal to 1.0 (and optionally a
boolean specifying verbosity). This value is designed to trigger
global gc's after a specified amount of idle time. But idle time is
ill-defined in an SMP Lisp. The list value for *global-gc-behavior*
uses sys:funcall-after-idle-timeout, which, as
the next item notes, should not be used in SMP Lisps.
-
sys:funcall-after-idle-timeout should not be used in an SMP
Lisp. In an SMP Lisp, idle time is ill-defined. The function
sys:funcall-after-idle-timeout, which calls
a function after a specified idle time, should not be used.
-
Documentation for load-compiled corrected. The function
load-compiled, when first
implemented, compiled a file but did not write a fasl file. That was
changed some time ago so load-compiled is a roughly equivalent to
the :cload top-level command
(compiling and loading file). The documentation has been corrected.
-
Enhancement to net.post-office:send-letter. The first argument
to net.post-office:send-letter, the
server specification, can now specify an alternate transport
mechanism, instead of the usual SMTP network
protocol. See net.post-office:send-letter for
details. The patch implementing this cahange was released in early
November, 2013.
-
Some MySQL changes. A
new client-flags keyword argument
to connect was added to
8.2 in a patch but was not documented in either the 8.2 or 9.0
documentation until now. A patch released in early August, 2013,
modified the behavior of the host keyword
argument to connect,
which can now be a list. insert-db now has
an on-dup-keys keyword argument improves handling
when the insert tries to insert a row with the same values in key
columns as an existing row. Also, some support for stored procedures
has been added. See
MySQL and stored procedures in mysql.htm.
-
A patch released in late Jult, 2013 implements a major jLinker
upgrade. A major patch release of jlinker (version 7.1) adds
several new features. The patch consists of Lisp code in a new fasl
file and Java code in a new jar file. New features include connection
pooling, better socket handling, and improved error hierarchy. A
number of functions have been modified, but all modifications are
backward compatible. See jlinker.htm for a complete
discussion of the patch. The patch is for version 9.0 only. It does
not apply to earlier releases.
-
New regexp patch fixes some replace-re behavior and enhances
match-re. A bug in replace-re caused handling of BOS and EOS
markers incorrectly. So
(replace-re "abc abc bc" "^abc\\s+"
"_")
would return "__bc" rather than "_abc
bc". Also, (replace-re "abc def " "def$" "_" :end
7)
would return "abc _ " rather than "abc def ". This has
been fixed and the correct values are now returned. As part of the
change, match-re has
additional keyword arguments start-unbounded and
end-unbounded. The behavior of match-re is unchanged if the new arguments are
not specified.
-
Better control over proxies in Aserve. If you allow proxies in
AllegroServe, you may open a security hole. Proxies, which before were
general, can now be restruicted to specific machines using the new
proxy-control object, if desired. See the Proxy section 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. Added by a pacth released May 1, 2013.
-
All nicknames removed for the excl package. This was done when
9.0 was released but we neglected to document it. The nicknames
were
excl
, franz
,
and stream
. In fact, it is illegal for a package
nickname to be the package name (so excl was removed). The other two
names (which were added when the symbols in those packages were merged
into the excl package) were removed so that they would not appear as
qualifiers to excl symbols when excl:*print-nickname*
is true. This is a
backward incompatible change. Users who depend on stream or franz
as nicknames can add them back using rename-package if desired. This item is
repeated below in Section 6.2 Non-backward-compatible changes in the base Lisp.
-
regexp patch fixes some bugs, changes split-re behavior. WARNING:
some changes result in changed behavior (nil might be returned instead
of (""); some forms no longer signal errors).. A patch released in
February, 2013 fixes some regexp bugs and changes the behavior
of split-re to match PERL
behavior. split-re now has a
limit keyword argument; it not longer errors when
the regexp argument matches the empty string; and
trailing empty fields are removed. See regexp.htm
and also the description of split-re, where we have examples of the
changes.
-
New ability to dump virtual images on Windows.
See Virtual dumplisp:
for very large images and pseudo-forks on Windows
-
We have revised the regexp.htm and have removed the
discussion of the older regexp module (which is still
maintained for backward compatibility, and individual functions are
still documented in the operators pages)). All new code should use the
regexp2 module described in regexp.htm.
-
text-line does not work on file streams. The
common-graphics:text-line function only
works on
text-edit-pane
s and
multi-line-editable-text
widgets. It
does not work on file streams. The documentation has been updated to
make that clear.
fasl files (compiled Lisp files) created by
releases of Allegro CL prior to 9.0
will not load into Allegro CL 9.0. All such files must be recreated by
compiling the associated Lisp source files. An error will be signaled
if Lisp attempts to load an older, incompatible
fasl file.
Fasl files created on Windows x86 cannot be loaded into Linux or
FreeBSD x86 Lisps
The Windows and UNIX operating systems are too different. However,
FASL files (for the same Lisp version) can generally be shared between
different UNIX operating systems on the same hardware. The general
principles are as follows. Note that incompatibility may creep in for
reasons outside our control. If fasl files are incompatible, recompile
on the target machine.
Fasl files will usually be compatible between platforms when:
-
the architecture (hardware) is the same
-
the calling convention is the same (that is, the method of calling
functions and the registers they use for arguments are the same)
-
the method for generating signals can be made compatible (this cannot
be done for Windows and UNIX, so they are incompatible for this
reason)
It is up to the user to ensure that there are no os-specific
dependencies, or that features (i.e. #+/#- ) did not cause
essential code to be excluded or extraneous code introduced
that would cause a problem on the crossed architecture.
-
Version 9.0 uses the 8.2 installation
procedure:
installation is described in
installation.htm.
-
The distribution includes 8 bit and 16 bit character images
(this information is repeated from earlier Release Notes). Allegro CL
has images that support 8 bit characters only, or 16 bit
characters only. It is our expectation that most users will use the 16
bit images. Executables supplied with the distribution either have or
do not have `8' in the name. Those with 8 in the name (mlisp8 and
alisp8, e.g.) support 8 bit characters. Those without a number in the
name support 16 bit characters. Image (dxl) files also come in 8 and
16 varieties. Again, 8 in the name means 8 bit character
support. Character support for images and executables must
match. Trying to start an executable with the wrong type of image
fails.
-
No prebuilt Allegro Composer images in the distribution
(this information is repeated from earlier Release Notes). To
create an Allegro Composer image, start Allegro CL and load
buildcomposer.cl. That will produce composer and
composer.dxl, or composer8 and
composer8.dxl. Allegro Composer is available on Unix only.
-
No prebuilt Allegro CLIM images in the distribution (this
information is repeated from earlier Release Notes). To create a CLIM
image, start Allegro CL and load buildclim.cl. That will
produce clim and clim.dxl, or clim8 and
clim8.dxl.
Allegro CL 9.0 is known to work with the following minimal operating
system versions. Allegro CL 9.0 runs on all operating system versions
released (not in beta or pre-release form) January 1, 2012. See
below for places to obtain information on operating systems released
after that date.
Because Ubuntu no longer supports 32-bit libraries, 32-bit Allegro CL
does not run on current and recent versions of Ubuntu. (If you have an
old version which has 32-bit libraries, 32-bit Allegro CL will work
but then you cannot upgrade the OS.)
64-bit platforms
-
64-bit Apple Mac OS X 10.6
-
64-bit Linux (x86-64), glibc 2.11
-
64-bit Microsoft Windows XP/Vista/7 &Server
-
64-bit Sun Solaris (SPARC) 2.10 (no SMP)
-
64-bit Sun Solaris (x86-64) 2.10 (no SMP)
32-bit platforms
-
Apple Mac OSX (Intel) 10.6
-
FreeBSD 8.2 (no SMP)
-
Linux (x86), glibc 2.11 (but not on Ubuntu, see above)
-
Microsoft Windows XP/Vista/7 & Server
-
Sun Solaris (SPARC) 2.10 (no SMP)
Allegro CL 9.0 is only supported on Mac OS X version 10.6 or later.
It is not supported on versions 10.5 or
earlier.
Common Graphics and the IDE are now supported on Mac OS
X but are not supported on the SMP version on the Mac.
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 Mac OS X
in installation.htm for details.
The Runtime Analyzer (see runtime-analyzer.htm)
does not work properly on the 64-bit Mac OS X port (there is no
problem on the 32-bit port).
Building shared libraries on Mac OS X
Building
shared libraries on Mac OS X in
foreign-functions.htm describes how to create a
shared library suitable for loading into Allegro CL. We have
determined that the -flat_namespace
to the
ld used to create the shared library is necessary, as shown in
the linked section.
Allegro CL updates are required to use Allegro CL 9.0 with Mac OS X
10.10. Please see Updating for Mac OS X 10.10
in installation.htm for information.
We have had reports that installing the Mavericks OS on Macs (Mavericks
is Mac OS X 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 Mac OS X 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 Mac OS and need to install/reinstall
X11, install it from your installation medium.
When building large new images, it is often useful to specify Lisp
Heap and C-heap start locations. See the discussion of the
lisp-heap-start and
c-heap-start keyword arguments in Arguments to
build-lisp-image 2: defaults not inherited from the running
image in building-images.htm. Here are
the initial locations (called `bases') in Allegro CL 9.0 as delivered.
Values are Hexadecimal integers.
Operating System |
Lisp base |
C base |
FreeBSD |
0x40000000 |
0xa0000000 |
Linux (x86) |
0x20000000 |
0xa0000000 |
Linux (AMD64) 64-bit |
0x1000000000 |
0x2000000000 |
Mac OS X 32-bit |
0x10000000 |
0x74000000 |
Mac OS X 64-bit |
0x1000000000 |
0x2000000000 |
Windows 32-bit |
0x20000000 |
0x54000000 |
Windows 64-bit |
0x100000000 |
0x200000000 |
Solaris 32-bit |
0x4000000 |
0x54000000 |
Solaris 64-bit |
0x1000000000 |
0x10000000000 |
Solaris (AMD64) 64-bit |
0x1000000000 |
0x10000000000 |
This main section contains three subsections (which have additional
subsections): one on new features
(Section 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).
Full SMP support is added for the Windows, Linux, and Mac platforms
(but not on Solaris or FreeBSD). This is the major new
feature. Non-SMP distributions are also provided for all platforms.
See smp.htm.
Major update to AllegroServe
A new version of AllegroServe, version 1.3.1, has been released. It is
available from github
(https://github.com/franzinc/aserve/)
or as a patch for Allegrop CL 8.2. Of particular importance are
automatic compression and inflation of files, chunking support, and
new choices for security, including the TLS v1.0 (also called SSL
v3.1) protocol for secure
communications. See aserve/aserve.html,
which is the AllegroServe documentation.
The changes include:
-
New compression and chunking support on
AllegroServe. AllegroServe can now compress responses on the fly
if requested. Aserve's client code can request a compressed transfer
and can uncompress the result. Further, In the past AllegoServe
disabled chunking for an SSL server and told users to use the http/1.0
protocol for clients when SSL was being used. Now those restrictions
are gone. The default for the server will be to use chunking in all
cases and clients can specify http/1.1 for requests over SSL. See
documentation
(aserve/aserve.html) for
API changes related to these new features.
-
Security options. net.aserve:start and
net.aserve.client:do-http-request have a :ssl-method keyword
argument which can be used to specify v2.0, v3.0 or TLS v1.0 (SSL
v3.1) communication protocols. Specifying :tslv1 means that you only
want to communicate using TLS v1.0 (SSL v3.1), the most modern and
secure of the protocols.
-
Delay sending headers for computed entities. Errors can occur
when running the computed entity function. When an error occurs one
would like to send back a different response such as '500 - Internal
Server Error'. In order to make this possible the http response code
and the headers that follow that are not immediately sent back to the
server when with-http-body starts. Instead they are held in
request-reply-stream and are only sent when the computed entity
function sends data to the stream. Thus if you do computation before
sending any data you can avoid having any response sent to the client
until the computation finishes.
-
publish-directory can accept a list of destinations. When a
request comes in publish-directory will search one or more
directories for the requested file.
-
Other AllegroServe changes. (1) The :keep-alive arguement
to do-http-request will now cause do-http-request to
return a fifth value: a socket connected to the server. That fifth
value will be
nil
if the server refuses to
keep the connection with the client open. Even if the server agrees
to keeps the connection alive it will close it after some period of
inactivity. (2) do-http-request takes a :connection argument
which is how the socket returned by do-http-request should be
passed to the next do-http-request call. It is ok if the value
of the :connection argument is nil
or closed
socket. do-http-request will notice that the socket is
unusable and will create a new one. See documentation
(aserve/aserve.html).
jLinker revision patch removed
A jLinker patch released in April, 2011, has been withdrawn. If you
downloaded the patch, doing a further update will revoke it. It was
decided that the changes could not be accomodated in deployed
applications. The changes will be re-introduced in release 9.0.
We have further revised jlinker.htm and the
documentation of jlinker-init in light of removing
the patch.
Major changes to the Allegro CL interface to the Amazon
Elastic Compute Cloud (EC2), some incompatible
The Amazon Elastic Compute Cloud (EC2), described
in ec2.htm has had a major revision, with support
now provided for regions. The changes are described at the beginning
of ec2.htm. Note that some changes are
incompatible: some argument lists have changed, a number of variables
have been removed, defaults for some arguments are changed, and so
on. There is also much new functionality.
Other changes since the release
-
New installation for Mac 64-bit graphics utilities. You need
GTK and X11 to use the IDE or CLIM with Allegro CL on the Mac, and
additionally OpenMotif for CLIM. Previously, installation of these
utilities for 64-bit Lisps was very involved and difficult. This
process has been simplified substantially, as described
in Installing X11,
GTK, and Open Motif on Mac OS X
in installation.htm.
-
dequeue method can now wait with a
timeout. The wait keyword argument to
dequeue can now be a real
number, indicating how many seconds a process should wait when asked
to dequeue an empty queue (waiting for an item to be added to the
queue so it can be dequeued). If the time limit is reached, the value
of the new empty-queue-result argument is
returned. If wait is
nil
and the queue is empty, an error is returned (as
before). If wait is a real less than or equal to
zero and the queue is empty, dequeue returns the value of the
empty-queue-result immediately.
-
Deflation (compression) of data now supported. The class
util.zip:deflate-stream
and
related functions allow you to compress data which can then be written
to a file or to a vector. The existing function
util.zip:inflate will uncompress
the data. The deflate utility was added in a patch released in March,
2011.
-
The macro in-case-mode, designed to assit loading fasl file
compiled in one case mode into a Lisp using another case
mode. While it is always better to use source files and associated
fasl files compiled in the case mode you are using in your running
Lisp (see case.htm), sometimes this is not
possible. The new macro in-case-mode will permit loading fasl
files compiled in a different mode from the running Lisp in most
cases.
-
Structures may be passed and returned to foreign functions by value
as well as by reference. See Passing structures by value
in foreign-functions.htm for more
information. Until this change, all structures were passed and
returned by reference, even when the specification indicated (because
no *) that by value was desired. Because of this change, existing code
that seems to specify by value will signal a warning but will still be
converted to by reference. You must modify the code (specifying a
value for the pass-structs-by-value argument
to def-foreign-call) or set
the value of
ff:*pass-structs-by-value*
appropriately to get
by value behavior.
-
All nicknames removed for the excl package. This was done when
9.0 was released but we neglected to document it (we added this item
is a doc update). The nicknames
were
excl
, franz
,
and stream
. In fact, it is illegal for a package
nickname to be the package name (so excl was removed). The other two
names (which were added when the symbols in those packages were merged
into the excl package) were removed so that they would not appear as
qualifiers to excl symbols when excl:*print-nickname*
is true. This is a
backward incompatible change. Users who depend on stream or franz
as nicknames can add them back using rename-package if desired. This item is
repeated above in Section 2.0 Information on changes and new stuff since the 9.0 release.
-
Significant changes, many non-backward-compatible, changes to the
Amazon Elastic Compute Cloud (EC2)
interface. See ec2.htm for details. The release
notes for the changes are at the beginning oif that document.
-
The asdf module does not autoload. Users need to
evaluate
(require :asdf)
to use it.
-
delete, delete-if, delete-if-not, and delete-duplicates and in-place
deletion. Certain deletion operations on vectors by delete,
delete-if, delete-if-not, and delete-duplicates modified the vector in place,
and so some programs, aware of this, might use the argument vector
rather than the result vector (that is, might assume the result vector
is the argument vector modified rather than a new vector). However, in
a SMP Lisp (and, in fact, but rarely in a non-SMP multiprocessing
Lisp), multiple threads traversing the vector simultaneously while one
deletes elements could cause heap corruption and so a new variable,
*delete-in-place*
,
specifies whether deletion in place is allowed. The initial value of
this variable is nil
in SMP Lisps (meaning
in-place deletion is not allowed), so the argument vector is never the
same as the result vector in that case. Code which assumed it was the
same can now fail. See cl:delete, cl:delete-if, cl:delete-if-not,
cl:delete-duplicates: multiprocessing issues in
implementation.htm for more information.
-
*cl-default-special-bindings* replaced by
*required-top-level-bindings* and other changes to process
initialization and
bindings.
*cl-default-special-bindings*
has
been renamed *required-top-level-bindings*
. A new variable
*required-thread-bindings*
provides bindings
for all threads. New macros required-thread-binding and
required-top-level-binding
add to the alists which are the values of those
variables. Processes and their dynamic environments
(both models) in multiprocessing.htm
and Setting global
variables in initialization files
in startup.htm have been updated to reflect these
changes.
-
The debugger API has some keyword arguments changed to optional
arguments, and other API changes. The debugger API, described
in debugger-api.htm has new (and incompatible)
argument lists for db:oldest-frame and db:output-frame:
they arglists used to have both optional and keyword argument and now
just have optional arguments. Also, there is a new function
db:newest-frame. And most single-letter argument names
(like p and e) now have
descriptive names (like process
and environment) though that change does not
affect the interface since the arguments are in all cases required or
optional. See debugger-api.htm for details.
-
with-output-to-buffer has modified argument list. To make it
more like with-output-to-string,
the buffer argument to with-output-to-buffer is now an optional
argument rather than a leyword argument. Further, the behavior when no
value is supplied for the buffer argument is different: before it was
equivalent to specifying nil and resulted in a bit bucket being used
(so the number of characters written was available but not the
characters themseleves). Now unsupplied means create an actual buffer
which extends when needed and whose contents are available
with get-output-stream-buffer.
Specifying
nil
has the same meaning as in earlier releases.
-
Some command-line arguments now start with -- rather than -. --ee,
--qq, --backtrace-on-error, --batch, --kill, --locale, and
--compat-crlf. See Command line arguments
in startup.htm for a list of command-line
arguments. The single - versions still work but are not longer
documented and will likely be removed in a later release.
-
New Idy5 compiler message notes that a dynamic-extent declaration
is ineffective. See this section
of compiler-explanations.htm. The message appears
when there is a dynamic-extent declaration but it is ineffective
because declarations are not trusted.
-
def-foreign-call now has :documentation keyword
argument.
(setf documentation)
works works on
foreign functions but this new feature allows specifying the
documentation without writing a wrapper function. See
ff:def-foreign-call.
-
New gensym variant excl:gen-sym. excl:gen-sym is identical to cl:gensym except that a symbol is accepted as
its optional argument, in which case the symbol-name is used. This is
useful for programs that are intended for use in either ansi or modern
lisps, where it is desired to print any gensyms without requiring
escapes.
-
with-staged-output and synchronized-output-stream-p allow
coordination when writing to a stream. synchronized-output-stream-p (which is
setf'able) determines whether
a stream is marked as suitable for synchronized
output. with-staged-output
then ensures output is staged. Most built-in output functions are
called in the body of with-staged-output.
-
New functions peek-byte and unread-byte. peek-byte resembles peek-char except it peeks at a single byte
rather than a character. unread-byte similarly
resembles unread-char except
it unreads one byte rather than one
characters. See peek-byte and unread-byte
in streams.htm for a general discussion of these
functions.
-
New compiler switch enforces optimal branch alignment on 64-bit x86
platform.
align-branch-targets-switch
,
when true, tells the comnpiler to optimally align code branches on
64-bit x86 platform. Ignored on all other platforms.
-
New tester macro, variable useful for testing in SMP. Allegro
CL provide a test harness described
in test-harness.htm. While there has always been
issues when testing in a multiprocessing environment, in a non-SMP
Lisp these were fairly insignificant. They are more serious in an SMP
Lisp, so changes have been made to better manage the tester. These
include a new macro to use when incrementing results,
inc-test-counter; a
new variable which controls whether output should be labeled by
thread,
*test-report-thread*
; and locking to
avoid intermixed tester output
mesages. See Running tests in multiple threads (Lisp
processes) in test-harness.htm
for more information.
-
yes-or-no-p and y-or-n-p now have better default format control
strings. yes-or-no-p and
y-or-n-p previously had
empty default control strings. Now the defaults are "(Yes or No)? "
and "(Y or N)? ".
-
Change to package locking. Package locking is described
on Package
locking and package definition locking
in packages.htm. Packages locked against
definitions used to accept new definitions only if the name of
*package*
, or
any of its nicknames, was on the locked package's
implementation-packages list. Definitions will still be accepted in
these cases, but will also be allowed if *package*
is eq to the locked package.
-
New queue keyword argument to schedule-finalization, new function
call-finalizer. schedule-finalization, which allows defining a
function to be called when an object becomes garbage, has a
new queue keyword argument. If
non-
nil
, it must be a queue
object. When the object is marked as
garbage, instead of running the finalization function, the system will
place a finalizer object, which is a list of the finalization function
and the object, on the queue. It is then the responsibility of the
program to apply the function call-finalizer to that list at some
later time.
-
New HMAC functions for MD5 and SHA* encoding support.
See the new
hmac-init, hmac-string, hmac-update, and hmac-final which handle SHA* digest
algorithms.
See MD5, SHA1,
HMAC, RC4, and other encoding support
in miscellaneous.htm for more information.
-
New general functions for MD* and SHA* encoding support.
Various new encoding algorithms are now supported, inlcuding
MD2, MD4, MD5, SHA1, SHA256, SHA512, and
RMD160.
There are new
functions digest-init,
digest-update, digest-final, digest-string, and digest-file which encode and support all those formats.
They are similar to the existing md5-* and sha1-* functions, with the same
arguments, except digest-init, digest-file, and digest-string have a name
required argument to specify the encoding format being
used). See MD5, SHA1,
HMAC, RC4, and other encoding support
in miscellaneous.htm for more information.
-
Expanded #A reader macro, new variable
*print-simple-array-specialized*. The standard #A template is
expanded from #nAdata to #{n}A{t}data where the
n
is optional (defaulting to 1) and t
can specify the
element type it is one of unsigned byte 4, 8, 16, 32 or 64, or signed
byte 8, 16, 32, or 64. See The #A reader macro
in implementation.htm for details. The printer will
use the new template when appropriate when the
variable *print-simple-array-specialized*
is true.
-
user-homedir-pathname and username-to-home-directory documentation
about behavior on Windows corrected.
cl:user-homedir-pathname
and excl:username-to-home-directory were
incorrectly documented in 8.2. The documentation has been
corrected. (Essentially, the current user's home directory is returned
in all cases, and that is discovered from the HOMEDRIVE and HOMEPATH
environment variables, or, failing that, from the HOME environment
variable. #P"C\\" is returned if none of those environment variables
have valid values.) The behavior of cl:user-homedir-pathname on Windows is discussed
in What user-homedir-pathname does on
Windows in implementation.htm.
-
get-output-stream-buffer now returns a second
value. get-output-stream-buffer now returns the number
of elements written to the buffer as a second returned value.
-
excl:uncompile and cl:function-lambda-expression succeed in more
cases. Both may succeed when source level debugging information is
stored (here succeed means returning a
non-
nil
first value for
cl:function-lambda-expression
and actually uncompiling the function for uncompile). See uncompile
and cl:function-lambda-expression
in implementation.htm for more information.
-
The :local and :set-local top-level commands have a raw option,
:r. This option displays locals in raw
mode. See :local for a discussion
of this mode. :set-local allows
values to be set in raw mode.
-
Previously undocumented :x option to :local top-level command causes numbers
to be displayed in hexadecimal. This option actually existed in
earlier releases but was not
dicumented. See :local.
-
There is now CRL (certificate revocation list) support in the SSL
(secure socket layer) implementation. See make-ssl-client-stream and
make-ssl-server-stream.
-
make-ssl-server-stream now has a prefer-server-cipher-order keyword
argument. When choosing a cipher during an SSLv3 or TLSv1
handshake, normally the client's preference is used. However, if the new
prefer-cipher-server-order keyword argument to
make-ssl-server-stream is
non-
nil
(the default
is nil
), the server's preference will be used
instead.
-
mapped-file-simple-stream has new release-handle option to
open. The
mapped-file-simple-stream
class can now be
opened with its handle released upon openning so the handle is
available for other uses. See
the release-handle option.
-
New arguments to def-foreign-call to control garbage-collections
while foreign code is running. The new arguments to
def-foreign-call are
allow-gc
and release-heap-implies-allow-gc.
-
add-signal-handler has new delayed-interrupts keyword
argument. If the delayed-interrupts keyword
argument to add-signal-handler is true, the handler be run
in a with-delayed-interrupts, else it will be run
with interrupts enabled.
-
New function mp:process-queue-interrupt. The new generic
function mp:process-queue-interrupt is like
mp:process-interrupt but calls the interruptions with
with-delayed-interrupts
being in effect which guarantees order of arrival processing.
-
The pid argument to excl.osi:getsid is now optional. See
excl.osi:getsid. The default
value is 0.
-
New exit-on-missing-shared-library keyword argument to
build-lisp-image. This new argument to build-lisp-image causes the new image to exit
with a non-zero exit status after printing an appropriate error
message if a shared library cannot be found.
-
The time macro now reports page faults. The general description
of the time macro is in the
ANS.
-
Additional keyword argument to excl.osi:find-in-path. If
the executable keyword to find-in-path
(ignored on Windows) is non-
nil
, then only
matches of files that have execute bit set in their mode are returned.
-
New command line argument --debug-startup. --debug-startup
prevents errors from being handled automatically by -L, -e, --ee and
init file processing. Instead, errors land in the debugger unless
--batch is also specified. See Command line arguments
in startup.htm for a list of command-line
arguments.
-
New Windows-only command line arguments +left, +top, +width,
+height. These specify the position and size of the console
window. See Command line arguments
in startup.htm for a list of command-line
arguments.
-
New variable sys:*zlib-system-library*. The value of
sys:*zlib-system-library*
is the name of the
gzip library used by the deflate module.
See Support for gzip
compression and decompression
in miscellaneous.htm.
-
Use of cltl1 package is deprecated. The compiler-let special operator has been moved
to the excl package. Use of other functionality in the cltl1 package
should be avoided. The cltl-1 module is no longer autoloaded.
-
New :direction keyword argument to dbi:bind-parameter. This
argument allows specification of the direction of the parameter in a
call to
dbi:bind-parameter.
Because SMP is the major addition to Allegro CL 9.0 on the Windows,
Linux, and Mac platforms. Consequently multiprocessing in Allegro CL
has changed, we group all SMP and multiprocessing release notes into
this section.
-
Atomic update routines will work on any symbol. In the initial
implementations of SMP, only symbols defined with defvar-nonbindable were suitable as places for
atomic update operators like push-atomic. This is not longer true. Any
symbol can be used as such a place. defvar-nonbindable is therefore no longer
associated with atomic updates but is retained because it may be
useful for other purposes. (This item was added after the initial
release of the 9.0 documentation.)
-
with-shared-lock, with-exclusive-lock, and sharable-lock-lock have
new recursive-p argument and return different values. The
operators with-shared-lock,
with-exclusive-lock, and
sharable-lock-lock, added with
a patch in 8.2, have new return values and have a new argument,
recursive-p. See the descriptions for details.
-
make-sharable-lock has new argument constructor, recursive-p
argument can have new values. See the description
of make-sharable-lock.
-
New mp:condition-variable class. A condition-variable provides
another way to synchronize the behavior of multiple
threads. See Condition
Variables in smp.htm.
-
New macro with-sharable-lock. with-sharable-lock is similar but more powerful
than with-shared-lock.
-
New generic function mp:process-join. mp:process-join suspends the current process
until the process thread of another process exits. This is a bit more
complicated than it sounds (processes can be associated with more than
one thread, so the question is, which is meant), as noted in the
documentation.
-
New generic function lockedp. lockedp tests whether a lock is held.
-
New generic function process-lockedp. See process-lockedp.
-
time macro reporting of new space additions. In the statistics
reported by the garbage collector, the new-copied number is now the
net copied to newspace. When multiple sequential scavenges are
required, the number reported represents the amount copied into
newspace by the last scavenge, not the total copying done by all the
scavenges.
There are no entries at this time. Information may be placed here in
documentation updates after the initial Allegro CL 9.0 release.
The CLIM manual has not been updated (other than minor corrections)
for the 9.0 release. There have been no significant changes to CLIM
functionality compared to 8.2, though there have been bug fixes and
performance enhancements.
Common Graphics and the IDE are supported on Windows SMP Lisp but
are not supported in SMP Lisps on the Mac and Linux. They are
supported in the non-SMP Lisps on Windows, Linux, and the Mac (the
same platforms on which they were supported in release 8.2).
The first
subsection describes changes to Common Graphics and
the IDE that are non backward-compatible. Please review this section
and make whatever necessary changes to your code to obtain the desired
behavior in release 8.2.
The second subsection
describes other changes to Common Graphics and the IDE. These should
not require code changes (please tell us if any do, because that may
indicate a bug), but note that certain function and argument names
have been deprecated in favor of new names, and that new code should
reflect these changes, and old code should be revised at some point.
The section Section 8.5 IDE release notes and its
subsections provide information about the IDE.
Common Graphics and the IDE and available on the Mac but only on the
non-SMP Lisp. You must run X11 (it is in the /Applications
directory and comes with recent versions of OSX and is usually
installed by default on 10.6, but see Installation on Mac OS X
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 Mac OS X, and
also *parenthesis-match-pop-up-milliseconds*
.
-
No annotations in form windows when designing dialogs. The
annotations include widget resizing handles and alignment lines.
-
draw-rounded-box and fill-rounded-box have smaller
corners. Rounded box corners on GTK are smaller than in 8.x, but
now match beheavior on Windows. See draw-rounded-box and fill-rounded-box.
-
Variables dst, ds~t, d~st etc. renamed. The exported constant
symbols like
dst
and ~d~st
for
paint operation bit flags have been renamed to po-dst
and po-~d~st
, etc., to avoid errors in apps that
use a local variable named dst
.
-
New grid-widget functions determining which subsection gets
keyboard focus. The new generic functions are focus-row-section, focus-column-section, and
focus-subsection. See
grid-widget
for general information on grid
widgets.
-
New class-grid property horizontally-scrollable. The
horizontally-scrollable property of a
class-grid
specifies
whether the user can interactively scroll a class-grid horizontally,
to bring other grid columns into view.
-
New properties to control whether a grid-section scrolls when the
user drags a grid-subsection to a new position among its
siblings. scroll-parent-section-while-dragging controls
whener scrolling happens and scroll-parent-section-distance controls the
scroll increment. See also
grid-widget
for general information on that
widget.
-
Several new functions for manipulating outline-items. These new
generic functions have been added for progammatically manipulating
outline-item
s
on outline
widgets:
select-on-typing,
move-up-one-outline-item,
move-down-one-outline-item,
hide-outline-item-children,
show-outline-item-children,
outline-item-removed,
outline-item-added,
outline-items-reordered,
remove-outline-item,
add-sibling-outline-item,
add-child-outline-item, and
shift-outline-item.
-
New configuration option
delay-pop-up-menus-until-mouse-buttons-up. delay-pop-up-menus-until-mouse-buttons-up, when
true, delays the appearance of a pop-up menu until all mouse buttons
are up. Its initial value is
nil
on Windows
but true on GTK (Linux and Mac). On GTK, we have not found a way to
prevent a mouse button release event from selecting an item on a
pop-up menu that was invoked while a mouse button is down. That
behavior can lead to the user not seeing the menu altogether, or even
selecting an arbitrary item if the menu is placed under the mouse
cursor but does not appear until the mouse button has already been
released. That does not happen when the value of this new option is
true.
-
New function set-console-exterior on Windows only. The function
set-console-exterior allows
you to set the size and location of the console Window if there is
one. This is a Windows-only function.
-
ask-user-for-new-or-existing-directory and ask-user-for-directory
have some new arguments. ask-user-for-directory now has
a include-edit-box keyword argument (adds
a text-entry widget to the dialog) and
a new-dialog-style keyword argument (use
the new MS style for the dialog). ask-user-for-new-or-existing-directory has a
new special-folders keyword argument
(allows specifying special Windows folders like My
Documents). See the descriptions of
ask-user-for-new-or-existing-directory
and ask-user-for-directory for full details.
-
New macro with-cg-bindings. with-cg-bindings allows establishing the Common
Graphics variable bindings in an existing process where it is not
feasible to pass
*default-cg-bindings*
at process
creation time.
-
window-message now returns a meaningful
value. window-message
returns
t
if the message was displayed in
some status bar (either that of the argument window or an ancestor of
the argument window) and returns nil
otherwise.
-
set-paragraph-format limited to 32 tab stops. This is a Windows
limitation. The number of tab stops is specified by
the tabs keyword argument to
set-paragraph-format. Previously specifying a
value greater than 32 would cause an error. Now values greater than 32
are treated as if 32 were
specified. Specifying
nil
removes all tab
stops.
-
New outline control properties: ancestor-background-color and
highlight-ancestors. these properties control whether an
outline
widget will draw the
background of each ancestor outline-item
of the currently selected item in a
different color.
-
select-on-multiple-characters and
select-on-multiple-characters-time-limit now are properties of outline
widgets, along with new properties
select-on-multiple-characters-item-test and
select-on-multiple-characters-callback. See select-on-multiple-characters, select-on-multiple-characters-time-limit,
select-on-multiple-characters-item-test, select-on-multiple-characters-callback
and
outline
.
-
New validate-edited-slot-value method allows validation of new slot
values in object-editors and class-grids. The new method validate-edited-slot-value can be used
with
object-editor
s and
class-grid
s to validate
input.
-
pop-up-string-dialog and ask-user-for-string have new cursor-at-end
argument. This specifies whether the cursor should be placed at
the end of the string to be modified (allowing for easy extension) or
the beginning (easier for replacing). See pop-up-string-dialog and ask-user-for-string.
-
pop-up-menus-for-many-sorted-choices has new case-insensitive and
on-help keyword arguments. The
new case-insensitive keyword argument
to pop-up-menus-for-many-sorted-choices allows
specifying whether or not choices starting with the same letter, but
some lowercase and some upper, should be grouped together. The
new on-help argument allows you to specify a
function which may be used for displaying status bar messages as the
user highlights individual menu items.
-
pop-up-lettered-menu has new stream and on-help keyword
arguments. The new stream argument to
pop-up-lettered-menu is either
the screen or else a window that will serve as the owner of the pop-up
menu. The new on-help argument allows you to
specify a function which may be used for displaying status bar
messages as the user highlights individual menu items.
-
New printer-class keyword argument to
with-output-to-printer. with-output-to-printer now has
a printer-class keyword argument which
allows you to specify a subclass of
cg:printer
as the type of stream to instantiate,
if desired.
-
New outline widget property lines-of-padding. The
lines-of-padding property of
outline
widgets specifies
how many items should be in view around a selected outline-item
The IDE is supported on the Windows SMP Lisp. It is not supported in
the Mac or Linux SMP versions of Allegro CL 9.0. It is supported in
the non-SMP version of those platforms.
The non-SMP version runs one one hardware processor at a time, and
corresponds to earlier versions of Allegro CL.
-
The :runtime-bundle build-flag is now included in the initial
build-flags value. See ide:build-flags.
-
Class Interface Editor dialog changes. The
Class
Interface Editor has been enhanced to make the properties
that you can specify interactively for a
class-grid
be more nearly complete]
-
The Inspect now shows package names of slot values.
-
New checkbox on Find in Files dialog to specify whether
subprojects should searched. The Search Subprojects Later
checkbox, when checked while searching a project, causes the entire
project hierarchy to be searched. When unchecked, only the top-level
project is searched. See the Find In Files dialog.
-
Revised Include Subdirectories checkbox on Find in Files
dialog. The Include Subdirectories checkbox is now
labeled Include Subdirectories or Subprojects and controls
searching subprojects when searching a project. See
the Find In
Files dialog.
-
ide:shift-windows-onto-screen-at-startup now works on the single
parent window. ide:shift-windows-onto-screen-at-startup will
move the single parent window (which contains all IDE subwindows
when ide:use-ide-parent-window is true) into
view. Its behavior when ide:use-ide-parent-window is false is
unchanged.
-
New functionality for using Unicode in text files. New
configuration options and other operators allow better handling of
Unicode text on Windows. See compile-files-as-utf8,
external-format-for-saved-files, external-format-for-save,
*use-unicode-winapi-for-cg*
,
automatic-font-changing,
dual-fonts-for-languages,
ide:ide-auto-font-changing,
ide:ide-dual-fonts-for-languages,
write-bom-to-utf8-files,
and load-utf8-if-no-bom.
-
New Inspect Dialog option 'Inspect Sorted Copy'. This option
appears on the Inspect dialog when inspecting a list
or a vector. If chosen, a new sequence copied from the inspected one
and sorted by print name is inspected. This may make finding items in
long sequences easier.
-
File | Build Project Exe now File | Build Project
Executable. The Build Project Exe item ion
the File menu is
now File | Build Project Executable. We
wish to make clear the command does more than create a
single exe file.
-
New IDE option find-in-files-show-html-files-in-browser. If the
IDE configuration option ide:find-in-files-show-html-files-in-browser is
true (its initial value) then HTML files (as determined by the file
type) will open in a browser rather than an editor buffer.
-
New IDE option find-in-files-file-list-portion. If the IDE
configuration option ide:find-in-files-file-list-portion allows
users to specify the proportion between the heights of the two lower
widgets in the Find In Files dialog, which list
the files that have matches followed by the matching lines in the
selected file.
-
Stepper dialog now has yellow highlighting for code which has
limited information. The Stepper Dialog highlight code being
stepped through. Green menas source code debugging info is available,
orange means you are stopped at a macro form, etc. Now yellow is a
possible highlight color and means you can do a Step Into to
step through the function that is being called on that step, though no
source debug info is known for the function that is being entered and
so it will be stepped through at the assembly language level.
-
New command on Run menu: Show Definition in Stepper Dialog. The
menu command Show Definition in Stepper
Dialog on the Run
menu displays the source code of the selected function or
method in the Stepper
Dialog and allows you to set breakpoints inside the
definition without breakpointing the entrance to and exit from the
function.
-
New project property concatenate-project-fasls. The project
property concatenate-project-fasls, when true, causes
all project fasl files to be concatenated into a single fasl
file. This property can be set with setf or with the
Concatenate Project Fasls check box on the Options tab of the
Project
Manager dialog.
-
Finer control of opening files in Emacs from the IDE. The
function ide:open-files-in-gnu-emacs allows you to
specify that the File | Open command should open files in an Emacs
buffer rather than an IDE editor buffer. If you make the value of that
property
:open-only
,
the File | Save All menu command will not save
Emacs buffers. If the value of the property is any other true
value, File | Save All will save all unsaved Emacs
buffers.
-
Improved type-ahead in IDE listeners. Typing ahead in an IDE
listener while an evaluation is happening will now echo the characters
at the end of the text as you type them, rather than only after the
evaluation is complete. Any printing that's done to the listener will
always be sent to the end of the listener's text rather than to the
text cursor position.
Allegro CL 8.2 projects should open without problem in Allegro CL
9.0.
For complete information on the differences between Windows and GTK,
please see
cggtk-relnotes.html.
Common Graphics and the IDE run on Windows and Linux with
GTK. Certain differences between the two operating systems and
windowing systems mean that some things do not work the same in
Windows as in GTK and vice versa. The functionality listed here
tries to handle the differences. Some of the
variables/operators/etc. are only available on one of the two platforms.
Known bug with menu-items and buttons
GTK Only: all-black menu-items and half-black buttons. There
is still a mystery on the GTK platform where all button widgets can
turn half black along a diagonal line, and all menu-items on some
platforms will be totally black. This seems to happen only when
opening a project from the Startup Action dialog, though, so a
workaround is to not reopen a project from that dialog and instead to
use the Recent menu
or File | Open Project just afterward. We
have tracked the problem down to the use of transparent-pane windows
such as the frame-child of a form window, but beyond that it is a
total mystery.
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
The with-message-window window
is now a frameless-topmost-p
window on the GTK platforms to avoid problems that it had otherwise.
This means that deselecting the owner window will close the message
window, and so it may be a good idea to display the message in an
additional place such as a status bar.
The winapi module contains certain functions, in the windows package,
that perform OS-related tasks. See The Windows API and a Windows API program with
windows but without CG in cgide.htm for
more information.
-
Unicase names for several functions removed. This is a
non-backward-compatible change. For example, CreateWin and
related functions existed with uppercase names in ANSI Lisp and
lowercase names in nonANSI Lisp is earlier releases but now exists
only with a mixed case name. See The Windows API and a Windows API program with
windows but without CG in cgide.htm for
more information.
No notes at this time
The command fi:lisp-find-definition no longer sets a mark.
CLX (Common Lisp X) provides an interface between Common Lisp and the
X window system. All versions of Allegro CL include a compiled
version of CLX with the distribution. The fasl
file is code/clx.fasl, loaded by evaluating
(require :clx)
. The Allegro CL products CLIM and
Allegro Composer use CLX. Users wanting low-level access to an X
server in Lisp may also want to use CLX. CLX is not supported by
Franz Inc.
The sources to CLX are supplied with the regular Allegro CL
distributions in the contrib/clx/ directory. Note
that during installation, you are asked whether you wish to install
the contrib/ directory and the default is not to
install it. The contrib/ directory is not
included in the Trial distribution, but Trial users can download the
CLX sources from the Franz Inc. website as described next.
The sources to CLX are also available on the Franz Inc. web site (franz.com), at the location ftp://ftp.franz.com/pub/clx/.
No significant changes.
We discuss ANSI conformance in Conformance with the ANSI specification
in implementation.htm. Elsewhere in
implementation.htm we discuss specifics of our
implementation of certain Common Lisp functionality.