Re: ArmedBear Common Lisp relicensed!

From: Adam Warner (usenet_at_consulting.net.nz)
Date: 07/31/04


Date: Sat, 31 Jul 2004 17:54:06 +1200

Addendum: A lot of CMUCL and SBCL code was reused in implementing ABCL,
which helps explain how Peter Graves was able to achieve so much so
relatively quickly. Potentially the most time consuming and platform
specific parts of Common Lisp implementation are the compiler and garbage
collector. You get these for free with a Java virtual machine (and some of
the garbage collection options may even be more sophisticated).

Many Java libraries are implemented in Java and speed is still acceptable.
Java bytecode is generally better viewed as compiled than interpreted. But
Java the language fails to provide helpful abstractions to avoid costly
operations such as method calls, e.g.:
<http://groups.google.com/groups?selm=406db022%240%246549%24cc9e4d1f%40news-text.dial.pipex.com>

> So while the Java Virtual Machine may not provide abstraction
> potential for generating high level and high speed code to the same
> degree that a native code compiling Lisp does, Sun's implementation
> appears to be doing surprisingly well.

   [Pete Kirkham] Yes; each time I tried to do division with the same
   optimisations I'd done with addition and multiplication, I'd get lost;
   from where I'm standing the limiting factor is the lack of any higher
   level features in the language that don't involve method calls, rather
   than the virtual machine.

With Common Lisp as a Java bytecode generator it's going to be possible to
fix "the lack of any higher level features in the [Java] language". It is
my guess that ABCL will eventually be satisfactory in situations where one
would have originally only considered using a native code compiler.

Regards,
Adam

and.lisp:;;; Adapted from CMUCL.
assert.lisp:;;; Adapted from CMUCL.
assoc.lisp:;;; From CMUCL.
bit-array-ops.lisp:;;; Adapted from CMUCL.
chars.lisp:;;; From CMUCL.
check-type.lisp:;;; CHECK-TYPE (from CMUCL)
collect.lisp:;;; From CMUCL.
copy-seq.lisp:;; From CMUCL.
copy-symbol.lisp:;;; From CMUCL.
count.lisp:;;; From CMUCL.
define-modify-macro.lisp:;;; Adapted from CMUCL.
defpackage.lisp:;;; From CMUCL.
delete-duplicates.lisp:;;; From CMUCL.
delete.lisp:;;; From CMUCL.
destructuring-bind.lisp:;;;; From CMUCL, via GCL.
do-all-symbols.lisp:;;; Adapted from CMUCL.
do.lisp:;;; Adapted from CMUCL.
fill.lisp:;;; Adapted from CMUCL.
find.lisp:;;; From CMUCL.
format.lisp:;;; Adapted from CMUCL.
gentemp.lisp:;;; Adapted from CMUCL.
map1.lisp:;;; Mapping functions (from CMUCL)
map-into.lisp:;;; MAP-INTO (from CMUCL)
mask-field.lisp:;;; From CMUCL.
multiple-value-setq.lisp:;; Adapted from CMUCL.
nsubstitute.lisp:;;; NSUBSTITUTE (from CMUCL)
nsubstitute.lisp:;;; From CMUCL.
numbers.lisp:;;; From CMUCL.
or.lisp:;;; Adapted from CMUCL.
psetf.lisp:;;; From CMUCL.
query.lisp:;;; Adapted from CMUCL.
remove-duplicates.lisp:;;; Adapted from CMUCL.
remove.lisp:;;; From CMUCL.
restart.lisp:;;; INVOKE-RESTART-INTERACTIVELY (from CMUCL)
restart.lisp:;;; WITH-CONDITION-RESTARTS (from CMUCL)
search.lisp:;; From CMUCL.
sets.lisp:;;; From CMUCL.
shiftf.lisp:;;; From CMUCL.
sort.lisp:;;; From CMUCL.
sublis.lisp:;;; From CMUCL.
substitute.lisp:;;; From CMUCL.
subst.lisp:;;; From CMUCL.
with-input-from-string.lisp:;;; Adapted from CMUCL.
with-output-to-string.lisp:;;; From CMUCL.
apropos.lisp:;;; Adapted from SBCL.
assoc.lisp:;;; From SBCL.
boot.lisp:;;; PROVIDE, REQUIRE (from SBCL)
case.lisp:;;; Adapted from SBCL.
clos.lisp:;; Adapted from SBCL.
compile-file.lisp:;;; Adapted from SBCL.
debug.lisp:;;; Adapted from SBCL.
dolist.lisp:;;; Adapted from SBCL.
dribble.lisp:;;; From SBCL.
enough-namestring.lisp:;;; Adapted from SBCL.
ensure-directories-exist.lisp:;;; Adapted from SBCL.
late-setf.lisp:;;; From CMUCL/SBCL.
ldb.lisp:;; From SBCL.
ldiff.lisp:;;; LDIFF (from SBCL)
Lisp.java: // Adapted from SBCL.
loop.lisp:;;; Adapted from SBCL.
macros.lisp:;; Adapted from SBCL.
open.lisp:;;; Adapted from SBCL.
parse-lambda-list.lisp:;;; Adapted from SBCL.
print.lisp:;;; Adapted from SBCL.
print-unreadable-object.lisp:;;; Adapted from SBCL.
restart.lisp:;;; Adapted from SBCL.
restart.lisp:;;; RESTART-CASE (adapted from SBCL)
sets.lisp:;;; Adapted from SBCL.
signal.lisp:;;; Adapted from SBCL.
step.lisp:;;; From SBCL.
time.lisp:;;; Adapted from SBCL.
tree-equal.lisp:;;; From SBCL.
upgraded-complex-part-type.lisp:;;; Adapted from SBCL.
with-accessors.lisp:;;; From SBCL.
with-slots.lisp:;;; From SBCL.
with-standard-io-syntax.lisp:;;; Adapted from SBCL.



Relevant Pages

  • Re: CLISP vs. CMUCL vs. SBCL
    ... > CMUCL: Good, fast compiler. ... What are the best points of CLISP other than portability? ... Between CMUCL and SBCL, how would one choose between these? ... > support CMUCL also seem to support SBCL, ...
    (comp.lang.lisp)
  • CLISP vs. CMUCL vs. SBCL
    ... Linux: CLISP, CMUCL, and SBCL. ... What are the best points of CLISP other than portability? ...
    (comp.lang.lisp)
  • Re: CLISP vs. CMUCL vs. SBCL
    ... What are the best points of CLISP other than portability? ... > first reaction is that I'd like something speedy, ... It is also a /lot/ smaller than CMUCL or SBCL. ...
    (comp.lang.lisp)
  • Re: CLISP vs. CMUCL vs. SBCL
    ... If you were after "The Best Lisp Implementation", well, that would ... If you haven't checked out the SERVE-EVENT facility on CMUCL and SBCL, ... and CLISP works nicely. ...
    (comp.lang.lisp)
  • Re: Speaking of Bignum arithmetic
    ... > Java libraries. ... How will CMUCL fair? ... to twice as slow as CMUCL (using the Sun 1.5.0 beta 1 JVM). ... Checking may require converting each int to long, ...
    (comp.lang.lisp)