ToCDocOverviewCGDocRelNotesFAQIndexPermutedIndex
Allegro CL version 10.0
Significantly revised from 9.0.
9.0 version

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


1.0 Introduction

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.



2.0 Information on changes and new stuff since the 10.1 release

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.

  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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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.
  7. 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.
  8. 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.
  9. 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.
  10. 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.
  11. 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.
  12. 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.
  13. 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.
  14. 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.
  15. 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).
  16. 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).
  17. 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.
  18. 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.
  19. 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.
  20. 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.
  21. 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.
  22. 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.
  23. 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.)
  24. 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.
  25. 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).
  26. New function excl:day-difference. Replaced by entry just above.
  27. 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.
  28. 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.
  29. 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.
  30. 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.
  31. 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.
  32. 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.


3.0 Information on changes and new stuff since the 10.0 release

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.

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.


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)

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.


4.2 Fasl files may be incompatible in different Lisps on same hardware

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:

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.



5.0 Release Notes for installation

  1. Version 10.0 uses the 9.0 installation procedure: Installation is described in installation.htm.
  2. 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.
  3. 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.
  4. 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.


6.0 Release notes for specific platforms

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

32-bit platforms


6.1 Required versions of OpenSSL needed for the :ssl module

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.


6.2 macOS notes

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.


6.2.1 Allegro CL must be updated to work with macOS 10.10

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.


6.2.2 Installing Mavericks OS (macOS 10.9) may break X11

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).


6.2.3 Installing Mountain Lion OS (macOS 10.8) may uninstall X11

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.


6.3 Heap start locations

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


7.0 Release Notes for the base Lisp

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).


7.1 New features in 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:

  1. 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.
  2. 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.
  3. 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

  1. 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.)
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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.
  7. 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.
  8. 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.

7.1.1 Features added to Allegro CL 9.0 after the initial release of Allegro CL 9.0

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.

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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+.
  6. 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.
  7. 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.
  8. 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.
  9. 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.
  10. 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.
  11. 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.
  12. 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.
  13. 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.
  14. 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.
  15. The profiler may now be included in runtime images (except those created by Allegro Express).
  16. 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.
  17. 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.
  18. 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.
  19. New ability to dump virtual images on Windows. See Virtual dumplisp: for very large images and pseudo-forks on Windows
  20. 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.
  21. text-line does not work on file streams. The common-graphics:text-line function only works on text-edit-panes and multi-line-editable-text widgets. It does not work on file streams. The documentation has been updated to make that clear.

7.2 Non-backward-compatible changes in the base Lisp

The following changes result in different behavior in Lisp compared to earlier releases.

  1. 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.

7.3 Other changes to and notes about the base Lisp

Listed are other changes to Allegro CL.

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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.
  7. 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.
  8. New types keyword argument to dbi:run-prepared-sql. This new argument to dbi:run-prepared-sql allows specifying the return type.
  9. 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.
  10. 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).
  11. 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.
  12. 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.
  13. 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.
  14. 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.

7.4 Multiprocessing and SMP release notes

The following at SMP-related changes.

  1. 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.

7.5 Base Lisp platform-specific information

There are no entries at this time. Information may be placed here in documentation updates after the initial Allegro CL 10.0 release.



8.0 Release Notes for CLIM

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.



9.0 Release Notes for Common Graphics and the IDE

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.


9.1 Significant changes in Common Graphics


9.2 Non-backward-compatible changes in Common Graphics

These are the non-backward compatible changes in release 10.0.


9.3 Other changes in Common Graphics

  1. 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).
  2. 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.
  3. Hotspots can now have tooltips. hotspots can now have tooltips. See tooltip and show-tooltip.
  4. 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.
  5. 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.
  6. 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.
  7. 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.
  8. 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.
  9. 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.)
  10. 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.
  11. 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.
  12. 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.
  13. 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.

9.4 IDE release notes

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.

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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.
  7. 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.
  8. 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.
  9. 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.
  10. 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.
  11. 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.
  12. 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.
  13. 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.
  14. 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.
  15. 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.
  16. 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.
  17. 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.
  18. 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.
  19. 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.
  20. There is a new more basic first CG example in the Navigator dialog for drawing and handling mouse events. See the Navigator Dialog.
  21. 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.
  22. 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.
  23. 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.

9.4.1 Opening projects from releases prior to 10.0

Allegro CL 9.0 projects should open without problem in Allegro CL 10.0.


9.5 Common Graphics and the IDE on the Mac

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:

  1. 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*.
  2. No annotations in form windows when designing dialogs. The annotations include widget resizing handles and alignment lines.

9.6 Functionality to handle differences between Windows and GTK

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.


9.7 Release notes for the winapi module

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.

  1. no entries


10.0 Release notes for AllegroServe

No notes at this time



11.0 Release notes for The Emacs/Lisp interface

No notes at this time.



12.0 Availability of CLX for Allegro CL

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/.



13.0 Release notes for Orblink

No significant changes.



Appendix A: ANSI Conformance in Allegro CL

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.


Copyright (c) 1998-2019, Franz Inc. Oakland, CA., USA. All rights reserved.
This page has had significant revisions compared to the 9.0 page.
Created 2019.8.20.

ToCDocOverviewCGDocRelNotesFAQIndexPermutedIndex
Allegro CL version 10.0
Significantly revised from 9.0.
9.0 version