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.
—♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• http://fare.tunes.org Informal "design patterns" are the crutch of inexpressive programming systems. In a programmable programming system, the only design pattern needed is: use the system to refine and extend the system.