<div dir="ltr">I've been reading the manual, papers, and slides on ASDF and XCVB. As a frame of reference, I prefer the qualities exhibited by Racket's implementation of modules. I was disappointed both to see XCVB bitrot, and then to see that a major ASDF overhaul would be necessary.<div><br></div><div>That said, ignoring Racket/ASDF/XCVB, I'm curious about how loading multiple versions of the same system could possibly be implemented in Common Lisp (CL). I'm sure people have thought about it, but I'm having a hard time finding references. I'm afraid I've been skimming some of the material linked off of the ASDF and XCVB pages, so forgive me if I missed something.</div><div><br></div><div>On the JVM, there's the notion of "classloader" that can be used to load multiple versions of the same class. Unfortunately, the only approach I can imagine is to use some form of package renaming. There appear to be several variations floating around [1], and the trade-offs aren't clear to me.</div><div><br></div><div>If I think about how it might be done in ASDF, it seems like it would require a series of things:</div><div><br></div><div>* intercept package definition to rename with version</div><div>* :around-compile to handle some kind of per-system aliasing so code doesn't have to change</div><div>* teaching dependency resolution how to find the renamed, versioned packages/systems</div><div><br></div><div>But that's a wild guess. And the more I think about it, I wonder what to do about some code that uses strings to put together a symbol - I don't think symbol-macrolet can help there. </div><div><br></div><div>[1] implementation-specific package-local-nicknames, :around-compile in ASDF, "pseudonyms"<br clear="all"><div><br></div>-- <br><div class="gmail_signature">Ian Tegebo</div>
</div></div>