A modest proposition: DEFSYSTEM-DEPENDS-ON should die [was Re: What's the right way to extend ASDF with new symbols?]

Robert Goldman rpgoldman at sift.net
Tue Feb 16 20:14:48 UTC 2016


On 2/16/16 Feb 16 -10:12 AM, Eric Timmons wrote:
> On Mon, Feb 15, 2016 at 3:34 PM, Robert Goldman <rpgoldman at sift.net> wrote:
>>
>> Sorry, I'm not trying to be difficult, but that solution is unacceptable
>> to me.  From my POV as maintainer, it seems like the worst of all
>> worlds.  We would be introducing yet more moving parts -- a new package,
>> ASDF-EXTENSIONS, that we would have to keep track of -- without  solving
>> the problem of name collisions.  This seems strictly worse than the
>> status quo.
>>
>> If someone wants to *fix* the double-parsing solution, that's fine.  But
>> I'm not going to keep around the broken double-parsing solution.
> 
> Would there be anything wrong with saying everyone should use strings to name
> symbols from ASDF extensions? Component types and :class already seem to support
> this. A quick glance through the code makes me think :in-order-to and inline
> methods would be fairly easy to modify to support it as well. I'd be happy to
> send in a patch for it.
> 
> It seems this would solve the issue with namespace clashes and get rid of the
> need for load-systems before the defsystem. There's still a lot of work if
> someone wants a completely declarative version of defsystem, but at least it's
> a step in that direction.

I don't see that strings make an obvious improvement over the way we use
keywords.  Here's the situation:

Keywords are interpreted as follows:
  i. names in current package (this is how we get in extensions, if we
have imported the extension package into the current package)
  ii. names in ASDF (this is how we get in extensions if we have done
the Bad Thing and imported our extension names there).

I would like to avoid adding further complications.

Note that strings would make processing the operation names more
complicated than they are now.  If you want to reference an extension
operator, and you import that extension into the current package, then
everything will work fine.  There's no need to add anything -- unless
you want to keep the current DEFSYSTEM-DEPENDS-ON.  If you do, then
complications ensue.

What I am looking for is a way to leave as much as possible of the work
to Common Lisp, and as little as possible to additional code in ASDF.

That's why I want to have people use ASDF extensions the way they would
use any other library:
- Load it.
- Import the symbols into the current package (either through selective
import or use-package)
- parse as normal.

I appreciate your offer, but I would prefer not to take it because:

1. It adds complexity, instead of removing it
2. It still doesn't handle the namespace collision problem, because you
would still need some magic to decide where to look for the referents of
the strings.

loading the required extension systems "by hand" makes all these
complications -- and the namespace problems -- go away, by letting
Common Lisp do its normal Common Lisp thing.

Best,
r









More information about the asdf-devel mailing list