Faré wrote:
>> This resolve-dependency-spec returns the actual system objects for depended
>> on systems, doesn't it? Hence the possible side effects.
>>
> Yes.
>
>> I was thinking of the much simpler expedient of traversing the dependency
>> s-expressions and using COERCE-NAME on all the system names. That gives us
>> something that is canonical, but that functions when there are missing
>> systems (e.g., this system weakly-depends-on <that>, but <that> isn't
>> present), and is computed without side-effects.
>>
>> I just felt like fixing this in ASDF would be better than requiring the
>> caller to do it.
>>
> You could do that in the common case, I suppose, but the user would
> still have to call resolve-dependency-spec in the general case, since
> the protocol is extensible. Making it appear like the name has been
> resolved when it hasn't been is probably a lure that will invite
> people to do the wrong thing and get bitten — more efforts for
> negative return on investment.
Hmmmm....
The thing I don't like is to have some large number of half-baked bits of code
that all do some buggy bit of tree recursion to make sure that they recognize
that
:depends-on (foo) ; foo in some package
:depends-on ("foo") ; string
:depends-on (:foo)
are all the same thing. Failing to do that for the caller seems like we are
providing a bad API.
I figured since "foo" is the internal form, (list "foo") should be the return
for all three of the above cases.
If you call resolve-dependency-spec on
:weakly-depends-on (:blort)
when blort isn't present, don't we get a bad result that foils the intent of
using system-weakly-depends-on as an introspection tool?
Thanks,
r