ToC | DocOverview | CGDoc | RelNotes | FAQ | Index | PermutedIndex
| Allegro CL version 10.1 Unrevised from 10.0 to 10.1.

# 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.0 release
3.0 Fasl files are not-compatible between versions and operating systems
3.1 All pre-10.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 9.0 after the initial release of Allegro CL 9.0
6.2 Non-backward-compatible changes in the base Lisp
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 Common Graphics and the IDE
7.1 Significant changes in Common Graphics
7.2 Non-backward-compatible changes in Common Graphics
7.3 Other changes in Common Graphics
7.4 IDE release notes
7.4.1 Opening projects from releases prior to 10.0
7.5 Common Graphics and the IDE on the Mac
7.6 Functionality to handle differences between Windows and GTK
7.7 Release notes for the winapi module
8.0 Release notes for AllegroServe
9.0 Release notes for The Emacs/Lisp interface
10.0 Availability of CLX for Allegro CL
11.0 Release notes for Orblink
Appendix A. ANSI Conformance in Allegro CL

## 1.0 Introduction

This document is a copy of the version 10.0 release notes included with the version 10.1 documentation, providing release notes for release 10.0 of Allegro Common Lisp and related products. Note: if you are using version 10.0, you should not refer to this document but to the current actual 10.0 Release Notes as this document is simplified and also not updated for changes to 10.0 after the 10.1 release.

This document describes the changes, major and minor, from 9.0 to 10.0. Please look particularly at these sections:

- Section 6.1 New features in the base Lisp: this section describes new features.
- Section 6.2 Non-backward-compatible changes in the base Lisp: this very important section describes changes to Allegro CL which are not backward compatible. You may have to modify your source code in light of these changes.
- Section 7.2 Non-backward-compatible changes in Common Graphics: [Common Graphics is not available on all platforms] this section describes changes to Common Graphics which are not backward compatible. You may have to modify your source code in light of these changes.
- Section 2.0 Information on changes and new stuff since the 10.0 release: this section describes material added after the initial Allegro CL 10.0 release, along with other post-10.0 changes.

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

## 3.0 Fasl files are not-compatible between versions and operating systems

## 3.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.

## 3.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:

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

## 4.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.

## 5.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

- 64-bit Apple Mac OS X 10.9
- 64-bit Linux (x86-64), glibc 2.11
- 64-bit Microsoft Windows Vista/7/8 &Server
- 64-bit Sun Solaris (SPARC) 10, also called 2.10 (no SMP version)
- 64-bit Sun Solaris (x86-64) 10, also called 2.10 (no SMP version)
- FreeBSD 9.1 (SMP only)

### 32-bit platforms

- Apple Mac OSX (Intel) 10.9
- FreeBSD 9.1 (no SMP version)
- Linux (x86), glibc 2.11
- Microsoft Windows Vista/7/8 & Server
- Sun Solaris (SPARC) 10, also called 2.10 (no SMP version)

## 5.1 Mac OS X notes

Allegro CL 10.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 7.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 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.

## 5.1.1 Allegro CL must be updated to work with Mac OS X 10.10

Allegro CL updates are required to use Allegro CL 10.0 with Mac OS X 10.10. [This is not required for Allegro CL 10.1.]

## 5.1.2 Installing Mavericks OS (Mac OS X 10.9) may break X11

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

## 5.1.3 Installing Mountain Lion OS (Mac OS X 10.8) may uninstall X11

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.

## 5.2 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
Mac OS X 32-bit | 0x20000000 | 0x74000000
Mac OS X 64-bit | 0x1000000000 | 0x80000000000
Mac OS X 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

## 6.0 Release Notes for the base Lisp

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

## 6.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.

## 6.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 restricted to specific machines using the new proxy-control object. See the Proxy section in the AllegroServe documentation for details (the link goes to a doc with another link to the AllegroServe documentation, which is on Github).
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 6.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-pane`s and `multi-line-editable-text` widgets. It does not work on file streams. The documentation has been updated to make that clear.

## 6.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.

## 6.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.

## 6.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.

## 6.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.

## 7.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 7.4 IDE release notes and its subsections provide information about the IDE.

## 7.1 Significant changes in Common Graphics

- load-pixmap can now load pixmaps in many formats on Windows, not just BMP. load-pixmap now uses (when the new keyword argument use-gdi-plus is true) the newer GDI+ API of Windows, where Windows can load a variety of types of pixmap files itself. (Previously, pixmaps on Windows were loaded using specialized Lisp code which decoded BMP files.) On any platform, files of type BMP, PNG, JPG, GIF, and TIFF can be loaded files ICO files can be loaded on Windows. See load-pixmap.
- New calendar widget. This new widget displays a calendar and allows user to choose a date. It is similar to the the Microsoft OCX DatePicker, but is implemented in Common Graphics and works on all supported platforms. See the description on the `calendar` widget page. The new function ask-user-for-date uses this widget. The numerous property accessor functions associated with this widget and its related classes are all linked to on the `calendar` page.
- Alpha blending of colors is now supported on Windows. The new variable `*alpha-blending*`, which is used only on Windows, specifies whether displayed colors should be alpha blended, which means that drawing or filling functions will blend the newly drawn color with the exiting color. Alpha values are integers between 0 and 255 inclusive, with 255 meaning no blending (new color is displayed) and 0 meaning no blending (old color is displayed, as if there was no new drawing), and intermediate values meaning use some old and some new. See `*alpha-blending*` for further details. make-rgb and copy-to-stream have new alpha arguments (a new keyword argument to make-rgb, a new optional one to copy-to-stream) which will specify the alpha blending factor when `*alpha-blending*` is true and which are ignored when it is false (and which are always ignored on platforms other than Windows).
- Touch gesture support. On the Windows platform, Common Graphics provides an interface to Microsoft's support for touchscreen gestures, which was new in Windows 7 and works the same way in Windows 8. See About Touch Gesture Support in Common Graphics on Windows in cgide.htm. See also gesture-event, touch-event and also `two-stroke-mixin`.

## 7.2 Non-backward-compatible changes in Common Graphics

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

- New configuration option use-mouse-clicks-to-copy-lisp-forms. For some time, it has been true when editing Lisp code, you could copy a form with Control-Left-Click when the cursor was at the beginning of a Lisp form. That ability can now be turned on and off with the configuration option use-mouse-clicks-to-copy-lisp-forms. The initial state is off (that is the non-backward compatible change -- previously it was always enabled). See use-mouse-clicks-to-copy-lisp-forms for information on how to enable it.

## 7.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. `hotspot`s 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.

## 7.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 one 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.

## 7.4.1 Opening projects from releases prior to 10.0

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

## 7.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 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:

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 Mac OS X, 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.

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

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

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

## 8.0 Release notes for AllegroServe

No notes at this time

## 9.0 Release notes for The Emacs/Lisp interface

No notes at this time.

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

## 11.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-2022, Franz Inc. Lafayette, CA., USA. All rights reserved.
This page was not revised from the 10.0 page.
Created 2019.8.20.

ToC | DocOverview | CGDoc | RelNotes | FAQ | Index | PermutedIndex
| Allegro CL version 10.1 Unrevised from 10.0 to 10.1.