不得不说 SBCL 是目前最成功的开源 Common Lisp 实现，虽然 OpenMCL 在某些方面可能更为优秀但在跨平台可移植性上 SBCL 做得更好。众所周知，SBCL 是基于 CMUCL 发展起来的，由于 CMUCL 开发者的过于“保守”才导致了一个新项目 SBCL 的诞生。随着 SBCL 0.9.17 版的发布，一些当初没有从 CMUCL 里移植出来的特性终于看到了影子：CMUCL 有独立的解释器和编译器——解释器用于交互环境便于调试，编译器能带来最佳性能——而 SBCL 出于移植方便则只有编译器，现在 SBCL 终于也有自己的解释器了，虽然并不是 CMUCL 源代码里的那个。
OpenMCL 的 AMD64 Port(beta) 和 PPC64 Port 以及其 1.0 版的发布为其奠定了 MacOS 系统首选 Common Lisp 平台的地位，OpenMCL 源于商业 MCL，继承了其优秀的软件体系架构，完美地实现了 Common Lisp 的自举过程。期待它的进一步发展吧。
New in version 0.9.17
- feature: weak hash tables, see MAKE-HASH-TABLE documentation
- incompatible change: External-format support for FFI calls. The SB-ALIEN:C-STRING no longer implies an ASCII external-format. Instead the string is subject to external-format conversion. Additionally return values of type SB-ALIEN:C-STRING are by default of type (SIMPLE-ARRAY CHARACTER), not SIMPLE-BASE-STRING. For an alien type that behaves like the old SB-ALIEN:C-STRING type, use (SB-ALIEN:C-STRING :EXTERNAL-FORMAT :ASCII :ELEMENT-TYPE BASE-CHAR). (thanks to Yaroslav Kavenchuk)
- incompatible change: SB-EXT package no longer contains the following unused symbols: *GC-NOTIFY-AFTER*, *GC-NOTIFY-BEFORE*, *GC-NOTIFY-STREAM*, *ERROR-PRINT-LENGTH*, *ERROR-PRINT-LEVEL*, *ERROR-PRINT-LINES*
- incompatible change: the single-stepper is no longer available on Alpha, Mips and Sparc platforms.
- minor incompatible change: the direct superclasses of SB-MOP:FUNCALLABLE-STANDARD-OBJECT are (FUNCTION STANDARD-OBJECT), not (STANDARD-OBJECT FUNCTION). This makes the class-precedence-lists of GENERIC-FUNCTION and STANDARD-GENERIC-FUNCTION comply with the requirement of ANSI 22.214.171.124.
- minor incompatible change: the default stream external format on non-unicode SBCL is no longer detected from the locale, but is always ISO-8859-1
- new feature: Add a version of evaluator that uses an interpreter instead of the compiler. EVAL still uses the compiler by default, to switch it to use the interpreter, set the value of the variable SB-EXT:*EVALUATOR-MODE* to :INTERPRET.
- minor incompatible change: the single-stepper REPL has been merged with the normal debugger (see the "Stepping" heading of the debugger help for more details). The debugger command STEP will no longer switch to the single-stepper REPL.
- bug fix: ENOUGH-NAMESTRING on pathnames with no name and a pattern for a type now works.
- bug fix: loading of default sysinit file works. (thanks to Leonid Slobodov)
- bug fix: better detection of circularities in the file-compiler. (reported by Marco Monteiro)
- bug fix: the CL pathname functions now work with files that have non-ASCII characters in their names (thanks to Yaroslav Kavenchuk)
- bug fix: The :PTY argument for RUN-PROGRAM will now work on systems with Unix98 pty semantics.
- bug fix: ASDF-INSTALL will now work with bsd tar.
- bug fix: ASDF-INSTALL uses GNU tar on Solaris (thanks to Josip Gracin).
- bug fix: timers expiring in dead threads no longer cause a type-error (reported by Paul "Nonny Mouse").
- bug fix: thanks to more lightweight single-stepper instrumentation, code compiled with (DEBUG 3) will compile and execute significantly faster, and will have more accurate type-inferencing than before
- bug fix: SLOT-VALUE optimizations are no longer done on method parameters whose bindings are modified
- improvements to the win32 port (thanks to Yaroslav Kavenchuk):
- bug fix: arguments to RUN-PROGRAM are escaped correctly
- replace dummy implementations of CL:MACHINE-INSTANCE and CL:SOFTWARE-VERSION with proper version
New in version 0.9.16
Older SBCL releases
- feature: implemented the READER-METHOD-CLASS and WRITER-METHOD-CLASS portion of the Class Initialization Protocol as specified by AMOP.
- incompatible change: variable SB-EXT:*USE-IMPLEMENTATION-TYPES* no longer exists.
- optimization: faster LOGCOUNT implementation on x86 and x86-64 (thanks to Lutz Euler)
- optimization: hashing of general arrays and vectors has been improved. (reported by Any Fingerhut)
- enhancement: SB-INTROSPECT is now able to find definitions of profiled functions. (thanks to Troels Henriksen)
- enhancement: compiler-macro expansion applies now to FUNCALL forms as well, allowing compiler-macros for SETF-functions to expand.
- enhancement: step-instrumentation no longer wraps known single-value functions with multiple-value context, allowing better type inference.
- fixed bug #337: use of MAKE-METHOD in method combination now works even in the presence of user-defined method classes. (reported by Bruno Haible and Pascal Costanza)
- fixed bug #339(c): if there are applicable methods not part of any long-form method-combination group, call INVALID-METHOD-ERROR. (reported by Bruno Haible)
- fixed bug #361: the :FUNCTION initarg in the protocol for initialization of methods can now be used to override internally-produced optimized functions. (reported by Bruno Haible)
- bug fix: extensions of MAKE-METHOD-LAMBDA which wrap the system-provided lambda expression no longer cause warnings about unbound #:|pv-table| symbols.
- bug fix: improved the handling of type declarations and the detection of violations for keyword arguments with non-constant defaults.
- bug fix: potentially erronous calls to PATHNAME and MERGE-PATHNAMES were being flushed in some cases. (reported by Richard Kreuter)
- bug fix: compiled calls to TYPEP were mishandling obsolete instances. (reported by James Bielman and Attila Lendvai)
- bug fix: format strings with ~> without matching ~< no longer trigger an AVER, but signal an understandable error instead. (reported by Antonio Martinez)
- bug fix: specifying an output-file without a pathname-type for COMPILE-FILE or COMPILE-FILE-PATHNAME resulted in using the type of input-file instead of "fasl". (reported by Robert Dodier)
- bug fix: compiler-macro lambda-list parsing of FUNCALL forms. (reported by James Y Knight).
- bug fix: compiler-macros-function did not consider the environment argument for shadowing by local functions.
- bug fix: compiler-macros expansion was inhibited by local INLINE declarations.
- bug fix: inline expansions of known functions were subject to step-instrumentation in high debug policies, leading to problems with type-inference.
- bug fix: compiler failed to differentiate between different CONS types in some cases.
- bug fix: fixed input, output and error redirection in RUN-PROGRAM for win32. (thanks to Mike Thomas and Yaroslav Kavenchuk)
- bug fix: #368: incorrect use of expressed vs. upgraded array element type.
- bug fix: #306a: more precise unions of array types.
- thread-safety improvements:
- CONDITION-WAIT could return early on Linux, if the thread was interrupted and subsequently continued with SIGCONT.
- STABLE-SORT and ADJUST-ARRAY were not reentrant.