ToC | DocOverview | CGDoc | RelNotes | FAQ | Index | PermutedIndex
| Allegro CL version 9.0 Minimally revised from 8.2.

# Release Notes for Allegro CL 8.2

This document contains the following sections:

1.0 Introduction
2.0 Information on changes and new stuff since the 8.2 release
3.0 Fasl files are not-compatible between versions and operating systems
3.1 All pre-8.2 Lisp compiled files must be recompiled (old fasl files will not load)
3.2 Fasl files may be incompatible in different Lisps on same hardware
4.0 Release Notes for installation
5.0 Release notes for specific platforms
5.1 OS patch needed for Solaris 2.8 on Sparcs
5.2 Mac OS X notes
5.3 AIX notes
5.4 Heap start locations
6.0 Release Notes for the base Lisp
6.1 New features in the base Lisp
6.1.1 Features added to Allegro CL 8.1 after the initial release of Allegro CL 8.1
6.1.2 New features in Allegro CL 8.2
6.2 Non-backward-compatible changes in the base Lisp
6.3 Other changes to and notes about the base Lisp
6.4 Base Lisp platform-specific information
7.0 Release Notes for CLIM
8.0 Release Notes for Common Graphics and the IDE
8.1 Common Graphics and the IDE on the Mac
8.2 Significant changes in Common Graphics
8.3 Non-backward-compatible changes in Common Graphics
8.4 Other changes in Common Graphics
8.5 IDE release notes
8.5.1 Opening projects from releases prior to 8.1
8.6 Functionality to handle differences between Windows and GTK
8.7 Release notes for the winapi module
9.0 Release notes for AllegroServe
10.0 Release notes for The Emacs/Lisp interface
11.0 Availability of CLX for Allegro CL
12.0 Release notes for Orblink
Appendix A. ANSI Conformance in Allegro CL

This document is a copy of the version 8.2 release notes taken at a time prior to the release of version 9.0. Subsequent changes are not tracked. The actual current 8.2 release notes are available at franz.com/support/documentation/8.2/doc/release-notes.htm. This document is included in the 9.0 documentation to allow users who happen not to have access to the internet to see changes from 8.1 to 8.2 which may affect them but which are not otherwise discussed in the 9.0 documentation.

## 1.0 Introduction

This document provides the release notes for release 8.2 of Allegro Common Lisp and related products. Many sections are divided into non-backward-compatible changes (that produce different behavior in release 8.2 compared to release 8.1) and changes unrelated to backward-compatibility. Note that a bug fix is not considered a backward-incompatible change even if it does result in changed behavior because the previous behavior was erroneous.

This document describes the changes, major and minor, from 8.1 to 8.2. 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 8.3 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 8.2 release: this section describes material added after the initial Allegro CL 8.2 release, along with other post-8.2 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 8.2 release

This section is for information about changes to Allegro CL 8.2 since the release.

### Major update to AllegroServe

