Documentation: Description of *features*

Common Lisp implementations use the variable *features* to reify information on implementation- or environment-specific properties and functionalities. This page explains the meaning of the features provided by CMUCL.

Standardized

:ieee-floating-point
If present, indicates that the implementation purports to conform to the requirements of IEEE standard for binary floating-point arithmetic.
:x3j13
Indicates that the implementation conforms to some particular working draft of the X3J13 working group on the Common Lisp specification.
:ansi-cl
Indicates that the implementation purports to conform to the ANSI Common Lisp specification.
:common-lisp
This feature identifies the language family Common Lisp, without specifying a particular dialect within that family.

Platform-related

:sparc
The implementation targets the SPARC architecture.
:sun4
The implementation generates code for the Sun4 generation of SPARC processors.
:sparcstation
The implementation generates code for the SPARCstation generation of SPARC processors.
:sparc-v7
The implemenation generates code for the SPARC-V7 generation of SPARC processors. This allows the fsqrt instruction to be used.
:sparc-v8
The implementation generates code for the SPARC-V8 generation of SPARC processors. This allows fast fixnum multiplies and divides to be used.
:sparc-v9
The implementation generates code for the SPARC-V9 generation of SPARC processors. This allows certain extra floating-point instructions to be generated.
:x86
The implementation targets the x86 architecture.
:hppa
The implementation targets the HP PA-RISC architecture.
:alpha
The implementation targets the Alpha architecture.
:sgi
The implementation targets the SGI MIPS architecture.
:solaris
The implementation runs on the Solaris operating system.
:sunos
The implementation runs on the SunOS operating system.
:svr4
The implementation runs on some branch of the SVR4 family of operating systems.
:linux
The implementation runs on the Linux operating system.
:glibc2
The implementation runs above version 2 of the GNU C library.
:bsd
The implementation runs on an operating system in the BSD family.
:freebsd
The implementation runs on the FreeBSD operating system.
:mach
The implementation runs on the Mach operating system.
:irix
The implementation runs on the IRIX operating system.
:hpux
The implementation runs on the HPUX operating system.
:unix
The implementation runs on some member of the Unix family of operating systems.

Implementation-specific

:cgc
Conservative garbage collector (currently only implemented for the x86 architecture). This is no longer supported on x86. Only the generational gc is supported now. The standard garbage collector on other platforms is stop-and-copy, based on Cheney's algorithm.
:gencgc
A conservative generational garbage collector is present. Currently available for x86, sparc, and ppc, and is the default for these.
:mp
Support for multiprocessing is present.
:small
Tells the compiler to try to reduce the size of generated code. This leads it to byte-compile certain functions instead of generating native code.
:random-mt19937
Indicates that a random number generator based on the Mersenne Twister algorithm is present. See the article Mersenne twister: A 623-dimensionally equidistributed uniform pseudorandom number generator, ACM Transactions on Modeling and Computer Simulation, 1997 by Makoto Matsumoto and T. Nishimura.
:hash-new
Indicates that a new implementation of hash tables supporting EQUALP is present.
:complex-fp-vops
Enable VOPS to be used for operations on complex floating point numbers. Currently only used on the SPARC and x86 ports.
:pcl
Indicates that the PCL implementation of CLOS is present.
:gerds-pcl
Indicates that the PCL implementation of CLOS is present, with modifications by Gerd Moellmann.
:portable-commonloops
An alias for PCL.
:pcl-structures
??
:new-assembler
Indicates that a new version of the assembler is present.
:python
Indicates that the Python native compiler is present.
:cmu
Identifies the CMUCL implementation.
:cmu17
Identifies version 17 or later of the CMUCL implementation.
:cmu18
Identifies version 18 or later of the CMUCL implementation.
:cmu19
Identifies version 19 or later of the CMUCL implementation.
:common
Similar to the :common-lisp feature.
:clx
The implementation includes the CLX subsystem for writing X11 programs.
:clm
The implementation includes the CLM subsystem for writing Motif applications.
:hemlock
The Hemlock editor is loaded.
:modular-arith
Indicates that modular arithmetic is supported. That is, unsigned 32-bit arithmetic can be done without consing of intermediate results if it is know that the final result is an unsigned 32-bit number. This can be done by (logand x #xffffffff), for example.
:double-double
Indicates support for double-double floats. These are extended precision floats consisting of 2 double-float numbers that allow approximately 106 bits (32 digits) of precision
:stack-checking
Indicates that stack overflow checking is supported. Instead of producing a segfault when the control stack overflows, the error is caught instead and the user is given an opportunity to abort the computation with causing Lisp to exit.
:heap-overflow-check
Indicates that heap overflow checking is available. When the heap is about to run out of room, Lisp throws an error that allows the user to possibly do something before all of heap is consumed.

Deprecated features no longer used

Here is a list of some of the features that used to be available but are no longer available. Many of these features are now standard parts of the build.

:fast-maxmin
On SPARC-V9 use conditional move instructions for min and max, which are (probably) faster than the normal instructions since they avoid branching. This is always true now.
:propagate-fun-type
Allows the compiler to infer types for many mathematical functions, including square root, exponential and logarithmic functions, trignometric functions and their inverses, and hyperbolic functions and their inverses. For numeric code, this can greatly enhance efficiency by allowing the compiler to use specialized versions of the functions instead of the generic versions. The greatest benefit of this type inference is determining that the result of the function is real-valued number instead of possibly being a complex-valued number. This is always done now.
:propagate-float-type
Enables list-style float type specifiers such as (single-float 0.0 1.0) to be taken into account. This is always done now.
:constrain-float-type
Allows the constraint propagation phase of the compiler to apply global flow analysis to floating point numbers, in order to obtain dynamic type information. This is always done now.
:new-compiler
Indicates that a new version of the Python compiler is present. No longer used.