On 4/8/17 01:15, Alan Ruttenberg wrote:
Hi Robert,
If you are familiar with the architecture, perhaps you can give me some hints where to intervene. The behavior I want is:
Assume I load a system at top-level and sprinkled in it or its dependencies there are a number of :mvn-modules as described earlier. During preparation, the dependencies, exclusions, and managed-dependencies are collected at the level of the top-level system. Then, before any lisp or other files are loaded a single call is made to compute the combined maven dependencies and they are resolved and added to the classpath. Finally the rest of the load goes as it usually does, although the :mvn-module components compile and loads are no-ops since their work has already been done up-front.
The architecture of ASDF can be likened to that of the [ship of Theseus][1], being replaced as it sails the seas of compatibility; Robert is just the latest in the line of captains who have attempted to navigate its passage.
[1]: https://en.wikipedia.org/wiki/Ship_of_Theseus
It was suggested at [ELS 2017][2], that while ASDF has a firm abstraction at the upper level in the CLOS abstraction and a recently concertized cross-implementation compatibility layer in UIOP, it may be said to be missing large swathes of reusable abstraction to bridge the two.
[2]: urn:"Loading Multiple Versions of an ASDF System in the Same Lisp Image"/"10th European Lisp Symposium Session: Session I: Tools"/"Vsevolod Domkin".
I think the first step forward will be recognizing that the current [ABCL-ASDF:RESOLVE][3] machinery works on an "internal state", opaque to ASDF for resolution. What is needed is to somehow explicitly return all the dependencies in a format that the properly overloaded ASDF CLOS machinery can understand.
[3]: https://gitlab.common-lisp.net/abcl/abcl/blob/master/contrib/abcl-asdf/abcl-...