1.0.8.48: Update comment.
[sbcl.git] / doc / manual / intro.texinfo
1 @node Introduction
2 @comment  node-name,  next,  previous,  up
3 @chapter Introduction
4
5 SBCL is a mostly-conforming implementation of the ANSI Common Lisp
6 standard. This manual focuses on behavior which is specific to SBCL,
7 not on behavior which is common to all implementations of ANSI Common
8 Lisp.
9
10 @menu
11 * ANSI Conformance::            
12 * Extensions::                  
13 * Idiosyncrasies::              
14 * Development Tools::           
15 * More SBCL Information::       
16 * More Common Lisp Information::  
17 * History and Implementation of SBCL::  
18 @end menu
19
20
21
22 @node ANSI Conformance
23 @comment  node-name,  next,  previous,  up
24 @section ANSI Conformance
25
26 Essentially every type of non-conformance is considered a bug. (The
27 exceptions involve internal inconsistencies in the standard.) In SBCL
28 the master record of known bugs is in the @file{BUGS} file in the
29 distribution.
30
31 The recommended way to report bugs is through the @cite{sbcl-help} or
32 @cite{sbcl-devel} mailing lists. For mailing list addresses,
33 see @ref{SBCL Homepage}.
34
35
36
37
38 @node Extensions
39 @comment  node-name,  next,  previous,  up
40 @section Extensions
41
42 SBCL comes with numerous extensions, some in core and some in modules
43 loadable with @code{require}. Unfortunately, not all of these
44 extensions have proper documentation yet.
45
46 @c FIXME: Once bits and pieces referred to here get real documentation
47 @c add xrefs there.
48
49 @table @strong
50
51 @item System Definition Tool
52 @code{asdf} is a flexible and popular protocol-oriented system
53 definition tool by Daniel Barlow. @inforef{Top,the asdf manual,asdf}, for
54 more information.
55
56 @item Third-party Extension Installation Tool
57 @code{asdf-install} is a tool that can be used to download and install
58 third-party libraries and applications, automatically handling
59 dependencies, etc.
60
61 @item Foreign Function Interface
62 @code{sb-alien} package allows interfacing with C-code, loading shared
63 object files, etc. @xref{Foreign Function Interface}.
64
65 @code{sb-grovel} can be used to partially automate generation of
66 foreign function interface definitions. @xref{sb-grovel}.
67
68 @item Recursive Event Loop
69 SBCL provides a recursive event loop (@code{serve-event}) for doing
70 non-blocking IO on multiple streams without using threads.
71
72 @item Metaobject Protocol
73 @code{sb-mop} package provides a metaobject protocol for the Common
74 Lisp Object System as described in @cite{Art of Metaobject Protocol}.
75
76 @item Native Threads
77 SBCL has native threads on x86/Linux, capable of taking advantage
78 of SMP on multiprocessor machines. @xref{Threading}.
79
80 @item Network Interface
81 @code{sb-bsd-sockets} is a low-level networking interface, providing
82 both TCP and UDP sockets. @xref{Networking}.
83
84 @item Introspective Facilities
85 @code{sb-introspect} module offers numerous introspective extensions,
86 including access to function lambda-lists.
87
88 @item Operating System Interface
89 @code{sb-ext} contains a number of functions for running external
90 processes, accessing environment variables, etc.
91
92 @code{sb-posix} module provides a lispy interface to standard POSIX
93 facilities.
94
95 @item Extensible Streams
96 @code{sb-gray} is an implentation of @emph{Gray Streams}. @xref{Gray
97 Streams}.
98
99 @code{sb-simple-streams} is an implementation of the @emph{simple
100 streams} API proposed by Franz Inc. @xref{Simple Streams}.
101
102 @item Profiling
103 @code{sb-profile} is a exact per-function profiler. @xref{Deterministic
104 Profiler}.
105
106 @code{sb-sprof} is a statistical profiler, capable of call-graph
107 generation and instruction level profiling. @xref{Statistical
108 Profiler}.
109
110 @item Customization Hooks
111 SBCL contains a number of extra-standard customization hooks that
112 can be used to tweak the behaviour of the system. @xref{Customization
113 Hooks for Users}.
114
115 @code{sb-aclrepl} provides an Allegro CL -style toplevel for SBCL,
116 as an alternative to the classic CMUCL-style one. @xref{sb-aclrepl}.
117
118 @item CLTL2 Compatility Layer
119 @code{sb-cltl2} module provides @code{compiler-let} and environment
120 access functionality described in @cite{Common Lisp The Language, 2nd
121 Edition} which were removed from the language during the ANSI
122 standardization process.
123
124 @item Executable Fasl Packaging
125 @code{sb-executable} can be used to concatenate multiple fasls into a
126 single executable (though the presense of an SBCL runtime and core image
127 is still required to run it).
128
129 The @code{:executable} argument to @ref{Function
130 sb-ext:save-lisp-and-die} can produce a `standalone' executable
131 containing both an image of the current Lisp session and an SBCL
132 runtime.
133
134 @item Bitwise Rotation
135 @code{sb-rotate-byte} provides an efficient primitive for bitwise
136 rotation of integers, an operation required by eg. numerous
137 cryptographic algorightms, but not available as a primitive in ANSI
138 Common Lisp. @xref{sb-rotate-byte}.
139
140 @item Test Harness
141 @code{sb-rt} module is a simple yet attractive regression and
142 unit-test framework.
143
144 @item MD5 Sums
145 @code{sb-md5} is an implementation of the MD5 message digest algorithm
146 for Common Lisp, using the modular arithmetic optimizations provided
147 by SBCL. @xref{sb-md5}.
148
149 @end table
150
151
152
153
154 @node Idiosyncrasies
155 @comment  node-name,  next,  previous,  up
156 @section Idiosyncrasies
157
158 The information in this section describes some of the ways that SBCL
159 deals with choices that the ANSI standard leaves to the
160 implementation.
161
162 @menu
163 * Declarations::                
164 * Compiler-only Implementation::  
165 * Defining Constants::          
166 * Style Warnings::              
167 @end menu
168
169 @node Declarations
170 @comment  node-name,  next,  previous,  up
171 @subsection Declarations
172
173 Declarations are generally treated as assertions. This general
174 principle, and its implications, and the bugs which still keep the
175 compiler from quite satisfying this principle, are discussed in
176 @ref{Declarations as Assertions}.
177
178 @node Compiler-only Implementation
179 @comment  node-name,  next,  previous,  up
180 @subsection Compiler-only Implementation
181
182 SBCL is essentially a compiler-only implementation of Common Lisp.
183 That is, for all but a few special cases, @code{eval} creates a lambda
184 expression, calls @code{compile} on the lambda expression to create a
185 compiled function, and then calls @code{funcall} on the resulting
186 function object. This is explicitly allowed by the ANSI standard, but
187 leads to some oddities, e.g. collapsing @code{functionp} and
188 @code{compiled-function-p} into the same predicate.
189
190 @node Defining Constants
191 @comment  node-name,  next,  previous,  up
192 @subsection Defining Constants
193 @findex defconstant
194
195 SBCL is quite strict about ANSI's definition of @code{defconstant}.
196 ANSI says that doing @code{defconstant} of the same symbol more than
197 once is undefined unless the new value is @code{eql} to the old value.
198 Conforming to this specification is a nuisance when the ``constant''
199 value is only constant under some weaker test like @code{string=} or
200 @code{equal}.
201
202 It's especially annoying because, in SBCL, @code{defconstant} takes
203 effect not only at load time but also at compile time, so that just
204 compiling and loading reasonable code like
205 @lisp
206 (defconstant +foobyte+ '(1 4))
207 @end lisp
208 runs into this undefined behavior. Many implementations of Common Lisp
209 try to help the programmer around this annoyance by silently accepting
210 the undefined code and trying to do what the programmer probably
211 meant. 
212
213 SBCL instead treats the undefined behavior as an error. Often such
214 code can be rewritten in portable ANSI Common Lisp which has the
215 desired behavior. E.g., the code above can be given an exactly defined
216 meaning by replacing @code{defconstant} either with
217 @code{defparameter} or with a customized macro which does the right
218 thing, eg.
219 @lisp
220 (defmacro define-constant (name value &optional doc)
221   `(defconstant ,name (if (boundp ',name) (symbol-value ',name) ,value)
222                       ,@@(when doc (list doc))))
223 @end lisp
224 or possibly along the lines of the @code{defconstant-eqx} macro used
225 internally in the implementation of SBCL itself. In circumstances
226 where this is not appropriate, the programmer can handle the condition
227 type @code{sb-ext:defconstant-uneql}, and choose either the
228 @command{continue} or @command{abort} restart as appropriate.
229
230 @node Style Warnings
231 @comment  node-name,  next,  previous,  up
232 @subsection Style Warnings
233
234 SBCL gives style warnings about various kinds of perfectly legal code,
235 e.g.
236
237 @itemize
238   
239 @item
240 @code{defmethod} without a preceding @code{defgeneric};
241   
242 @item
243 multiple @code{defun}s of the same symbol in different units;
244   
245 @item
246 special variables not named in the conventional @code{*foo*} style,
247 and lexical variables unconventionally named in the @code{*foo*} style
248
249 @end itemize
250
251 This causes friction with people who point out that other ways of
252 organizing code (especially avoiding the use of @code{defgeneric}) are
253 just as aesthetically stylish.  However, these warnings should be read
254 not as ``warning, bad aesthetics detected, you have no style'' but
255 ``warning, this style keeps the compiler from understanding the code
256 as well as you might like.'' That is, unless the compiler warns about
257 such conditions, there's no way for the compiler to warn about some
258 programming errors which would otherwise be easy to overlook. (Related
259 bug: The warning about multiple @code{defun}s is pointlessly annoying
260 when you compile and then load a function containing @code{defun}
261 wrapped in @code{eval-when}, and ideally should be suppressed in that
262 case, but still isn't as of SBCL 0.7.6.)
263
264
265
266
267 @node Development Tools
268 @comment  node-name,  next,  previous,  up
269 @section Development Tools
270
271 @menu
272 * Editor Integration::          
273 * Language Reference::          
274 * Generating Executables::      
275 @end menu
276
277 @node Editor Integration
278 @comment  node-name,  next,  previous,  up
279 @subsection Editor Integration
280
281 Though SBCL can be used running ``bare'', the recommended mode of
282 development is with an editor connected to SBCL, supporting not
283 only basic lisp editing (paren-matching, etc), but providing among
284 other features an integrated debugger, interactive compilation, and
285 automated documentation lookup.
286
287 Currently @dfn{SLIME}@footnote{Historically, the ILISP package at
288 @uref{http://ilisp.cons.org/} provided similar functionality, but it
289 does not support modern SBCL versions.} (Superior Lisp Interaction
290 Mode for Emacs) together with Emacs is recommended for use with
291 SBCL, though other options exist as well. 
292
293 SLIME can be downloaded from
294 @uref{http://www.common-lisp.net/project/slime/}.
295
296 @node Language Reference
297 @comment  node-name,  next,  previous,  up
298 @subsection Language Reference
299
300 @dfn{CLHS} (Common Lisp Hyperspec) is a hypertext version of the ANSI
301 standard, made freely available by @emph{LispWorks} -- an invaluable
302 reference.
303
304 See: @uref{http://www.lispworks.com/reference/HyperSpec/index.html}
305
306 @node Generating Executables
307 @comment  node-name,  next,  previous,  up
308 @subsection Generating Executables
309
310 SBCL can generate stand-alone executables.  The generated executables
311 include the SBCL runtime itself, so no restrictions are placed on
312 program functionality.  For example, a deployed program can call
313 @code{compile} and @code{load}, which requires the compiler to be present
314 in the executable.  For further information, @xref{Function
315 sb-ext:save-lisp-and-die}.
316
317
318 @node More SBCL Information
319 @comment  node-name,  next,  previous,  up
320 @section More SBCL Information
321
322 @menu
323 * SBCL Homepage::               
324 * Additional Distributed Documentation::  
325 * Online Documentation::        
326 * Internals Documentation::     
327 @end menu
328
329 @node SBCL Homepage
330 @comment  node-name,  next,  previous,  up
331 @subsection SBCL Homepage
332
333 The SBCL website at @uref{http://www.sbcl.org/} has some general
334 information, plus links to mailing lists devoted to SBCL, and to
335 archives of these mailing lists. Subscribing to the mailing lists
336 @cite{sbcl-help} and @cite{sbcl-announce} is recommended: both are
337 fairly low-volume, and help you keep abrest with SBCL development.
338
339 @node Additional Distributed Documentation
340 @comment  node-name,  next,  previous,  up
341 @subsection Additional Distributed Documentation
342
343 Besides this user manual both SBCL source and binary distributions
344 include some other SBCL-specific documentation files, which should be
345 installed along with this manual in on your system, eg. in
346 @file{/usr/local/share/doc/sbcl/}.
347
348 @table @file
349
350 @item BUGS
351 Lists known bugs in the distribution.
352
353 @item COPYING
354 Licence and copyright summary.
355
356 @item CREDITS
357 Authorship information on various parts of SBCL.
358
359 @item INSTALL
360 Covers installing SBCL from both source and binary distributions on
361 your system, and also has some installation related troubleshooting
362 information.
363
364 @item NEWS
365 Summarizes changes between various SBCL versions.
366
367 @item SUPPORT
368 Lists SBCL developers available for-pay development of SBCL.
369
370 @end table
371
372 @node Online Documentation
373 @comment  node-name,  next,  previous,  up
374 @subsection Online Documentation
375
376 Documentation for non-ANSI extensions for various commands is
377 available online from the SBCL executable itself. The extensions
378 for functions which have their own command prompts (e.g. the debugger,
379 and @code{inspect}) are documented in text available by typing
380 @command{help} at their command prompts. The extensions for functions
381 which don't have their own command prompt (such as @code{trace}) are
382 described in their documentation strings, unless your SBCL was
383 compiled with an option not to include documentation strings, in which
384 case the documentation strings are only readable in the source code.
385
386 @node Internals Documentation
387 @comment  node-name,  next,  previous,  up
388 @subsection Internals Documentation
389
390 If you're interested in the development of the SBCL system itself,
391 then subcribing to @cite{sbcl-devel} is a good idea.
392
393 SBCL internals documentation -- besides comments in the source -- is
394 currenly maitained as a @emph{wiki-like} website:
395 @uref{http://sbcl-internals.cliki.net/}.
396
397 Some low-level information describing the programming details of the
398 conversion from CMUCL to SBCL is available in the
399 @file{doc/FOR-CMUCL-DEVELOPERS} file in the SBCL distribution, though
400 it is not installed by default.
401
402 @node More Common Lisp Information
403 @comment  node-name,  next,  previous,  up
404 @section More Common Lisp Information
405
406 @menu
407 * Internet Community::          
408 * Third-party Libraries::       
409 * Common Lisp Books::           
410 @end menu
411
412 @node Internet Community
413 @comment  node-name,  next,  previous,  up
414 @subsection Internet Community
415
416 @c FIXME: Say something smart here
417
418 The Common Lisp internet community is fairly diverse:
419 @uref{news://comp.lang.lisp} is fairly high volume newsgroup, but has
420 a rather poor signal/noise ratio. Various special interest mailing
421 lists and IRC tend to provide more content and less flames.
422 @uref{http://www.lisp.org} and @uref{http://www.cliki.net} contain
423 numerous pointers places in the net where lispers talks shop.
424
425 @node Third-party Libraries
426 @comment  node-name,  next,  previous,  up
427 @subsection Third-party Libraries
428
429 For a wealth of information about free Common Lisp libraries and tools
430 we recommend checking out @emph{CLiki}: @uref{http://www.cliki.net/}.
431
432 @node Common Lisp Books
433 @comment  node-name,  next,  previous,  up
434 @subsection Common Lisp Books
435
436 If you're not a programmer and you're trying to learn, many
437 introductory Lisp books are available. However, we don't have any
438 standout favorites. If you can't decide, try checking the Usenet
439 @uref{news://comp.lang.lisp} FAQ for recent recommendations.
440
441 @c FIXME: This non-stance is silly. Maybe we could recommend SICP,
442 @c Touretzky, or something at least.
443
444 If you are an experienced programmer in other languages but need to
445 learn about Common Lisp, some books stand out:
446
447 @table @cite
448
449 @c FIXME: Ask Seibel if he minds us referring to the preview
450 @c 
451 @c @item Practical Common Lisp, by Peter Seibel
452 @c A forthcoming book from APress with a web free preview at
453 @c @uref{http://www.gigamonkeys.com/book/}. An excellent introduction to
454 @c the language, covering both the basics and ``advanced topics'' like
455 @c macros, CLOS, and packages.
456
457 @item ANSI Common Lisp, by Paul Graham
458 Introduces most of the language, though some parts (eg. CLOS) are
459 covered only lightly.
460
461 @item On Lisp, by Paul Graham
462 An in-depth treatment of macros, but not recommended as a first Common
463 Lisp book, since it is slightly pre-ANSI so you need to be on your
464 guard against non-standard usages, and since it doesn't really even
465 try to cover the language as a whole, focusing solely on macros.
466 Downloadable from @uref{http://www.paulgraham.com/onlisp.html}.
467
468 @item Paradigms Of Artificial Intelligence Programming, by Peter Norvig
469 Good information on general Common Lisp programming, and many
470 nontrivial examples. Whether or not your work is AI, it's a very good
471 book to look at.
472
473 @item Object-Oriented Programming In Common Lisp, by Sonya Keene
474 @c With the exception of @cite{Practical Common Lisp} 
475 None the books above emphasize CLOS, but this one does. Even if you're
476 very knowledgeable about object oriented programming in the abstract,
477 it's worth looking at this book if you want to do any OO in Common
478 Lisp. Some abstractions in CLOS (especially multiple dispatch) go
479 beyond anything you'll see in most OO systems, and there are a number
480 of lesser differences as well. This book tends to help with the
481 culture shock.
482
483 @item Art Of Metaobject Programming, by Gregor Kiczales et al.
484 Currently to prime source of information on the Common Lisp Metaobject
485 Protocol, which is supported by SBCL. Section 2 (Chapers 5 and 6) are
486 freely available at @uref{http://www.lisp.org/mop/}.
487
488 @end table
489
490
491
492
493 @node History and Implementation of SBCL
494 @comment  node-name,  next,  previous,  up
495 @section History and Implementation of SBCL
496
497 You can work productively with SBCL without knowing anything
498 understanding anything about where it came from, how it is
499 implemented, or how it extends the ANSI Common Lisp standard. However,
500 a little knowledge can be helpful in order to understand error
501 messages, to troubleshoot problems, to understand why some parts of
502 the system are better debugged than others, and to anticipate which
503 known bugs, known performance problems, and missing extensions are
504 likely to be fixed, tuned, or added.
505
506 SBCL is descended from CMUCL, which is itself descended from Spice
507 Lisp, including early implementations for the Mach operating system on
508 the IBM RT, back in the 1980s. Some design decisions from that time are
509 still reflected in the current implementation:
510
511 @itemize
512
513 @item
514 The system expects to be loaded into a fixed-at-compile-time location
515 in virtual memory, and also expects the location of all of its heap
516 storage to be specified at compile time.
517
518 @item
519 The system overcommits memory, allocating large amounts of address
520 space from the system (often more than the amount of virtual memory
521 available) and then failing if ends up using too much of the allocated
522 storage.
523
524 @item
525 The system is implemented as a C program which is responsible for
526 supplying low-level services and loading a Lisp @file{.core}
527 file.
528
529 @end itemize
530
531 @cindex Garbage Collection, generational
532 SBCL also inherited some newer architectural features from CMUCL. The
533 most important is that on some architectures it has a generational
534 garbage collector (``GC''), which has various implications (mostly
535 good) for performance. These are discussed in another chapter,
536 @ref{Efficiency}.
537
538 SBCL has diverged from CMUCL in that SBCL is now essentially a
539 ``compiler-only implementation'' of Common Lisp. This is a change in
540 implementation strategy, taking advantage of the freedom ``any of these
541 facilities might share the same execution strategy'' guaranteed in the
542 ANSI specification section 3.1 (``Evaluation''). It does not mean SBCL
543 can't be used interactively, and in fact the change is largely invisible
544 to the casual user, since SBCL still can and does execute code
545 interactively by compiling it on the fly. (It is visible if you know how
546 to look, like using @code{compiled-function-p}; and it is visible in the
547 way that that SBCL doesn't have many bugs which behave differently in
548 interpreted code than in compiled code.) What it means is that in SBCL,
549 the @code{eval} function only truly ``interprets'' a few easy kinds of
550 forms, such as symbols which are @code{boundp}. More complicated forms
551 are evaluated by calling @code{compile} and then calling @code{funcall}
552 on the returned result.
553   
554 The direct ancestor of SBCL is the x86 port of CMUCL. This port was in
555 some ways the most cobbled-together of all the CMUCL ports, since a
556 number of strange changes had to be made to support the register-poor
557 x86 architecture. Some things (like tracing and debugging) do not work
558 particularly well there. SBCL should be able to improve in these areas
559 (and has already improved in some other areas), but it takes a while.
560
561 @cindex Garbage Collection, conservative
562 On the x86 SBCL -- like the x86 port of CMUCL -- uses a
563 @emph{conservative} GC. This means that it doesn't maintain a strict
564 separation between tagged and untagged data, instead treating some
565 untagged data (e.g. raw floating point numbers) as possibly-tagged
566 data and so not collecting any Lisp objects that they point to. This
567 has some negative consequences for average time efficiency (though
568 possibly no worse than the negative consequences of trying to
569 implement an exact GC on a processor architecture as register-poor as
570 the X86) and also has potentially unlimited consequences for
571 worst-case memory efficiency. In practice, conservative garbage
572 collectors work reasonably well, not getting anywhere near the worst
573 case. But they can occasionally cause odd patterns of memory usage.
574
575 The fork from CMUCL was based on a major rewrite of the system
576 bootstrap process. CMUCL has for many years tolerated a very unusual
577 ``build'' procedure which doesn't actually build the complete system
578 from scratch, but instead progressively overwrites parts of a running
579 system with new versions. This quasi-build procedure can cause various
580 bizarre bootstrapping hangups, especially when a major change is made
581 to the system. It also makes the connection between the current source
582 code and the current executable more tenuous than in other software
583 systems -- it's easy to accidentally ``build'' a CMUCL system
584 containing characteristics not reflected in the current version of the
585 source code.
586
587 Other major changes since the fork from CMUCL include
588
589 @itemize
590
591 @item
592 SBCL has removed many CMUCL extensions, (e.g. IP networking,
593 remote procedure call, Unix system interface, and X11 interface) from
594 the core system. Most of these are available as contributed modules
595 (distributed with sbcl) or third-party modules instead.
596
597 @item
598 SBCL has deleted or deprecated some nonstandard features and code
599 complexity which helped efficiency at the price of
600 maintainability. For example, the SBCL compiler no longer implements
601 memory pooling internally (and so is simpler and more maintainable,
602 but generates more garbage and runs more slowly), and various
603 block-compilation efficiency-increasing extensions to the language
604 have been deleted or are no longer used in the implementation of SBCL
605 itself.
606
607 @end itemize