X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=doc%2Fmanual%2Fstart-stop.texinfo;h=be2a88a0a3478d3a18b6c8a1d3ae14f0f69290e6;hb=d8ad375f27c0006f8896047686a065b8243c7e0f;hp=8e9df470bfef80c52f6a35309828a29c1032ddbb;hpb=66973734ef6a395f2f0ca9e3a52111d41a0aed25;p=sbcl.git
diff --git a/doc/manual/start-stop.texinfo b/doc/manual/start-stop.texinfo
index 8e9df47..be2a88a 100644
--- a/doc/manual/start-stop.texinfo
+++ b/doc/manual/start-stop.texinfo
@@ -1,12 +1,13 @@
@node Starting and Stopping
@comment node-name, next, previous, up
-@chapter Starting and Stoppping
+@chapter Starting and Stopping
@menu
-* Starting SBCL::
-* Stopping SBCL::
-* Command Line Options::
-* Initialization Files::
+* Starting SBCL::
+* Stopping SBCL::
+* Command Line Options::
+* Initialization Files::
+* Initialization and Exit Hooks::
@end menu
@node Starting SBCL
@@ -14,9 +15,9 @@
@section Starting SBCL
@menu
-* Running from Shell::
-* Running from Emacs::
-* Shebang Scripts::
+* Running from Shell::
+* Running from Emacs::
+* Shebang Scripts::
@end menu
@node Running from Shell
@@ -29,7 +30,6 @@ You should end up in the toplevel @dfn{REPL} (read, eval, print
-loop), where you can interact with SBCL by typing expressions.
@smallexample
-@cartouche
$ sbcl
This is SBCL 0.8.13.60, an implementation of ANSI Common Lisp.
More information about SBCL is available at .
@@ -43,7 +43,6 @@ distribution for more information.
4
* (quit)
$
-@end cartouche
@end smallexample
See also @ref{Command Line Options} and @ref{Stopping SBCL}.
@@ -67,21 +66,41 @@ Integration}.
@node Shebang Scripts
@comment node-name, next, previous, up
@subsection Shebang Scripts
+@vindex sb-ext:*posix-argv*
+@vindex *posix-argv*
-SBCL doesn't come with built-in support for shebang-line execution,
-but this can be provided with a shell trampoline, or by dispatching
-from initialization files (@pxref{Unix-style Command Line Protocol} for
-an example.)
+Standard Unix tools that are interpreters follow a common command line
+protocol that is necessary to work with ``shebang scripts''. SBCL supports
+this via the @code{--script} command line option.
+Example file (@file{hello.lisp}):
+
+@lisp
+#!/usr/local/bin/sbcl --script
+(write-line "Hello, World!")
+@end lisp
+
+Usage examples:
+
+@smallexample
+$ ./hello.lisp
+Hello, World!
+@end smallexample
+
+@smallexample
+$ sbcl --script hello.lisp
+Hello, World!
+@end smallexample
@node Stopping SBCL
@comment node-name, next, previous, up
@section Stopping SBCL
@menu
-* Quit::
-* End of File::
-* Exit on Errors::
+* Quit::
+* End of File::
+* Saving a Core Image::
+* Exit on Errors::
@end menu
@node Quit
@@ -103,6 +122,22 @@ By default SBCL also exits on end of input, caused either by user
pressing @kbd{Control-D} on an attached terminal, or end of input when
using SBCL as part of a shell pipeline.
+@node Saving a Core Image
+@comment node-name, next, previous, up
+@subsection Saving a Core Image
+
+SBCL has the ability to save its state as a file for later
+execution. This functionality is important for its bootstrapping
+process, and is also provided as an extension to the user.
+
+@include fun-sb-ext-save-lisp-and-die.texinfo
+@include var-sb-ext-star-save-hooks-star.texinfo
+
+To facilitate distribution of SBCL applications using external
+resources, the filesystem location of the SBCL core file being used is
+available from Lisp.
+
+@include var-sb-ext-star-core-pathname-star.texinfo
@node Exit on Errors
@comment node-name, next, previous, up
@@ -111,9 +146,7 @@ using SBCL as part of a shell pipeline.
SBCL can also be configured to exit if an unhandled error occurs,
which is mainly useful for acting as part of a shell pipeline; doing
so under most other circumstances would mean giving up large parts of
-the flexibility and robustness of Common Lisp. See @ref{Customization
-Hooks for Users}.
-
+the flexibility and robustness of Common Lisp. See @ref{Debugger Entry}.
@node Command Line Options
@comment node-name, next, previous, up
@@ -151,8 +184,8 @@ passed on to the user program even if they was intended for the
runtime system or the Lisp system.
@menu
-* Runtime Options::
-* Toplevel Options::
+* Runtime Options::
+* Toplevel Options::
@end menu
@node Runtime Options
@@ -167,12 +200,25 @@ the Lisp core file is a user-created core file, it may run a
nonstandard toplevel which does not recognize the standard toplevel
options.
+@item --dynamic-space-size @var{megabytes}
+Size of the dynamic space reserved on startup in megabytes. Default
+value is platform dependent.
+
+@item --control-stack-size @var{megabytes}
+Size of control stack reserved for each thread in megabytes. Default
+value is 2.
+
@item --noinform
Suppress the printing of any banner or other informational message at
startup. This makes it easier to write Lisp programs which work
cleanly in Unix pipelines. See also the @code{--noprint} and
@code{--disable-debugger} options.
+@item --script @var{filename}
+As a runtime option this is equivalent to @code{--noinform}
+@code{--end-runtime-options} @code{--script} @var{filename}. See the
+description of @code{--script} as a toplevel option below.
+
@item --help
Print some basic information about SBCL, then exit.
@@ -181,7 +227,7 @@ Print SBCL's version information, then exit.
@end table
-In the future, runtime options may be added to control behavior such
+In the future, runtime options may be added to control behaviour such
as lazy allocation of memory.
Runtime options, including any --end-runtime-options option, are
@@ -196,16 +242,19 @@ chance to see it.
@item --sysinit @var{filename}
Load filename instead of the default system initialization file
-(@pxref{System Initialization File}.) There is no special option to
-cause no system initialization file to be read, but on a Unix
-system ``@code{"--sysinit /dev/null}'' can be used to achieve the same
-effect.
+(@pxref{System Initialization File}.)
+
+@item --no-sysinit
+Don't load a system-wide initialization file. If this option is given,
+the @code{--sysinit} option is ignored.
@item --userinit @var{filename}
Load filename instead of the default user initialization file
-(@pxref{User Initialization File}.) There is no special option to
-cause no user initialization file to be read, but ``@code{--userinit
-/dev/null}'' can be used to achieve the same effect.
+(@pxref{User Initialization File}.)
+
+@item --no-userinit
+Don't load a user initialization file. If this option is given,
+the @code{--userinit} option is ignored.
@item --eval @var{command}
After executing any initialization file, but before starting the
@@ -227,8 +276,21 @@ option, this makes it easier to write Lisp "scripts" which work
cleanly in Unix pipelines.
@item --disable-debugger
-This is equivalent to @code{--eval '(sb-ext:disable-debugger)'}.
-@xref{Customization Hooks for Users}.
+By default when SBCL encounters an error, it enters the builtin
+debugger, allowing interactive diagnosis and possible intercession.
+This option disables the debugger, causing errors to print a backtrace
+and exit with status 1 instead. When given, this option takes effect
+before loading of initialization files or processing @code{--eval} and
+@code{--load} options. See @code{sb-ext:disable-debugger} for details.
+@xref{Debugger Entry}.
+
+@item --script @var{filename}
+Implies @code{--no-userinit} @code{--no-sysinit}
+@code{--disable-debugger} @code{--end-toplevel-options}.
+
+Causes the system to load the specified file instead of entering the
+read-eval-print-loop, and exit afterwards. If the file begins with a
+shebang line, it is ignored.
@end table
@@ -237,14 +299,14 @@ This is equivalent to @code{--eval '(sb-ext:disable-debugger)'}.
@comment node-name, next, previous, up
@section Initialization Files
-This section covers initialization files loaded at startup, which can
-be used to customize the lisp environment.
+This section covers initialization files processed at startup, which
+can be used to customize the lisp environment.
@menu
-* System Initialization File::
-* User Initialization File::
-* Initialization File Semantics::
-* Initialization Examples::
+* System Initialization File::
+* User Initialization File::
+* Initialization File Semantics::
+* Initialization Examples::
@end menu
@node System Initialization File
@@ -270,12 +332,10 @@ No user initialization file is required.
@comment node-name, next, previous, up
@subsection Initialization File Semantics
-SBCL uses @code{load} to process its initialization files, which
-has the unfortunate effect of preventing users from changing the
-default startup @code{*package*}, and setting a default optimization
-policy.
-
-This is considered a bug and liable to change in the future.
+SBCL processes initialization files with @code{read} and @code{eval},
+not @code{load}; hence initialization files can be used to set startup
+@code{*package*} and @code{*readtable*}, and for proclaiming a global
+optimization policy.
@node Initialization Examples
@comment node-name, next, previous, up
@@ -285,71 +345,9 @@ Some examples of what you may consider doing in the initialization
files follow.
@menu
-* Unix-style Command Line Protocol::
-* Automatic Recompilation of Stale Fasls::
+* Automatic Recompilation of Stale Fasls::
@end menu
-@node Unix-style Command Line Protocol
-@comment node-name, next, previous, up
-@subsubsection Unix-style Command Line Protocol
-
-Standard Unix tools that are interpeters follow a common command line
-protocol that is necessary to work with ``shebang scripts''. SBCL
-doesn't do this by default, but adding the following snippet to an
-initialization file does the trick:
-
-@lisp
-;;; If the first user-processable command-line argument is a filename,
-;;; disable the debugger, load the file handling shebang-line and quit.
-(let ((script (and (second sb-ext:*posix-argv*)
- (probe-file (second sb-ext:*posix-argv*)))))
- (when script
- ;; Handle the possible shebang-line
- (set-dispatch-macro-character #\# #\!
- (lambda (stream char arg)
- (declare (ignore char arg))
- (read-line stream)))
- ;; Disable debugger
- (setf sb-ext:*invoke-debugger-hook*
- (lambda (condition hook)
- (declare (ignore hook))
- (format *error-output* "Error: ~A~%" condition)
- (quit :unix-status 1)))
- (load script)
- (quit)))
-@end lisp
-
-Example file (@file{hello.lisp}):
-
-@lisp
-#!/usr/local/bin/sbcl --noinform
-(write-line "Hello, World!")
-@end lisp
-
-Usage examples:
-
-@smallexample
-@cartouche
-$ ./hello.lisp
-Hello, World!
-@end cartouche
-@end smallexample
-
-@smallexample
-@cartouche
-$ sbcl hello.lisp
-This is SBCL 0.8.13.70, an implementation of ANSI Common Lisp.
-More information about SBCL is available at .
-
-SBCL is free software, provided as is, with absolutely no warranty.
-It is mostly in the public domain; some portions are provided under
-BSD-style licenses. See the CREDITS and COPYING files in the
-distribution for more information.
-Hello, World!
-@end cartouche
-@end smallexample
-
-
@node Automatic Recompilation of Stale Fasls
@comment node-name, next, previous, up
@subsubsection Automatic Recompilation of Stale Fasls
@@ -361,10 +359,22 @@ handles recompilation automatically for ASDF-based systems.
@lisp
(require :asdf)
-;;; If a fasl was stale, try to recompile and load (once).
-(defmethod asdf:perform :around ((o asdf:load-op) (c asdf:cl-source-file))
- (handler-case (call-next-method o c)
- (sb-ext:invalid-fasl error ()
- (asdf:perform (make-instance 'asdf:compile-op) c)
- (call-next-method))))
+;;; If a fasl was stale, try to recompile and load (once).
+(defmethod asdf:perform :around ((o asdf:load-op)
+ (c asdf:cl-source-file))
+ (handler-case (call-next-method o c)
+ ;; If a fasl was stale, try to recompile and load (once).
+ (sb-ext:invalid-fasl ()
+ (asdf:perform (make-instance 'asdf:compile-op) c)
+ (call-next-method))))
@end lisp
+
+@node Initialization and Exit Hooks
+@comment node-name, next, previous, up
+@section Initialization and Exit Hooks
+
+SBCL provides hooks into the system initialization and exit.
+
+@include var-sb-ext-star-init-hooks-star.texinfo
+@include var-sb-ext-star-exit-hooks-star.texinfo
+