[asdf-devel] compile-with-nicknames

Gábor Balázs gabalz at gmail.com
Mon Oct 17 20:48:23 UTC 2011


I think the divergence is coming from the fact that I want a special
functionality (package renaming) with a simple syntax and you want a general
functionality which cannot be represented by a simple syntax. So it is a
tradeoff between simple syntax and general functionality.

As package renaming is already available in a "complex" way, providing
another complex way won't improve on its popularity. If it would be possible
just with a few more characters in an asd file, people might use it.
Otherwise if they have to create different functions, classes in separate
files for that, they just keep providing nicknames...

But I am wondering how an asd file would look like with your scenario. Can
you provide an example?

Btw, I imagine before/after implemented in a setup/cleanup style, so if
compilation fails, cleanup (after) still runs. So it is wrapped in an
unwind-protect.
So the before/after is nothing to do with generic functions in my view. It
is just a wrapping around COMPILE-FILE.

`bg`


2011/10/17 Faré <fahree at gmail.com>

> > (defsystem com.host.my-system
> >   (:serial t)
> >   (:depends-on ("system-1" "system-2")
> >   (:components ((:file "file1")
> >                 (:file "file2" :class 1)
> >                 (:file "file3" :class 2)
> >                 (:file "file4" :class 1))
> >   (:before-compile 1 #'(lambda (component) (do what you want)))
> >   (:after-compile 1 #'(lambda (component) (do what you want)))))
> >
> Once again, :around compile is more general than :before and :after,
> and some of its functionality (e.g. binding, condition handling,
> unwind-protect, result filtering, etc.) just cannot be properly
> achieved with :before and :after methods.
>
> Also, some files may need special handling. For instance,
> the file that defines packages and/or helpers for a :around-compile
> function must not be wrapped by the function that depends on it. So it
> is not practical to have a system-wide default that cannot be
> overridden.
>
> > And class 0 could be the (unspecified) default.
> > However, I would still prefer to have some kind of simplified notation
> for
> > the local package renaming functionality as I think that is the most
> common.
> > And I have no idea how difficult it is to put something like this into
> asdf
> > as I am not familiar with its code...
> >
> I don't see how the numbering helps. Let's keep it with named classes
> when needed.
>
> As to how I'd implement it: I'd add an around-compile slot to
> component, with no :initform, an effective-around-compile generic
> function that handles "inheritance" from the parent when the slot is
> unbound, a (call-with-around-compile-hook component thunk) that does
> the wrapping based on the former gf, and use that use that function in
> the perform method for compile-op.
>
> —♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics•
> http://fare.tunes.org
> Mathematics is the Queen of Science but she isn't very Pure; she keeps
> having babies by handsome young upstarts and various frog princes.
>  — Donald Kingsbury (In "psychohistorical crisis", 2001)
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.common-lisp.net/pipermail/asdf-devel/attachments/20111017/d9abffcd/attachment.html>


More information about the asdf-devel mailing list