On 5/4/17 May 4 -11:41 AM, Stelian Ionescu wrote:
On 5/4/17 May 4 -11:01 AM, Alan Ruttenberg wrote:
Here is what I see a problem is: ASDF only resolves dependencies on a system by system basis. The cross-system link is that if system B depends on system A we can avoid loading A if it has already been loaded. If an identical source file happens to be in both B and A that isn't recognized, but also doesn't have consequence - the functions in it are redefined.
That's correct. If you want to build a composite system with A and B, you should create a system C that depends on both.
Note that this problem you cite for Maven really exists for ASDF anyway. If you have two lisp systems that collide with each other (e.g., package collision), then you lose with ASDF.
So I think what you have to do here is track the Maven dependencies, detect incompatible versions of a single library, and throw an error for the programmer to fix if it happens.
Note that this reminds me that ASDF currently (for Lisp) doesn't support a maximum version number, only a minimum. I keep meaning to fix that, but never get around to it.
I believe this would be doubling down on the error of specifying versions in ASDF.
No, I comprehensively disagree. If you have a stable system that people are using, and one of your libraries changes incompatibly, until you have the time to update to the new API, you should be able to declaratively specify that the new API will break your system, so that users don't get incomprehensible errors.
In a perfect world, all systems would be updated to the latest versions of their dependencies.
This is not a perfect world.
And yes, it does happen, I have had systems that relied on, e.g., older versions of XMLS. For now we handled that by pinning revisions in the RCS, but that can be problematic if you get the ASDF config wrong.
Getting it wrong in what sense ?
If you work on multiple projects, so have multiple different ASDF configurations, and one leaks into another. I had this with a novice user who was told to put in a shell config file, then forgot, and didn't understand why they got the wrong libraries.