Subject: Re: Free vs Commercial Lisp
From: Erik Naggum <erik@naggum.no>
Date: 1998/12/26
Newsgroups: comp.lang.lisp
Message-ID: <3123638569450316@naggum.no>

* David Steuber <trashcan@david-steuber.com>
| I can just go to www.franz.com and download a free for trial use version
| of ACL if I remember previous postings.  I think I will do that this
| weekend so I have a proper basis of comparison with CMUCL.

  this is the right way to go.  do remember to get the patches, too.  let
  me know if you have any problems.

  a slight warning might be necessary: it takes time to appreciate the
  Allegro CL system.  I thought I could upgrade from CMUCL to ACL over a
  weekend, but although my code "worked", it was quite obvious I was
  missing something very important.  the Emacs interface is very good, but
  it takes some getting used to.  I suggest spending a fair amount of time
  with the manuals, which only come in on-line form.  print them out if you
  can -- I find reading manuals on the screen to be excessively exhausting.

| In the open source vain, I am considering distributing my application,
| if it ever leaves the vapor stage, in source only form.  How can I be
| sure that I don't indavertantly use a propriatary extension?  I suppose
| the simple answere is to compile it in both ACL and CMUCL.  Are extension
| packages normaly marked as such?  I'm asking really stupid questions,
| aren't I?

  no, not stupid, but basic.  stupid is when you ask "advanced" questions
  without knowing the basics.  (don't go there.)

  ANSI Common Lisp specifies that all symbols in the COMMON-LISP package
  must be the ones that the standard specifies.  all your symbols must be
  in a separate package.  if all the symbols in your code is either in your
  package or in the COMMON-LISP package, you don't use any extensions at
  the function or macro level, at least.  some standard functions do take
  additional keyword arguments, however, and others have extensions of
  their own.  these are few and far between, but you will find them well
  documented in the Allegro CL documentation.

  thus, if you simply read in all your source code with READ, you can check
  the package of every symbol.  this is a fairly simple recursive function,
  which I leave as an exercise, but the stronger route is to remove any
  other packages from the package use list (obtained by PACKAGE-USE-LIST)
  of the package you're using, or, equivalently, specify to use only
  COMMON-LISP.

(unuse-package "EXCL" "CL-USER")

  removes the default extension package from CL-USER's use list, and then
  you can't use any of the symbols in EXCL without a package prefix.
  you'll notice those when the Emacs interface inserts them in expanding
  your symbols.

(defpackage "STEUBER" (:use "COMMON-LISP"))

  creates a new package that uses only the COMMON-LISP package.  you would
  include an IN-PACKAGE form at the top of your files to use it, or use the
  :package command to the Allegro CL top-level.  (if you create a new file,
  it defaults to use the CL-USER package.  insert the IN-PACKAGE form and
  write M-x normal-mode to change that on a case by case basis, or set the
  Emacs variable FI:DEFAULT-PACKAGE to the name of your default package.)

#:Erik
-- 
  Nie wieder KrF!  Nie wieder KrF!  Nie wieder KrF!  Nie wieder KrF!