<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body><div> [...]<br></div>
<blockquote type="cite"><blockquote style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204, 204, 204);padding-left:1ex;"><div><blockquote type="cite"><div>2. There's something like a SocialProblem (TM) where Lispers lack (a) versioning discipline, (b) dependency versioning discipline which exacerbates issues like inadvertent multiple loading, or incompatible loading of libraries. <br></div>
</blockquote><div style="font-family:'Courier New';"> <br></div>
<div style="font-family:'Courier New';">Semantic versioning won't help you without automatic tools to determine if the API of a library changed in an incompatible way, e.g. if a function removed a keyword arg, or changed the type of an existing arg.<br></div>
<div style="font-family:'Courier New';"> <br></div>
</div>
</blockquote><div> <br></div>
<div>I would say that semvers should in principle help you detect incompatibilities, but as you hinted with "illusion", maybe these in practice can't be trusted or relied upon generally. <br></div>
</blockquote><div style="font-family:"Courier New";"> <br></div>
<div style="font-family:"Courier New";">They can't be trusted except for trivial libraries because authors in practice don't catch all cases where they break the API. The more expressive the language, the more ways to break the API/ABI. For C/Java, it's actually pretty easy: <a href="http://abi-laboratory.pro/tracker/timeline/openssl/">http://abi-laboratory.pro/tracker/timeline/openssl/</a>.<br></div>
<div style="font-family:"Courier New";"> <br></div>
<div style="font-family:"Courier New";"> <br></div>
<blockquote type="cite"><blockquote style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204, 204, 204);padding-left:1ex;"><div><blockquote type="cite"><div>3. There's actually no issue in principle: inconsistencies need to "just" get fixed by the library vendor/user, or better tooling needs to be used to track your project's direct and transitive dependencies. <br></div>
<div> <br></div>
<div>It's my personal opinion, as is evident in previous messages, that I think 1 & 2 are issues.<br></div>
</blockquote><div style="font-family:'Courier New';"> <br></div>
<div style="font-family:'Courier New';">You didn't give an example of how exactly those two things are a problem, and how adding those features would solve the problem(s).<br></div>
</div>
</blockquote><div> <br></div>
<div>#1: Assuming that there isn't incompatible passing of data, if A depends on B1 and C depends on B2, and in isolation A-B1 works/passes tests, and C-B2 works/passes tests, then A-B1 and C-B2 loaded together (assuming a non-existent Lisp) should work fine. The problem being addressed is lack of synchrony in the universe of Lisp modules.<br></div>
<div> <br></div>
<div>(My first-order thought is that even incompatible data wouldn't be an issue if those data types are properly encapsulated in classes or structures, by virtue of the fact that those types become distinct by way of different names. I envision that only untyped things could cause problems, like [ap]-lists, strings, etc.)<br></div>
</blockquote><div style="font-family:"Courier New";"> <br></div>
<div style="font-family:"Courier New";">It's easy to come up with such a case, where a library:<br></div>
<div style="font-family:"Courier New";">*) switches from CL epoch timestamps(1900-based) to Unix epoch(1970)<br></div>
<div style="font-family:"Courier New";">*) switches from Unix namestrings to URIs<br></div>
<div style="font-family:"Courier New";">*) switches from relative CL pathnames with implicit base to absolute pathnames. This is properly encapsulated according to your critera<br></div>
<div style="font-family:"Courier New";"> </div>
<div style="font-family:"Courier New";">In each of these cases, the single versions pass their own internal (unit) tests, but they do not integrate.</div>
<div style="font-family:"Courier New";"> </div>
<div style="font-family:"Courier New";"> <br></div>
<blockquote type="cite"><div>#2: If there was diligence is properly versioning libraries, and diligence in specifying dependency version requirements, then detection of issues could happen. This is solving recognition of a possible issue. <br></div>
</blockquote><div style="font-family:"Courier New";"> </div>
<div style="font-family:"Courier New";">Regardless of language, you cannot expect diligence in the open-source world because most libraries are written by people in their free time.<br></div>
<div style="font-family:"Courier New";">I'd love to be paid to work on open-source libraries, and be able to take the time to write design docs, have them reviewed, then write code with unit tests, performance regression tests, etc... Except for a few cases of high-profile projects(Linux, OpenStack), that's unrealistic.<br></div>
<div id="sig4916231"><div class="signature"> </div>
<div style="font-family:"Courier New";"> </div>
<div class="signature">--<br></div>
<div class="signature">Stelian Ionescu a.k.a. fe[nl]ix<br></div>
<div class="signature">Quidquid latine dictum sit, altum videtur.<br></div>
</div>
<div style="font-family:"Courier New";"> <br></div>
</body>
</html>