Re: undefined (asdf:system-license on clisp+cywgin
- From: Marco Antoniotti <marcoxa@xxxxxxxxx>
- Date: Fri, 14 Mar 2008 09:05:44 -0700 (PDT)
On Mar 14, 4:49 pm, Duane Rettig <du...@xxxxxxxxx> wrote:
Marco Antoniotti <marc...@xxxxxxxxx> writes:
On Mar 14, 10:07 am, Mirko.Vuko...@xxxxxxxxx wrote:
Hi,
I am trying to load nlisp on my clisp+cygwin insallation, and it is
breaking on the undefined function asdf:system-license.
(It -- the nlisp package -- is loading flawlessly on linux+sbcl)
I looked in asdf.lisp, and I see that system-license is an exported
function, but I don't see it defined anywhere. Same with a few
others, like unix-dso for example.
I am further puzzled by the hash marks in the package definition:
(defpackage #:asdf
(:export #:defsystem #:oos #:operate #:find-system #:run-shell-
command
#:system-definition-pathname #:find-component ; miscellaneous
#:hyperdocumentation #:hyperdoc
I guess that I am missing something, but what?
thank you,
Mirko
They are a unaesthetic consequence of the introduction of case
sensitivity in the reader by Franz Allegro.
No, they're not.
Defpackage accepts "string designators" in various places, which
allows for strings, symbols (for their names), and even single
characters.
True, but using symbols in the current package is conflict prone and
using keyword is something I refrain from (incidentally, a *lot* of
people just use keywords when they could use a regular symbol; witness
some of the HTML libraries out there).
It is true that defpackage forms operate better in
Franz's case-sensitive lisp when the string designators are symbols,
but that is not the reason why the hash marks are there; the form
could just as easily have been:
(defpackage :asdf
(:export :defsystem :oos :operate :find-system ...
So now let's talk about the _real_ reason why the hash marks are
there: The hash-mark versions of the symbols are not interned, but
the ones without hash-marks are. This means that when the compiling
lisp compiles the file and loads it as well, your lisp is left with
a whole lot of keywords interned that would not have had to be there,
like :defsystem, :oos, :operate, etc. This is in _addition_ to the
actual symbols that were being exported: 'asdf:defsystem, 'asdf:oos,
etc. On the other hand, the uninterned symbols are quietly gc'd away,
and your lisp environment is kept clean.
We have discussed this before. It is true that ACL and most
implementations do not have this "symbol leak" feature/bug. But,
AFAIR, it is not mandated by the standard.
Mitigating this, on the other hand, is the fact that many CL
implementations do not save the original forms in compiled code, so
the keywords are treated _as_ _if_ they had been uninterned symbols.
So if it is your habit to compile files and then load them into
various lisps (other than the compiling lisp), or in other words if
you tend to compile a system with a compiling lisp and then build it
by loading up the fasl files, your building lisp will not get
contaminated with the keywords, and you can go ahead and use the
keyword form instead.
This is all fine of course, but then again, using plain strings in
DEFPACKAGE is, IMHO, safer for ANSI coding.
Cheers
--
Marco
PS. Of course, the choice of making ANSI CL case-boggling (for lack
of a better adjective :) ) has always been one of those unexplained
mysteries of the universe. :)
.
- Follow-Ups:
- Re: undefined (asdf:system-license on clisp+cywgin
- From: Duane Rettig
- Re: undefined (asdf:system-license on clisp+cywgin
- References:
- undefined (asdf:system-license on clisp+cywgin
- From: Mirko . Vukovic
- Re: undefined (asdf:system-license on clisp+cywgin
- From: Marco Antoniotti
- Re: undefined (asdf:system-license on clisp+cywgin
- From: Duane Rettig
- undefined (asdf:system-license on clisp+cywgin
- Prev by Date: Re: How to execute a function passed as a list
- Next by Date: Re: Lisper's first look at Haskell
- Previous by thread: Re: undefined (asdf:system-license on clisp+cywgin
- Next by thread: Re: undefined (asdf:system-license on clisp+cywgin
- Index(es):
Relevant Pages
|