appearance.
Aware, like a fox crossing the water. Alert, like a general
on the battlefield. Kind, like a hostess greeting her guests.
- Simple, like uncarved blocks of wood. Opaque, like black
+ Simple, like uncarved blocks of wood. Opaque, like black
pools in darkened caves.
Who can tell the secrets of their hearts and minds?
The answer exists only in the Tao.
Lisp implementation for use in the CMU community.
and
CMU CL has been under continuous development since the early 1980's
- (concurrent with the Common Lisp standardization effort.)
+ (concurrent with the Common Lisp standardization effort.)
Apparently most of the CMU Common Lisp implementors moved on to
work on the Gwydion environment for Dylan.
and Bill Chiles.
The modules system (code/module.lisp, containing REQUIRE, PROVIDE,
-and friends, now deprecated by ANSI) was written by Jim Muller and
+and friends, now deprecated by ANSI) was written by Jim Muller and
rewritten by Bill Chiles.
The CMU CL garbage collector was credited to "Christopher Hoover,
was provided by Miles Bader.
The CMU implementations of the Common Lisp query functions Y-OR-N-P
-and YES-OR-NO-P were originally written by Walter van Roggen, and
+and YES-OR-NO-P were originally written by Walter van Roggen, and
updated and modified by Rob MacLachlan and Bill Chiles.
The CMU CL sort functions (code/sort.lisp) were written by Jim Large,
toplevel interface functions and drivers
compiler/main.lisp
Besides writing the compiler, and various other work mentioned elsewhere,
-Robert MacLachlan was also credited with tuning the implementation of
+Robert MacLachlan was also credited with tuning the implementation of
streams for Unix files, and writing
various floating point support code
code/float-trap.lisp, floating point traps
code/time.lisp
William Lott is also credited with writing or heavily maintaining some
-parts of the CMU CL compiler. He was responsible for lifting
+parts of the CMU CL compiler. He was responsible for lifting
compiler/meta-vmdef.lisp out of compiler/vmdef.lisp, and also wrote
various optimizations
compiler/array-tran.lisp
compiler/seqtran.lisp (with some code adapted from an older
seqtran written by Wholey and Fahlman)
the separable compiler backend
- compiler/backend.lisp
+ compiler/backend.lisp
compiler/generic/utils.lisp
the implementation of LOAD-TIME-VALUE
compiler/ltv.lisp
compiler/generic/vm-typetran.lisp, FOO=type ops
compiler/generic/objdef.lisp, FOO=object representation
compiler/generic/primtype.lisp, FOO=primitive types
-Also, Christopher Hoover and William Lott wrote compiler/generic/vm-macs.lisp
+Also, Christopher Hoover and William Lott wrote compiler/generic/vm-macs.lisp
to centralize information about machine-dependent macros and constants.
Sean Hallgren is credited with most of the Alpha backend. Julian
complex-float support.
The original PPC backend was the work of Gary Byers. Some bug fixes
-and other changes to update it for current CMUCL interfaces were made
+and other changes to update it for current CMUCL interfaces were made
by Eric Marsden and Douglas Crosher
The CMU CL machine-independent disassembler (compiler/disassem.lisp)
of PURIFY was rewritten in C by William Lott.
The CMU CL number functions (code/number.lisp) were written by Rob
-MacLachlan, but acknowledge much code "derived from code written by
+MacLachlan, but acknowledge much code "derived from code written by
William Lott, Dave Mcdonald, Jim Large, Scott Fahlman, etc."
CMU CL's weak pointer support (code/weak.lisp) was written by
William Lott to remove assumptions about length of fixnums on the MIPS
port.
-The comments in the main body of the CMU CL debugger
+The comments in the main body of the CMU CL debugger
code/debug.lisp
say that it was written by Bill Chiles. Some other related files
code/debug-int.lisp, programmer's interface to the debugger
Various CMU CL support code was written by William Lott:
the bytecode interpreter
- code/byte-interp.lisp
+ code/byte-interp.lisp
bitblt-ish operations a la SYSTEM-AREA-COPY
code/bit-bash.lisp
Unix interface
contrib packages.
Robert E. Brown:
- He has reported various bugs and submitted several patches,
+ He has reported various bugs and submitted several patches,
especially improving removing gratuitous efficiencies in the
standard library.
giving SBCL (and CMU CL) its EQUALP hash tables.
Douglas Crosher:
- He continued to improve CMU CL after SBCL forked from it, creating
+ He continued to improve CMU CL after SBCL forked from it, creating
many patches which were directly applicable to SBCL. Notable examples
include fixes for various compiler bugs, the implementation of
CL:DEFINE-SYMBOL-MACRO, and a generalization of the type system's
- handling of the CONS type to allow ANSI-style (CONS FOO BAR) types.
+ handling of the CONS type to allow ANSI-style (CONS FOO BAR) types.
Alexey Dejneka:
He fixed many, many bugs on various themes, and has done a
structures with raw slots.
Robert MacLachlan:
- He has continued to answer questions about, and contribute fixes to,
+ He has continued to answer questions about, and contribute fixes to,
the CMU CL project. Some of these fixes, especially for compiler
problems, has been invaluable to the CMU CL project and, by
porting, invaluable to the SBCL project as well.
Pierre Mai:
He has continued to work on CMU CL since the SBCL fork, and also
- patched code to SBCL to enable dynamic loading of object files
+ patched code to SBCL to enable dynamic loading of object files
under OpenBSD. He contributed to the port of SBCL to MacOS X,
implementing the Lisp side of the PowerOpen ABI.
Brian Mastenbrook:
He contributed to and extensively maintained the port of SBCL to
MacOS X. His contributions include overcoming binary compatibility
- issues between different versions of dlcompat on Darwin, other
+ issues between different versions of dlcompat on Darwin, other
linker fixes, and signal handler bugfixes.
Dave McDonald:
William ("Bill") Newman:
He continued to maintain SBCL after the fork, increasing ANSI
compliance, fixing bugs, regularizing the internals of the
- system, deleting unused extensions, improving performance in
+ system, deleting unused extensions, improving performance in
some areas (especially sequence functions and non-simple vectors),
updating documentation, and even, for better or worse, getting
rid of various functionality (e.g. the byte interpreter).
Nikodemus Siivola:
He provided build fixes, in particular to tame the SunOS toolchain,
implemented package locks, ported the linkage-table code from CMUCL,
- reimplemented STEP, and has fixed many (stream-related and other) bugs
+ reimplemented STEP, and has fixed many (stream-related and other) bugs
besides.
Juho Snellman:
NS Nikodemus Siivola
PVE Peter Van Eynde
PW Paul Werkowski
+MG Gabor Melis
by Bruno Haible)
* optimizations: REMOVE-DUPLICATES now runs in linear time on
lists in some cases. This partially fixes bug 384.
+ * flush all standard streams before prompting in the REPL and the
+ debugger
+ * eof selects abort in the debugger
+ * minor incompatible change: *INVOKE-DEBUGGER-HOOK* is run before
+ *DEBUGGER-HOOK* => *DEBUGGER-HOOK* is not run when the debugger
+ is disabled
changes in sbcl-0.9.3 relative to sbcl-0.9.2:
* New feature: Experimental support for bivalent streams: streams
with no programmer available, and this option tries to set up more
appropriate behavior for that situation. This is implemented by
redefining INVOKE-DEBUGGER so that any call exits the process with a
-failure code after printing a backtrace, and by redefining *DEBUG-IO*
-to send its output to *ERROR-OUTPUT* and to raise an error if any
-input is requested from it. (Note that because it is implemented by
-modifying special variables and FDEFINITIONs, its effects persist in
-.core files created by SB-EXT:SAVE-LISP-AND-DIE. If you want to undo
-its effects, e.g. if you build a system unattended and then want to
-operate a derived system interactively, see the SB-EXT:ENABLE-DEBUGGER
-command.)
+failure code after printing a backtrace. (Note that because it is
+implemented by modifying special variables and FDEFINITIONs, its
+effects persist in .core files created by SB-EXT:SAVE-LISP-AND-DIE. If
+you want to undo its effects, e.g. if you build a system unattended
+and then want to operate a derived system interactively, see the
+SB-EXT:ENABLE-DEBUGGER command.)
.PP
Regardless of the order in which --sysinit, --userinit, and --eval
(nreverse (mapcar #'cdr *debug-print-variable-alist*))
(apply fun rest)))))))
-;;; the ordinary ANSI case of INVOKE-DEBUGGER, when not suppressed by
-;;; command-line --disable-debugger option
(defun invoke-debugger (condition)
#!+sb-doc
"Enter the debugger."
- (let ((old-hook *debugger-hook*))
- (when old-hook
- (let ((*debugger-hook* nil))
- (funcall old-hook condition old-hook))))
+ ;; call *INVOKE-DEBUGGER-HOOK* first, so that *DEBUGGER-HOOK* is not
+ ;; called when the debugger is disabled
(let ((old-hook *invoke-debugger-hook*))
(when old-hook
(let ((*invoke-debugger-hook* nil))
(funcall old-hook condition old-hook))))
-
- ;; Note: CMU CL had (SB-UNIX:UNIX-SIGSETMASK 0) here, to reset the
- ;; signal state in the case that we wind up in the debugger as a
- ;; result of something done by a signal handler. It's not
- ;; altogether obvious that this is necessary, and indeed SBCL has
- ;; not been doing it since 0.7.8.5. But nobody seems altogether
- ;; convinced yet
- ;; -- dan 2003.11.11, based on earlier comment of WHN 2002-09-28
+ (let ((old-hook *debugger-hook*))
+ (when old-hook
+ (let ((*debugger-hook* nil))
+ (funcall old-hook condition old-hook))))
;; We definitely want *PACKAGE* to be of valid type.
;;
;;; noninteractive and interactive use respectively
(defun disable-debugger ()
(when (eql *invoke-debugger-hook* nil)
- (setf *debug-io* *error-output*
- *invoke-debugger-hook* 'debugger-disabled-hook)))
+ ;; *DEBUG-IO* used to be set here to *ERROR-OUTPUT* which is sort
+ ;; of unexpected but mostly harmless, but then ENABLE-DEBUGGER had
+ ;; to set it to a suitable value again and be very careful,
+ ;; especially if the user has also set it. -- MG 2005-07-15
+ (setf *invoke-debugger-hook* 'debugger-disabled-hook)))
(defun enable-debugger ()
(when (eql *invoke-debugger-hook* 'debugger-disabled-hook)
- (setf *debug-io* *query-io*
- *invoke-debugger-hook* nil)))
-
-(setf *debug-io* *query-io*)
+ (setf *invoke-debugger-hook* nil)))
(defun show-restarts (restarts s)
(cond ((null restarts)
"When set, avoid calling INVOKE-DEBUGGER recursively when errors occur while
executing in the debugger.")
+(defun debug-read (stream)
+ (declare (type stream stream))
+ (let* ((eof-marker (cons nil nil))
+ (form (read stream nil eof-marker)))
+ (if (eq form eof-marker)
+ (abort)
+ form)))
+
(defun debug-loop-fun ()
(let* ((*debug-command-level* (1+ *debug-command-level*))
(*real-stack-top* (sb!di:top-frame))
(terpri *debug-io*)
(print-frame-call *current-frame* *debug-io* :verbosity 2)
(loop
- (catch 'debug-loop-catcher
- (handler-bind ((error (lambda (condition)
- (when *flush-debug-errors*
- (clear-input *debug-io*)
- (princ condition *debug-io*)
- (format *debug-io*
- "~&error flushed (because ~
+ (catch 'debug-loop-catcher
+ (handler-bind ((error (lambda (condition)
+ (when *flush-debug-errors*
+ (clear-input *debug-io*)
+ (princ condition *debug-io*)
+ (format *debug-io*
+ "~&error flushed (because ~
~S is set)"
- '*flush-debug-errors*)
- (/show0 "throwing DEBUG-LOOP-CATCHER")
- (throw 'debug-loop-catcher nil)))))
- ;; We have to bind LEVEL for the restart function created by
- ;; WITH-SIMPLE-RESTART.
- (let ((level *debug-command-level*)
- (restart-commands (make-restart-commands)))
- (with-simple-restart (abort
- "~@<Reduce debugger level (to debug level ~W).~@:>"
- level)
- (debug-prompt *debug-io*)
- (force-output *debug-io*)
- (let* ((exp (read *debug-io*))
- (cmd-fun (debug-command-p exp restart-commands)))
- (cond ((not cmd-fun)
- (debug-eval-print exp))
- ((consp cmd-fun)
- (format *debug-io*
- "~&Your command, ~S, is ambiguous:~%"
- exp)
- (dolist (ele cmd-fun)
- (format *debug-io* " ~A~%" ele)))
- (t
- (funcall cmd-fun))))))))))))
+ '*flush-debug-errors*)
+ (/show0 "throwing DEBUG-LOOP-CATCHER")
+ (throw 'debug-loop-catcher nil)))))
+ ;; We have to bind LEVEL for the restart function created by
+ ;; WITH-SIMPLE-RESTART.
+ (let ((level *debug-command-level*)
+ (restart-commands (make-restart-commands)))
+ (flush-standard-output-streams)
+ (debug-prompt *debug-io*)
+ (force-output *debug-io*)
+ (let* ((exp (debug-read *debug-io*))
+ (cmd-fun (debug-command-p exp restart-commands)))
+ (with-simple-restart (abort
+ "~@<Reduce debugger level (to debug level ~W).~@:>"
+ level)
+ (cond ((not cmd-fun)
+ (debug-eval-print exp))
+ ((consp cmd-fun)
+ (format *debug-io*
+ "~&Your command, ~S, is ambiguous:~%"
+ exp)
+ (dolist (ele cmd-fun)
+ (format *debug-io* " ~A~%" ele)))
+ (t
+ (funcall cmd-fun))))))))))))
(defun debug-eval-print (expr)
(/noshow "entering DEBUG-EVAL-PRINT" expr)
(let ((num (read-if-available :prompt)))
(when (eq num :prompt)
(show-restarts *debug-restarts* *debug-io*)
- (write-string "restart: ")
- (force-output)
+ (write-string "restart: " *debug-io*)
+ (force-output *debug-io*)
(setf num (read *debug-io*)))
(let ((restart (typecase num
(unsigned-byte
*error-output*
*query-io*
*standard-output*
- *trace-output*))
- (finish-output (symbol-value name)))
+ *trace-output*
+ *terminal-io*))
+ ;; FINISH-OUTPUT may block more easily than FORCE-OUTPUT
+ (force-output (symbol-value name)))
(values))
(defun process-init-file (truename)
(scrub-control-stack)
(sb!thread::get-foreground)
(unless noprint
+ (flush-standard-output-streams)
(funcall *repl-prompt-fun* *standard-output*)
;; (Should *REPL-PROMPT-FUN* be responsible for doing its own
;; FORCE-OUTPUT? I can't imagine a valid reason for it not to