A new version of AllegroServe, version 1.3.1, has been released. It is available from github (http://github.com/franzinc/aserve/) or as a patch for Allegrop CL 8.2. Of particular importance are automatic compression and inflation of files, chunking support, and new choices for security, including the TLS v1.0 (also called SSL v3.1) protocol for secure communications. See aserve/aserve.html, which is the AllegroServe documentation.

The changes include:

1. New compression and chunking support on AllegroServe. AllegroServe can now compress responses on the fly if requested. Aserve's client code can request a compressed transfer and can uncompress the result. Further, In the past AllegoServe disabled chunking for an SSL server and told users to use the http/1.0 protocol for clients when SSL was being used. Now those restrictions are gone. The default for the server will be to use chunking in all cases and clients can specify http/1.1 for requests over SSL. See documentation (aserve/aserve.html) for API changes related to these new features.
2. Security options. net.aserve:start and net.aserve.client:do-http-request have a :ssl-method keyword argument which can be used to specify v2.0, v3.0 or TLS v1.0 (SSL v3.1) communication protocols. Specifying :tslv1 means that you only want to communicate using TLS v1.0 (SSL v3.1), the most modern and secure of the protocols.
3. Delay sending headers for computed entities. Errors can occur when running the computed entity function. When an error occurs one would like to send back a different response such as '500 - Internal Server Error'. In order to make this possible the http response code and the headers that follow that are not immediately sent back to the server when with-http-body starts. Instead they are held in request-reply-stream and are only sent when the computed entity function sends data to the stream. Thus if you do computation before sending any data you can avoid having any response sent to the client until the computation finishes.
4. publish-directory can accept a list of destinations. When a request comes in publish-directory will search one or more directories for the requested file.
5. Other AllegroServe changes. (1) The :keep-alive arguement to do-http-request will now cause do-http-request to return a fifth value: a socket connected to the server. That fifth value will be `nil` if the server refuses to keep the connection with the client open. Even if the server agrees to keeps the connection alive it will close it after some period of inactivity. (2) do-http-request takes a :connection argument which is how the socket returned by do-http-request should be passed to the next do-http-request call. It is ok if the value of the :connection argument is `nil` or closed socket. do-http-request will notice that the socket is unusable and will create a new one. See documentation (aserve/aserve.html).

### jLinker revision patch removed

A jLinker patch released in April, 2011, has been withdrawn. If you downloaded the patch, doing a further update will revoke it. It was decided that the changes could not be accomodated in deployed applications. The changes will be re-introduced in release 9.0.

We have further revised jlinker.htm and the documentation of jlinker-init in light of removing the patch.

### Major changes to the Allegro CL interface to the Amazon Elastic Compute Cloud (EC2), some incompatible

The Amazon Elastic Compute Cloud (EC2), described in ec2.htm has had a major revision, with support now provided for regions. The changes are described at the beginning of ec2.htm. Note that some changes are incompatible: some argument lists have changed, a number of variables have been removed, defaults for some arguments are changed, and so on. There is also much new functionality.

### Other changes since the release

- New installation for Mac 64-bit graphics utilities. You need GTK and X11 to use the IDE or CLIM with Allegro CL on the Mac, and additionally OpenMotif for CLIM. Previously, installation of these utilities for 64-bit Lisps was very involved and difficult. This process has been simplified substantially, as described in Installing X11, GTK, and Open Motif on Mac OS X in installation.htm.
- dequeue method can now wait with a timeout. The wait keyword argument to dequeue can now be a real number, indicating how many seconds a process should wait when asked to dequeue an empty queue (waiting for an item to be added to the queue so it can be dequeued). If the time limit is reached, the value of the new empty-queue-result argument is returned. If wait is `nil` and the queue is empty, an error is returned (as before). If wait is a real less than or equal to zero and the queue is empty, dequeue returns the value of the empty-queue-result immediately.
- Deflation (compression) of data now supported. The class `util.zip:deflate-stream` and related functions allow you to compress data which can then be written to a file or to a vector. The existing function util.zip:inflate will uncompress the data. The deflate utility was added in a patch released in March, 2011.
- The macro in-case-mode, designed to assit loading fasl file compiled in one case mode into a Lisp using another case mode. While it is always better to use source files and associated fasl files compiled in the case mode you are using in your running Lisp (see case.htm), sometimes this is not possible. The new macro in-case-mode will permit loading fasl files compiled in a different mode from the ruinning Lisp in most cases.
- Structures may be passed and returned to foreign functions by value as well as by reference. See Passing structures by value in foreign-functions.htm for more information. Until this change, all structures were passed and returned by reference, even when the specification indicated (because no *) that by value was desired. Because of this change, existing code that seems to specify by value will signal a warning but will still be converted to by reference. You must modify the code (specifying a value for the pass-structs-by-value argument to def-foreign-call) or set the value of `ff:*pass-structs-by-value*` appropriately to get by value behavior.

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

## 3.1 All pre-8.2 Lisp compiled files must be recompiled (old fasl files will not load)

fasl files (compiled Lisp files) created by releases of Allegro CL prior to 8.2 will not load into Allegro CL 8.2. All such files must be recreated by compiling the associated Lisp source files. An error will be signaled if Lisp attempts to load an older, incompatible fasl file.

8.2.beta fasl file will load into 8.2 final. There is no need to recompile 8.2.beta compiled files.

## 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. Except for Mac OS X, version 8.2 uses the 8.1 installation procedure: installation is described in installation.htm. Mac OS X installation is described in the section Installation on Mac OS X 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 8.2 is known to work with the following minimal operating system versions. Allegro CL 8.2 runs on all operating system versions released (not in beta or pre-release form) September 1, 2009. See below for places to obtain information on operating systems released after that date.

Note that Allegro CL 8.2 does not run on Windows 98/Me or on Mac OS X 10.4.

### 32-bit platforms

- Apple Mac OSX (Intel) 10.5
- FreeBSD 6.x
- IBM AIX 5.1
- Linux (x86), glibc 2.3
- Microsoft Windows 2000/XP/Vista/Server 2003/7
- Sun Solaris (SPARC) 2.9

### 64-bit platforms

- 64-bit Apple Mac OS X 10.5
- 64-bit IBM AIX 5.1
- 64-bit Linux (x86-64), glibc 2.4
- 64-bit Microsoft Windows XP/Vista/Server 2003/7
- 64-bit Sun Solaris (SPARC) 2.9
- 64-bit Sun Solaris (x86-64) 2.10

## 5.1 OS patch needed for Solaris 2.8 on Sparcs

A problem with Solaris 2.8 where calls to run-shell-command can cause Lisp to hang is fixed by operating system patch 108993-18 (which supersedes the earlier patch 108827-36 for this problem). On Solaris 8, it can also be fixed by adding /usr/lib/lwp to the front of your `LD_LIBRARY_PATH` environment variable. No fix is necessary for Solaris 2.9.

The patch can be obtained from this Sun website: http://sunsolve.sun.com/search/document.do?assetkey=1-26-49843-1.

## 5.2 Mac OS X notes

Allegro CL 8.2 is only supported on Mac OS X version 10.5 or later. It is not supported on versions 10.4 or earlier.

Common Graphics and the IDE are now supported on Mac OS X See Section 8.1 Common Graphics and the IDE on the Mac for more information. Both the IDE and CLIM require certain tools (X11, GTK, Open Motif) which may have to be installed separately. See Installation on Mac OS X in installation.htm for details.

The Runtime Analyzer (see runtime-analyzer.htm) does not work properly on the 64-bit Mac OS X port (there is no problem on the 32-bit port).

#### Building shared libraries on Mac OS X

Building shared libraries on Mac OS X in foreign-functions.htm describes how to create a shared library suitable for loading into Allegro CL. We have determined that the `-flat_namespace` to the ld used to create the shared library is necessary, as shown in the linked section.

## 5.3 AIX notes

In order for Allegro CL 8.2 to run on AIX the following filesets must be installed:

- bos.perf.perfstat
- bos.perf.libperfstat

These filesets should be available on the AIX installation media.

Without these filesets, Lisp will likely fail on startup. The exact nature of the failure depends of the specific dlopen() implementation. A typical failure message looks like:

    dlopen(/usr/local/allegro/acl81/libacli8110.so, mode) error: Bad address

## 5.4 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 8.1 as delivered. Values are Hexadecimal integers.

Operating System | Lisp base | C base
FreeBSD | 0x40000000 | 0xa0000000
Linux (x86) | 0x20000000 | 0xa0000000
Linux (AMD64) 64-bit | 0x1000000000 | 0x2000000000
Mac OS X 32-bit | 0x10000000 | 0x74000000
Mac OS X 64-bit | 0x1000000000 | 0x2000000000
Windows 32-bit | 0x20000000 | 0x54000000
Windows 64-bit | 0x100000000 | 0x200000000
AIX 32-bit | 0x30000000 | 0x64000000
AIX 64-bit | 0x700001000000000 | 0x700002000000000
Solaris 32-bit | 0x4000000 | 0x54000000
Solaris 64-bit | 0x1000000000 | 0x10000000000
Solaris (AMD64) 64-bit | 0x1000000000 | 0x10000000000

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

We have added a number of new capabilities to Allegro CL. Here we give links to the documentation of the new features.

The features described in Section 6.1.1 Features added to Allegro CL 8.1 after the initial release of Allegro CL 8.1 were released originally as patches to Allegro CL 8.1, but after the initial release of Allegro CL 8.1. The features described in Section 6.1.2 New features in Allegro CL 8.2 are new in the Allegro CL 8.2 release.

## 6.1.1 Features added to Allegro CL 8.1 after the initial release of Allegro CL 8.1

Various additions to Allegro CL 8.1 were added after the original release of Allegro CL 8.1. We list them here. All are part of release 8.2.

1. Changes to multiprocessing API in anticipation of Symmetric Multiprocessing (SMP). SMP will be introduced to Allegro CL in release 9.0. In SMP, the macros without-interrupts and sys:without-scheduling will no longer lock objects in code they enclose (this is a side effect of preventing process switches in a non-SMP Lisp). Therefore, code which depends on that feature must be rewritten. The document smp.htm describes the changes and the new functionality that implements the new API. Because 8.2 does not implement SMP, code will run as before but we recommend that users modify their code now in anticipation. There is one noticeable change: when the compiler encounters without-interrupts or sys:without-scheduling, a warning will be signaled syaing that these macros are now deprecated. This warning can be muffled by evaluating `(setq excl::warn-smp-usage nil)`.
2. New plot widget for drawing X/Y graphs (such as scatter graphs). An analog of the existing `chart-widget`, the new `plot-widget` allows drawing X/Y plots of various types. The `plot-widget` page has several examples. There are new functions and many `chart-widget` operators and classes have been modified to encompass the new plot functionality. (The biggest change is where methods are defined, with methods previously defined on a class now being inherited from a superclass.) Existing `chart-widget` code should work without change.
3. Enhancements to IDE projects allows easier handling of subprojects: see Section 4.6.1 Subprojects in the IDE User Guide.
4. Enhancements to the mail functions send-smtp, send-smtp-auth and send-letter to support SSL and STARTTLS. The mail functions send-smtp, send-smtp-auth, and send-letter have all been been enhanced to allow for ssl connections and STARTTLS negotiation ('TLS' stands for Transport Layer Security and is another name for SSL.) The enhancement is implemented by allowing information to be included in the value of the mail-server. See the (linked) function descriptions for details.
5. Changes to SSL interface allows using more methods and using ciphers. The methods keyword argument to make-ssl-client-stream and make-ssl-server-stream now accepts more options allowing more control over which SSL protocol is used. A new ciphers keyword argument allows using a cipher.
6. Enhanced update.exe on Windows now also downloads updates. update.exe is the program on Windows that rebuilds images when you have obtained updates using sys:update-allegro (or the Download Patches dialog). update.exe has been enhanced to accept arguments: -u, -p, and -P. When -u is passed, updates will be downloaded and new images built if necessary. -p and -P specify how sys:update-allegro (which is called when -u is specified) will deal with proxies. See the description of sys:update-allegro for details.
7. New unix-shared-library examples and documentation. The description of how to make a Lisp application a shared library on Unix-style platforms is now applicable to all such platforms. See unix-shared-library.htm.
8. New util-string module and util.string:string+ function. The module is designed to provide string utility functions that are more efficient or more convenient that Common Lisp string functions. The first new function is string+. It acts like `(concatenate 'string ...)` but accepts any objects as arguments (stringifying them with princ-to-string) and like `(format nil "..." ...)` but is faster, particularly for short strings and certain common object types, and easier to use. See string-utilities.htm.
9. New operating system interface function excl.osi:mkdtemp creates a uniquely named temporary directory. This new function does not work on Windows, Solaris, or HP-UX. excl.osi:mkdtemp takes a string ending in six X's (like "/tmp/mydirXXXXXX") as its argument. It replaces the six X's with characters that result in a new directory name, creates the directory, and returns the new name (a string).
10. New compact keyword argument to net.mail:extract-email-addresses. extract-email-addresses now accepts a compact keyword argument, which, when specified true, causes the results to be returned as a list of `user@domain` strings.
11. excl.shell:rm has a new no-execute keyword argument. Like the no-execute argument to other shell functions, when specified true, information about what would be done is printed but no further action is taken. See rm and shell-module.htm.
12. defun-foreign-callable now accepts a returning declaration. defun-foreign-callable accepts "declarations" which provide information about the foreign-callable Lisp function. A `:returning` declaration is now accepted. Its value can be a foreign type. The `:returning` declaration replaces the convert-to-c-types argument in register-foreign-callable when it is used.
13. md5-file has a return keyword argument. The documentation for md5-file did not describe it but has been corrected.

## 6.1.2 New features in Allegro CL 8.2

1. New step interface will step through sources. The documentation is at The source stepper in debugging.htm. See also the new Stepper Dialog. Note it is not available on Sparc or AIX platforms.
2. describe for a function-object now lists closed over variables if any. Here is an example using describe:

       cl-user(1): (let (x) (defun foo (y) (+ x y)))
       foo
       cl-user(2): (describe #'foo)
       #<Interpreted Closure foo> is a new function.
         The arguments are (y)
       It closes over the following variables:
       x
       cl-user(3):

3. Type and dynamic-extent declarations warn about non-visible variables. If a type or a dynamic-extent declaration references a variable or an ftype declaration references a function that is not lexically visible, a warning is signaled. Thus:

       (defun show-me (msg &rest args)
         (declare (dynamic-extent blargs))
         (apply #'format t msg args))

   will signal a warning.

4. New coverage tool excl:with-coverage. Coverage analysis determines how much code has been excercised in a test. A new macro, with-coverage, provides coverage information on tested code. See Coverage analysis in Allegro CL in miscellaneous.htm.
5. New start and end keyword arguments to disassemble: the function cl:disassemble not accepts start and end keyword arguments which restrict the output to a portion of the disassembled code. See Extensions to cl:make-package, cl:disassemble, cl:truename, cl:probe-file, cl:open, cl:apropos in implementation.htm.
6. New functions test for floating-point Nans and infinities. The functions exceptional-floating-point-number-p, nanp, and infinityp test whether an object is a floating-point infinity or NaN. The constants associated with floating-point infinities and NaNs were exported in an update to release 8.1. See Floating-point infinities and NaNs, and floating-point underflow and overflow in implementation.htm.
7. New cl:time implementation provides more detailed information. The cl:time macro prints information on the time taken and the space used when evaluating a form. cl:time has been modified to display time in microseconds rather than milleseconds:

       cl-user(1): (time (dotimes (i 100000000) (* i i)))
       ; cpu time (non-gc) 7.478883 sec user, 0.137910 sec system
       ; cpu time (gc)     5.481388 sec user, 0.093007 sec system
       ; cpu time (total)  12.960271 sec user, 0.230917 sec system
       ; real time  13.215964 sec
       ; space allocation:
       ;  0 cons cells, 2,399,443,896 other bytes, 0 static bytes
       nil
       cl-user(2):

8. Function print-system-state now returns no values. In earlier releases, print-system-state returned `nil`.
9. Minor changes to gc information printed after a garbage collection. The brief message after a scavenge now looks like this: `gc: XN-E=32% N=444528 T+=0 A-=0 pfu=0+336 pfg=0+11` rather than this: `gc: XN-E=32% N=444528 O+=0 pfu=0+336 pfg=0+11`. T+ (meaning bytes tenured to oldspace) is used instead of O+, and A- (meaning aclfree bytes freed) has been added. Similar changes have been made to the more verbose messages. These messages are discussed in the section Gsgc switches and the section How do I find out when scavenges happen? in gc.htm.
10. excl:aclfree and excl:aclfree-aligned now return number of bytes originally requested or 0. The number of bytes freed is greater than or equal to the value returned, unless that value is 0, which normally means no action was taken for some reason (but it is more complicated, so see the page descriptions). See aclfree and aclfree-aligned for further details.
11. Scavenges may be triggered by aclmalloc calls. Malloc space may be freed as a side effect of a scavenge (a garbage collection of newspace, see gc.htm). Now a scavenge may be triggered by the need for aclmalloc space even if newspace is not full. See When scavenges occur in gc.htm.
12. New optional environment argument to excl:arglist: arglist now takes an optional environment argument. If specified and non-nil, it must be an environment object which is used to find the current lexical definition of the function within that environment rather than looking for the global definition.
13. New compiler switch verify-type-declarations-switch gives runtime check for declared variables. Code compiled while `verify-type-declarations-switch` is true will have runtime checks added to ensure declared variables which are set, or let or lambda bound have a value of the correct type. See the description of `verify-type-declarations-switch` for details and restrictions.
14. New file-version-info argument to generate-application (Windows only): generate-application takes a file-version-info keyword argument which takes a list of keyword/string pairs and these are stored as VERSIONINFO in the application executable. See Setting the VERSIONINFO of the application executable on Windows in delivery.htm.
15. New compiler optimization switches optimize-large-functions-switch, save-source-level-debug-info-switch, and generate-accurate-x86-float-code-switch. `optimize-large-functions-switch` allows you to suppress optizations when they result in too large a compiled function and associated too long compilation speed. `save-source-level-debug-info-switch` tells the compiler to write information useful for source debugging and coverage analysis to the fasl file. `generate-accurate-x86-float-code-switch` only affects 32-bit x86. If true (as it is except when speed is 3 and safety 0), flags are set which ensures the results floating-point calculations are identical from run to run; if `nil` such calculations are faster but may differ in the lowest bits from run to run.
16. :follow can be the value of Allegro CL print variables. The value means use the value of the corresponding CL print variable. See Allegro CL print variables can follow the CL print variable value in implementation.htm.
17. New trace print variables *trace-print-array* and *trace-print-circle*. See `*trace-print-array*` and `*trace-print-circle*`.
18. New trace option :show-stack. See The tracer in debugging.htm.
19. New macro ensuring-compiled-body and associated function compile-lambda-expr-in-env. ensuring-compiled-body is like progn in that it executes its body forms sequentially, but if encountered in interpreted code, it wraps the body in a `lambda` and passes it to compile-lambda-expr-in-env for compilation and funcalls the result. Thus the code will be executed compiled in all cases. The associated compile-lambda-expr-in-env takes a lambda expression and an environment, and compiles the lambda expression and returns the resulting function object.
20. New URI slot accessor net.uri:uri-userinfo. uri-userinfo accesses the userinfo slot of a `uri` object.

## 6.2 Non-backward-compatible changes in the base Lisp

1. Windows only: new Open SSL version: Allegro CL Enterprise and above uses a different version of Open SSL for the Secure Socket Layer (SSL) protocol, as described in Secure Socket Layer (SSL) in socket.htm. On Unix platforms, the libraries are part of the Allegro CL library so Unix customers need not make any changes. Windows customers must install the new version, as described in Installing OpenSSL libraries on Windows in installation.htm. The directory used is different so previous installations are unaffected.
2. named-readtable now errors by default when there is no readtable with specified name. The default value of the optional errorp argument to named-readtable is now `t` rather than `nil`, so `(named-readtable :no-such-name)` errors rather than returning `nil` while `(named-readtable :no-such-name nil)` returns `nil`. The change was made because `(setq *readtable* (named-readtable :my-misspelled-name))` would result in `*readtable*` being `nil`, with bad consequences perhaps hard to debug. You might have code like this:

       (let ((rt (or (excl:named-readtable :myrt)
                     (setf (excl:named-readtable :myrt) (copy-readtable)))))
         ...)

   That code will error if the :myrt readtable does not exist. This is the fix:

       (let ((rt (or (excl:named-readtable :myrt nil) ;; errorp is now NIL
                     (setf (excl:named-readtable :myrt) (copy-readtable)))))
         ...)

3. Compiler optimization switch functions now have five (rather than four) required arguments as compilation-speed quality is now used. The compiler optimization switches are variables such as `trust-declarations-switch`. They are all listed in Examining the current settings and their effect in compiling.htm. Their value must be t, nil, or a function of five required arguments. The arguments are the values of the optization qualities saftey, space, speed, debug, and compilation-speed. In previous releases, compilation-speed was not used and the functions took four required arguments.

   This change affects only those users who wrote their own functions to be the value of the swicthes. It is possible even those functions will continue to work, depending on how the argument list was specified and how the function was compiled, but users are urged to update any functions they wrote.

   compilation-speed is initially only used for `optimize-large-functions-switch`.

   build-lisp-image (see building-images.htm) now has a `:opt-compilation-speed` keyword argument, similar to the existing `:opt-debug`, `:opt-space`, `:opt-speed`, and `:opt-safety` keyword arguments, setting the initial value of the quality in the image being built.

4. Standard readtable is now read-only. The standard readtable, which is the initial value of `*readtable*` when Lisp starts, is now read-only and cannot be modified. Copies of that readtable can be modified. See The standard readtable is read-only, affect on with-standard-io-syntax and modifying the readtable in init files in implementation.htm for more information. As the title of that section implies, we believe the most likely effect of this change is to break calls to with-standard-io-syntax where the body modified the value of `*readtable*` (which is set to the standard readtable by the macro), and cause error when forms in an init file (like .clinit.cl) modify `*readtable*` because its value during initialization is the standard readtable. (In a listener, it is by default a copy of the standard readtable). We show how to get around those problems in the linked section.
5. build-lisp-image/generate-application argument name changes: :c-heap-start and :c-heap-size are now :aclmalloc-heap-start and :aclmalloc-heap-size. The names of the associated environment variables have also changed from ACL_BUILD_C_HEAP_START and ACL_BUILD_C_HEAP_SIZE to ACL_BUILD_ACLMALLOC_HEAP_START and ACL_BUILD_ACLMALLOC_HEAP_SIZE. The arguments to build-lisp-image which specify the start and initial size of the Aclmalloc heap (formerly called the C heap) are now `:aclmalloc-heap-start` (formerly `:c-heap-start`) and `:aclmalloc-heap-size` (formerly `:c-heap-size`). The new names more accurately describe the heap and its use (it is the heap allocated for space needed by aclmalloc and certain static arrays and related things). It has nothing to do with C. generate-application also uses the new argument names, which are simply passed to build-lisp-image. The heap is now refered to in the documentation as the Aclmalloc heap rather than as the C heap.

   The old argument names (:c-heap-size and :c-heap-start) are still accepted but their use signals a warning. The old environment variable names and also accepted (the environment variables provide defaults for the arguments if a value is not specified). Users should update their code to use the new names. These arguments to build-lisp-image and the associated environment variables are described in the section Arguments to build-lisp-image 2: defaults not inherited from the running image in building-images.htm.

6. Defaults for :include-locales and :runtime-bundle arguments to generate-application changed to t. Those arguments to generate-application previously defaulted to `nil`. Including the bundle and the locales in applications is always safer. Only quite restrictive space considerations (rare with modern computers) should necessitate not including those files. See also delivery.htm, where generate-application is discussed in detail.
7. MOP function compute-default-initargs argument list changed: the MOP function compute-default-initargs has had two (undocumented) arguments not specified by the MOP: the class-precedence-list and the direct default initargs, both calculated by finalize-inheritance. Starting in 8.2, compute-default-initargs accepts only one argument; the class. In specialized methods on compute-default-initargs, the other two arguments can be re-manufactured thus:

           (let ((direct (mop:class-direct-default-initargs class))
                 (cpl (slot-value class 'mop:class-precedence-list)))

8. *default-external-format* no longer supported. Actually, the variable `*default-external-format*` has effectively not been supported since the introduction of locales in version 7.0 but the documentation incorrectly said it was supported. The value of external-format arguments (to open and other functions) which do not have specific defaults effectively defaults to `(find-external-format *locale*)` (see find-external-format and `*locale*`).
9. Heap start locations modified for 32-bit Mac and Linux. The 32-bit Linux Lisp Heap Start is changed from 0x71000000 down to 0x20000000, while the C Heap Start of the C heap on 32-bit Macs is changed from 0x64000000 to 0x74000000. Both changes give the Lisp heap more room to grow. You can modify the heap start locations by building new images (see building-images.htm. Even though this change is in the non-backward-compatible section, it is unlikely that any users will be adversely affected.
10. New initial values for *trace-print-length* and *trace-print-level*. `*trace-print-length*` now has initial value 25 (previously `nil`); `*trace-print-level*` now has initial value 5 (previously `nil`).
11. Changes to the symbol implementation. In order to better support SMP, symbols have changed their shape and access style. Instead of 3 AUs (Allocation Unit = 2 natural words) symbols are now 4 AUs in size. The symbol-value-vector is still accessed via the symbol indirectly (but through a different slot), and accesses to values through this vector are still independent per-thread, but the access method has changed.

    Also, (and the primary reason for this change) the global-symbol-value access has changed to be a direct access from within the symbol itself. The first fullword slot of a symbol is the value slot (it is the second word, since the first word has a type code in it). The value slot now serves as the global value slot - i.e. that location that stores the symbol's value when the symbol isn't bound by a lambda or let form in the current thread. Originally, the global-value cell was the first entry in the symbol-value-vector, which might be reallocated if it needs to grow for more threads - this would have presented a strong challenge and a likely harsh slowdown for atomic global-symbol-value accesses, and it would even have required accesses to known-bound symbols to be locked. Now, global-symbol-value reads and writes can easily be made atomic because there is no indirection and no possibility for the re-allocation of the object that holds the global slot.

    This change does not affect most users, but users who, for example, reference symbols from foreign code using the specification in the misc/lisp.h file will have to modify their code.

## 6.3 Other changes to and notes about the base Lisp

1. New Operating System Interface functions: fdatasync, which synchronize the in-core parts of a file to disk, and sysconf, which gets configuration information at runtime (such as the allowable number of open files).
2. Macro with-breakpoints-installed renamed with-ldb-stepping-enabled. The name change to with-ldb-stepping-enabled better reflects the functionality. The old name can still be used but we recommend using the new name.
3. Inspector now tracks the right margin. The TTY inspector, used except when the IDE is running, now uses the value of `*print-right-margin*` to decide how much data to display. See The inspector and the right margin in inspector.htm.
4. New default values for *tenured-bytes-limit*. The default value for `*tenured-bytes-limit*` (which is the number of bytes tenured that trigger a global gc) has been changed from 8 to 20 Mbytes in 32-bit Lisps and 16 to 50 Mbytes in 64-bit Lisps.
5. in-package converts symbols used for string designators to uninterned symbols. It has long been true (although not previously documented) that the macroexpansion of defpackage has converted symbols used as names to uninterned symbols. Starting in release 8.2, the macroexpansion of in-package does this as well. See cl:defpackage and cl:in-package in implementation.htm for details and a discussion of why this is useful.
6. New generic function file-character-position: file-character-position determines the current character position of a stream and returns it, returning `nil` if the value cannot be determined or does not make sense.
7. New condition purespace-write-error signaled when an attempt is made to modify a constant string in a pll file. See `purespace-write-error` for details. Such modification attempts have always signaled an error, but until this release just a `simple-error`.
8. New tar facility. This facility, actually added as a patch in version 8.1, allows the contents of tar file to be extracted. See tar support in Allegro Common Lisp in miscellaneous.htm.
9. class-precedence-list available as a slot value before mop:class-precedence-list can access it. mop:class-precedence-list signals an error if called before a class is finalized, but the class-precedence-list is available as a slot value -- `(slot-value class 'mop:class-precedence-list)` as soon as it is calculated by mop:finalize-inheritance, which might be well before the actual finalization. See class-precedence-list: when is it available? in implementation.htm.
10. SOAP notes: `SOAPAction` header is now conformant - earlier version failed to place string quotes around the value. `XMLDecl` is now (correctly) optional - earlier versions signalled an error if this item was absent in the SOAP message. Many SOAP examples were pointing to obsolete web services. These examples are now deleted or commented out. See soap.htm for documentation on SOAP.

## 6.4 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 8.2 release.

## 7.0 Release Notes for CLIM

The CLIM manual has not been updated (other than minor corrections) for the 8.2 release. There have been no significant changes to CLIM functionality compared to 8.1, though there have been bug fixes and performance enhancements.

(Repeated mostly from 8.1 Release Notes.) The documentation for CLIM is in an online PDF file, clim-ug.pdf.

On Linux and FreeBSD, Allegro CLIM works with Open Motif 2.1 and 2.2. Open Motif 2.2 is available at no charge from www.openmotif.org. Allegro CL 8.2/Allegro CLIM will work with either version. Redhat Linux 7.2 is supplied with Lesstif, a version of Motif that does not work with CLIM. See the Linux architecture specific information in the Allegro CL FAQ for information on how to install Redhat Linux 7.2 without lesstif and how to uninstall lesstif if already present. On all other Unix platforms, CLIM uses the platform-supplied Motif.

Certain CLIM demos on Solaris 64 bit give segv or otherwise fail when displaying over the network, language environment must be set to C. This is a problem when running any Sun GUI (such as the CDE environment or the Gnome 2.0 interface) on a Solaris64 machine. When bringing up the environment, set the language/locale to "C". (On the login screen, there's an "Options" button, which displays a menu that has a "Languages" submenu. Choose "C". Note: the default value is typically "en_US".) The "C" setting can process all of the 64-bit font sets. However, difficulties arise when displaying over the network. If you are displaying on the monitor of the machine running Allegro CL (and CLIM), the demos work as long as the language/locale is "C". They typically do not work when displaying on a monitor over the network. As of this writing, there is no fix for the problem.

## 8.0 Release Notes for Common Graphics and the IDE

Common Graphics and the IDE and now available on Mac OSX. See Section 8.1 Common Graphics and the IDE on the Mac for more information.

The first subsection describes changes to Common Graphics and the IDE that are non backward-compatible. Please review this section and make whatever necessary changes to your code to obtain the desired behavior in release 8.2.

The second subsection describes other changes to Common Graphics and the IDE. These should not require code changes (please tell us if any do, because that may indicate a bug), but note that certain function and argument names have been deprecated in favor of new names, and that new code should reflect these changes, and old code should be revised at some point.

The section Section 8.5 IDE release notes and its subsections provide information about the IDE.

## 8.1 Common Graphics and the IDE on the Mac

Common Graphics and the IDE and available on the Mac. You must run X11 (it is in the /Applications directory and comes with recent versions of 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.

## 8.2 Significant changes in Common Graphics

The look has changed, with a new Franz icon and new icons for various operations. The Project Window toolbar is now all related to programming and widgets have been moved to their own floating Widget Palette.

1. New split-bar widget. The `split-bar` control can be used to allow the end user to interactively resize multiple tiled windows panes, or to move and resize groups of widgets.
2. New widget palette. Widgets are displayed on a floating palette rather than on the Project Window. A new item on the Form menu displays this pallette, see Form | Show Widget Palette. See also show-widget-palette-when-click-form.
3. Enhancements to IDE projects allows easier handling of subprojects: see Section 4.6.1 Subprojects in the IDE User Guide.
4. New Install IDE menu. The Install menu has an item New Patches for getting patches (replacing Help | Download Patches, which is no longer present) and items for updating AllegroCache and AllegroStore.
5. New graph-layout and related functions. A new grapher utility function graph-layout calculates how to create a graph from nodes and links. It does not do actual drawing. Instead, it calculates the information necessary for the graphing program.

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

1. The various breakpoint menu items on the Run menu now relate to the stepper dialog rather than tracing. See the Run menu for details.
2. The tabs property now uses character widths as units for text-editing controls. tabs used to use pixels as its units for all controls (tabs applies to various outline and list controls as well as these text-edit controls: `multi-line-editable-text`, `text-edit-pane`, `rich-edit`, and `rich-edit-pane`). Behavior is unchanged for the outline and list controls, but for the text-edit controls, the units are now character widths.
3. Using the main keypad Enter key. On the Windows platform, a virtual-key-down method will receive more consistent argument values when the Enter key on the main keypad is pressed while holding down the Alt key. The key-code argument had been the value of `vk-enter`, which represents the numeric keypad Enter key, and the buttons argument was always the value of `extended-key`, regardless of the actual shift keys that were down. Now the key-code will be `vk-return` and the buttons argument will be the actual shift keys that were down. This would also affect comtab keystrokes defined with set-event-function for the same keys.
4. Right-hand Alt key is (by default) no longer handled by Common Graphics on Windows. The configuration option reserve-righthand-alt-key specifies whether the right hand Alt key (somethimes called the AltGr key) will be handled by Common Graphics or passed directly to the OS. The initial value of that option is `nil` (meaning pass to the OS). The option did not exist prior to 8.2, and the right hand Alt key was handled by Common Graphics, as if the option were true. Thus the initial behavior has changed. This option affects Windows only.
5. Help | Download patches is now Install | New Patches. See Install menu.
6. Minor change is position of pop-up-menus-for-many-sorted-choices: the position argument for pop-up-menus-for-many-sorted-choices is now relative to the upper-left corner of the interior of the relevant window rather than just the upper-left corner thus making the position what is expected for scrolled windows. This is a minor change and only technically not backward-compatible.
7. Scrollbars for the IDE workspace no longer enabled by default, now controlled by ide-page-size configuration option. When use-ide-parent-window was enabled, the IDE workspace had scrollbars. The new configuration option ide-page-size now controls whether such scrollbars are enabled. The scrolling commands on the View menu are present only if the value of ide-page-size is such that scrolling is enabled.
8. section-box and cross-section-box incompatibly changed. These are `grid-widget` functions. section-box has a changed argument list, with fewer required arguments and with different meanings (so any call must be rewritten). section-box and cross-section-box now return `nil` when the cross-section is empty (rather than a box object that has negative size).

## 8.4 Other changes in Common Graphics

1. New generic function cache-cell-values for grid-widgets. cache-cell-values caches the values for all cells of `grid-widget` that are not cached already. This may make scrolling faster and prevents cell values from being read at unpredictable redisplay times, when it might not be safe.
2. New Windows-only list-view features. On Windows, the `list-view` control now supports check boxes (see show-check-boxes and on-check and the `list-view-item` property checked), grid lines (see show-grid-lines), full row selection (see full-row-select), and draggable headers (see draggable-headers).
3. Parenthesis and other character matching can be done with a pop-up window. This feature was added because Windows-style matching does not work on the Mac (see Section 8.1 Common Graphics and the IDE on the Mac). The variable `*show-parenthesis-matches-as-pop-up-window*` controls the behavior. The initial value of that variable is true on the Mac and `nil` on other platforms. Setting it to `nil` on the Mac will suppress matching behavior. If the value is set to true on other platforms, the marks will only be visible momentarily (specifically for `*parenthesis-match-pop-up-milliseconds*` milliseconds), which may be preferred by some users.
4. New math utility functions. These function find intersections of tell when points are on line segments or other objects. The new functions include line-segment-intersection, line-segment-intersection-x-y, line-segment-intersects-box-p, line-segment-intersects-box-x-y-p, line-x-at-y, line-x-at-y-x-y, line-y-at-x, line-y-at-x-x-y, radial-line-box-intersection, radial-line-box-intersection-x-y, radial-line-circle-intersection, radial-line-circle-intersection-x-y, and on-line-segment-x-y-p.
5. New box functions. box-center-x and box-center-y return the (integer) vertical/horizontal midpoints of a box. center-to-box and center-to-box-x-y returns a box centered at a specified point.
6. New tab-side property controls where tab-control tabs are located. tab-side can be `:top` (the default), `:bottom`, `:left`, or `:right`. The associated `tab-control` will have the tabs on the specified side. (See tab-side page for information about this property on Windows XP.)
7. Home and End keys will scroll to the top and bottom of the scrollable canvas when handle-scrolling-keys is true. See handle-scrolling-keys.
8. set-first-visible-line now works on scrolling-static-text. See set-first-visible-line and `scrolling-static-text`.
9. New plot-view regression-line option. Regression lines can now be drawn on `plot-widget`s, using the `plot-view` property draw-regression-lines. Associated properties control the appearance of regression lines.
10. New marker-lines property of chart-axes. The marker-lines property of a `chart-axis` places lines at specified locations.
11. New configuration property ignores redundant mouse moved calls. If the configuration property ignore-redundant-mouse-moves is true (as it is by default), mouse-moved will not be called if the X and Y coordinates of the mouse position are unchanged, even if the system detects mouse movement. (There are reports of bogus calls to mouse-moved when using the Emacs-Lisp interface and this property suppresses those calls.)
12. New configuration option invoke-web-browsers-with-keystrokes. The invoke-web-browsers-with-keystrokes configuration option determines how the function invoke-private-html-browser invokes a third-party HTML-browsing program on the Windows platform. If true, the system simulates typing a URL into the browser. Otherwise it invokes the browser by other means.
13. New function scroll-window-to-middle centers contents of a window. scroll-window-to-middle is a convenience function scrolls a window as needed so that equivalent amounts are scrolled off the left and right sides, and off the top and bottom sides.
14. draw-arrowhead now returns the location at the base of the arrowhead. draw-arrowhead returns two value, the x and y coordinates of the base of the arrowhead, allowing you to only draw the arrow line to the base and not thereby obscuring the tip when the line is thick.
15. New items on View | Manage Windows submenu: View | Manage Windows has new items Initialize Window Location and Initialize All Window Locations which moves and resizes the currently selected or all IDE windows to the original location and size.
16. New app property default-error-handler-for-delivery. The default-error-handler-for-delivery property allows you to customize behavior when an unhandled error occurs in an application. The description of the property has examples of what you might do. Also defined is the default handler report-unexpected-error-and-exit. The Advanced tab of the Project Manager dialog has a widget for this property labeled Default Error Handler for Delivery.
17. New event handlers for back and forward mouse buttons. mouse-back-down, mouse-back-up, mouse-forward-down, and mouse-forward-up have as values functions that are called when the back/forward button is pressed/released. Microsoft calls these buttons X button 1 and 2. The forward and back button on ThinkPads also call these functions when pressed/released.
18. chart-axis labels may be angled on Windows. See major-label-angle and minor-label-angle for details. This is available on Windows only.
19. Color aliasing and gradients supported when drawing on Windows. There are numerous variables and properties associated with this new feature. Start with `*antialiasing*` and `*color-gradient-filling*`.
20. New replicate-pixmap generic function tiles a graphical-stream with a pixmap. replicate-pixmap acts like copy-to-stream except it tiles the whole area with the pixmap rather than making one copy.
21. New features on Tab Order dialog. The Tab Order dialog has a new button to sort the tab order vertically by widget position. (This feature was actually added in release 8.1 in a patch).
22. New normal-exterior function returns the size of the window when in normal state. normal-exterior takes a window argument and returns the size (as a `box` object) that window would have if its state were `:normal`.
23. New buffer-size argument to ask-user-for-existing-pathname and ask-user-for-new-pathname. Both ask-user-for-existing-pathname and ask-user-for-new-pathname have a buffer-size keyword argument, used only on Windows. Its default value should suffice for all calls but a larger buffer size may be specified.
24. Chart-view property values-are-stacked may now have value :downward. The value `:downward` for values-are-stacked, a `chart-view` property, causes chart-objects to be stacked in reverse order, which, when chart-orientation is `:vertical`, would match the direction in which the objects are listed from top to bottom in the chart's legend.
25. display-html can also post. display-html, which displays an HTML text file (or a plain text file) or a web page, can now display text specified as part of the uri-or-path argument.
26. The inspect dialog now handles a mouse's back and forward buttons. See the Inspect dialog.
27. New item-list option select-on-multiple-characters. See select-on-multiple-characters which allows you to select from an `item-list` by typing the initial charcaters (rather than just the first character).
28. New class argument to with-message-window and new message-window class. By default, with-message-window creates a window of the `message-window` class but you can subclass `message-window` and specify that subclass if you want a different appearance.
29. New keystroke for moving to previous expressions in an IDE listener. In an IDE listener (like the Debug window), you can scroll through previously-evaluated forms by holding down the control and alt keys and pressing the up and down arrow keys.
30. simple-click-toggle now applies to outline widgets. See simple-click-toggle.
31. string-search and string-replace have new lines-of-padding keyword argument. The value of the lines-of-padding argument to string-search and string-replace should be an integer (default 0) which specifies the minimum number of lines of text visible above and below the string match, when possible.
32. New condition class memory-bitmap-not-created. A condition of type `memory-bitmap-not-created` is signaled if an error occurs when creating the backing-store memory bitmap for a window. This typically indicates that not enough memory was available to create the memory bitmap.
33. New option map-control-left-click-to-right-click. map-control-left-click-to-right-click makes clicking the left mouse button while the control key is down the same as clicking the right mouse button with no keys down, which mimics one button Mac behavior.

## 8.5 IDE release notes

1. New Stepper Dialog steps through sources. See Stepper Dialog.
2. ide:comtab-report has new argument list (not backward-compatible). The arguments to ide:comtab-report are now keyword arguments rather than optional arguments so any call to that function specifying argument values must be rewritten.
3. The Apropos dialog has some new columns. The Apropos has new columns for Compiler Macro (abbreviated Cmp Mac) and Symbol Macro (abbreviated Sym Mac).
4. ide:source-file-types replaces ide:file-dialog-source-types. Use of ide:file-dialog-source-types is deprecated. Use ide:source-file-types instead. These options determine what file types are displayed initially in various file dialogs.
5. New handle-multiple-packages-in-buffer configuration option. The ide:handle-multiple-packages-in-buffer option specifies whether commands such as Tools | Incremental Compile and Tools | Incremental Evaluation will read source code in the correct package even when the editor buffer contains multiple in-package forms for different packages.
6. New editor-string-search-lines-of-padding configuration option. The ide:editor-string-search-lines-of-padding option specifies the numbers of lines scrolled into view (if possible) above and below a string match in an editor buffer.
7. New ide-priority configuration option. The ide:ide-priority option controls the mp:process-priority of the IDE process. It can be set using the Run | Prioritize IDE Response menu command, or with setf. Its value is initially 8 which make the IDE process have higher priority than other processes (created in the default manner). This makes the IDE more responsive but may slow down other applications. You can toggle the value to 0 to make other processes more responsive.
8. New IDE option for using color-gradients and anti-aliasing in tree-graphs. ide:use-color-gradients-in-tree-graphs, if true, binds `*color-gradient-filling*` to true while drawing various IDE graphs while ide:use-antialiased-text-in-tree-graphs binds `*antialiasing*` to true when drawing the text in nodes of those graphs.
9. all-files has new arguments. New keyword arguments to all-files (which returns a list of files in a project) control the contents and order of the files returned.
10. New generic function editable-files. editable-files, like distributed-files, takes a project and returns the editable files included in that project.
11. New function use-trace-dialog-in-this-process causes the current process to send its output to the Trace Dialog. The output will be directed there while the Trace Dialog is present. Most IDE processes alread do this Run | Run Project). use-trace-dialog-in-this-process allows you to redirect output from other processes.
12. New generic function ide:sample-initargs specifies defaults for a widget being placed on a form. ide:sample-initargs is called when a widget is being placed onto a form window, to determine the sample property values that it will initially have.
13. New generic functions allow displaying the Inspect dialog even when IDE is not running. ide:ide-inspect and ide:ide-inspect-standalone display the Inspect even when the IDE is running (but is loaded).
14. Enhancement to the Find in Files dialog. There is a new matching test lines field which shows the particular text lines in the file which is selected, perhaps allowing you to see whether the matches are of interest. See the description of the Find In Files dialog.
15. Widgets in Trace dialog can be resized. The Trace Dialog now contains `split-bar` widgets that allow widgets in the dialog to be resized.
16. New option shift-windows-onto-screen-at-startup. If shift-windows-onto-screen-at-startup is true (the default is true, which was the previous behavior) allows you to control whether windows postion out of view should be moved into view. Occasionally, that is not desirable and can now be suppressed.

## 8.5.1 Opening projects from releases prior to 8.1

Allegro CL 8.1 projects should open without problem in Allegro CL 8.2.

## 8.6 Functionality to handle differences between Windows and GTK

### For complete information on the differences between Windows and GTK, please see cggtk-relnotes.html.

Common Graphics and the IDE run on Windows and Linux with GTK. Certain differences between the two operating systems and windowing systems mean that some things do not work the same in Windows as in GTK and vice versa. The functionality listed here tries to handle the differences. Some of the variables/operators/etc. are only available on one of the two platforms.

### Known bug with menu-items and buttons

GTK Only: all-black menu-items and half-black buttons. There is still a mystery on the GTK platform where all button widgets can turn half black along a diagonal line, and all menu-items on some platforms will be totally black. This seems to happen only when opening a project from the Startup Action dialog, though, so a workaround is to not reopen a project from that dialog and instead to use the Recent menu or File | Open Project just afterward. We have tracked the problem down to the use of transparent-pane windows such as the frame-child of a form window, but beyond that it is a total mystery.

#### Mozilla support

The system needs to know the directory where the GTK control supplied by Mozilla to support the `html-widget` resides. (On windows, the widget is implemented in another way.) It may not be practical to search for the location automatically. See mozilla-library-path, `*mozilla-library-path*`, and find-mozilla-gtk-path.

#### Event handler processes

Because Linux currently does not use native threads and Windows does, on Windows, all windows handle events in their own thread associated with the window while on Linux/GTK, there is one event-handling thread. default-application-window-subkey, `*use-single-cg-event-handling-process*`, and `*single-cg-event-handling-process*` allow distinguishing behavior when necessary. cg-process-wait should be used on GTK instead of process-wait in event handlers. See also process-pending-events-if-event-handler.

#### Miscellaneous

- New function override-native-shortcuts. override-native-shortcuts allows you to override GTK shortcuts. Doing so makes menus less visually attractive but prevents shortcuts from overriding modality of dialogs and other minor inconveniences (see the description for all details).
- Linux has a built-in hand cursor, which is the value of `hand-cursor`. That variable is `nil` on windows. `(find-cursor :hand-cursor)` works correctly on both,
- Linux pixel size issues: because Linux/GTK seems not to have a reliable notion of pixel size, the functions pixels-to-points, points-to-pixels, and font-pixel-height are provided. They work on Windows but are usually not necessary.
- Timer resolution on Linux/GTK: see `*cg-timer-resolution*`.
- Check marks in menus: on Linux/GTK: you must specify at creation time whether a menu-item will ever be checked. See checkable.
- Modal dialogs: when displaying a modal dialog, the owner window is usually disabled. On GTK, this may take too long. `*modal-dialogs-disable-owner*` handles this.
- f10 key: it requires special handling on Linux.GTK, see handle-f10.
- Scroll increments: the new function scroll-increment is needed on Linux/GTK. It works on Windows but there it is essentially the same as user-scroll (which does not work on Linux.GTK).
- Using the IDE parent-window: issues of mixing windows from various applications are more complex on Linux/GTK than on Windows. See the functions use-ide-parent-window, maximize-ide, ide-exterior, and top-ide-window, and the classes `ide-parent-window`, `ide-child-window`, and `ide-owner-window`. The IDE menu item View | Maximize IDE (Linux/GTK only) is related.
- On GTK, the help commands use a third-party browser rather than a dialog within the IDE. On GTK, the IDE's help facility will no longer use a CG html browser inside the IDE by default, due to the unpredictability of the Mozilla GTK widget on which it is built. Instead, use-cg-html-browser will default to `nil` so that a standalone browser is used. If the value of this configuration option is still true from an earlier release, you may wish to change it to `nil`. If use-cg-html-browser is true and the CG browser fails, the IDE will automatically turn the option off for you, though it's possible for the IDE to be hung at that point so that you cannot save the options file. When use-cg-html-browser is `nil`, then a standalone Firefox is invoked if use-private-html-browser is true, and otherwise the URL or file path is simply placed onto the system clipboard for the user to paste into an HTML browser program.

## 8.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. New functions in the windows package access and set the version info of a file. See win:file-version-info and win:set-file-version-info. The set function allows you to modify the version info in the executable file (now just a copy of a standard Allegro CL executable like allegro.exe) used by your application so its version info is about your application. An application executable can also be modified when copied to the application directory by specifying a value for the file-version-info keyword argument to generate-application.

## 9.0 Release notes for AllegroServe

See Section 2.0 Information on changes and new stuff since the 8.2 release for changes since the release. There were no significant changes at the time of the release.

## 10.0 Release notes for The Emacs/Lisp interface

No significant changes.

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

## 12.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 minimal revisions compared to the 8.2 page.
Created 2019.8.20.

ToC | DocOverview | CGDoc | RelNotes | FAQ | Index | PermutedIndex
| Allegro CL version 9.0 Minimally revised from 8.2.