Page 5 Table of Contents Index Page 7
Chapters
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30
A, B, C, D, E



CHAPTER 2. CONVENTIONS

as possible, independent of the conformance of individual vendors. (When all Lisp vendors
implement X3J13 Common Lisp, the clim-lisp package could be eliminated.) clim-lisp is
the version of Common Lisp in which CLIM is implemented and which the clim-user package
uses instead of common-lisp. clim-lisp contains only exported symbols, and is locked in those
implementations that allow package locking.

clim is the package where the symbols specified in this specification live. It contains only
exported symbols and is locked in those implementations that allow package locking.

clim-sys is the package where useful "system-like" functionality lives, including such things as
resources and multi-processing primitives. It contains functionality that is not part of Common
Lisp, but which is not conceptually the province of CLIM itself. It contains only exported
symbols and is locked in those implementations that allow package locking.

No code is written in any of the above packages, but rather code is written for symbols in the
above packages. None of the above use any other packages (in the sense of the :use option to
defpackage). A CLIM implementation might define a clim-internals package that uses each of
the above packages, thus getting the definition of Lisp from clim-lisp. It would then implement
the functionality of the symbols in clim and clim-sys in the clim-internals package.

clim-user is a package that programmers can use if they don't wish to create their own package.
It is the CLIM analog of common-lisp-user.

2.3 "Spread" Point Arguments to Functions

Many functions that take point arguments come in two forms: structured and spread. Functions
that take structured point arguments take the argument as a single point object. Functions that
take spread point arguments take a pair of arguments that correspond to the x and y coordinates
of the point.

Functions that take spread point arguments, or return spread point values have an asterisk in
their name, for example, draw-line*.

2.4 Immutability of Objects

Most CLIM objects are immutable, that is, at the protocol level none of their components can be
modified once the object is created. Examples of immutable objects include all of the members
of the region classes, colors and opacities, text styles, and line styles. Since immutable objects
by definition never change, functions in the CLIM API can safely capture immutable objects
without first copying them. This also allows CLIM to cache immutable objects. Constructor
functions that return immutable objects are free to either create and return a new object, or
return an already existing object.

A few CLIM objects are mutable. Examples of mutable objects include streams and output
records. Some components of mutable objects can be modified once the object has been created,


Page 5 Table of Contents Index Page 7
Chapters
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30
A, B, C, D, E