[ Home ]
SBCL Internals

The pages on this CLiki-driven site can be edited by anybody at any time. No warranty of any kind can therefore be made; any implied warranties of merchantability or fitness for a particular purpose are expressly disclaimed
[ Home ] [ Recent Changes ] [ About CLiki ] [ Text Formatting ]

This page attempts to answer the first questions that arise when looking at the SBCL sources. For other basic issues see: Build

#!+, #!-
Like #+ and #-, but respond to the features of the SBCL being built instead of the host features (*shebang-features*).

def!struct, def!method, etc
Like their "bangless" equivalents, but handle various bootstrapping issues.

If you're eg. reading the sources to fix a non-build related bug, you can mostly ignore the bang and pretend they're just like the standard operations.

Generally their behind the scenes activities can be summarized as "define this on the host, and arrange for a target definition to happen as soon as possible". See Cross-compiling macros.

Packages
Where do packages come from?

Package definitions are created from the data in the file package-data-list.lisp-expr.

What's the difference between "SB!FOO" and "SB-FOO"?

As long as the build-process is happening on the host-lisp, packages have names like "SB!FOO" to avoid conflicts when building from another SBCL.

During the last stages of the build, when running on the newly build SBCL (make-target-2.sh) these package are renamed to their "SB-FOO" equivalents.

!foo
Symbols starting with "!" are "generally normal" in most respects, but refer to things needed only while building SBCL. Hence they are automagically removed from the final core in a desperate effort to save some space.

Finding definitions
Sometimes M-. in Slime does the right thing, sometimes not.

One useful trick: grep -r "def.*foo" src/


This page is linked from: index  

CLiki pages can be edited by anyone at any time. Imagine a fearsomely comprehensive disclaimer of liability. Now fear, comprehensively