<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/xhtml; charset=utf-8">
</head>
<body>
<div style="font-family:sans-serif"><div style="white-space:normal">
<p dir="auto">On 19 Feb 2019, at 1:18, 73budden wrote:</p>

</div>
<div style="white-space:normal"><blockquote style="border-left:2px solid #777; color:#777; margin:0 0 5px; padding-left:5px"><p dir="auto">Hi!<br>
<br>
Every time I read "asdf", I feel a pain. I've read that there is an<br>
attempt to gain resources to improve asdf. I have a sort of plan.<br>
<br>
1. Shims. Recent tightening of rules for system definitions is ok, but<br>
there are old systems with no maintainers. If such system does not<br>
obey the rules, one can introduce "shim" concept. I've met them in JS<br>
culture where they serve as third-party adapters to connect two<br>
mismatching things.<br>
<br>
In the simplest way shim is just an alternative directory hierarchy<br>
with shim asd files, isomorphic to local lisp directory structure.<br>
<br>
When looking for system, asdf must search in shims directory first,<br>
and only then in the directory of the file itself. Also things like<br>
quicklisp might take care of installing shims where they exist.<br>
Maintanence of shims for all popular systems can be done within a<br>
separate git repository.</p>
</blockquote></div>
<div style="white-space:normal">

<p dir="auto">For the moment, I think the only issue related to rules tightening is that we ask people to use the proper complex system names (see my recent change to the ASDF manual, available from the page on <code style="background-color:#F7F7F7; border-radius:3px; margin:0; padding:0 0.4em" bgcolor="#F7F7F7">common-lisp.net</code>.  Is that what you are referring to?  Or are there other issues causing pain?</p>

<p dir="auto">If it's just that, insert the name of the asd file (name only -- no extension) into <code style="background-color:#F7F7F7; border-radius:3px; margin:0; padding:0 0.4em" bgcolor="#F7F7F7">*known-systems-with-bad-secondary-system-names*</code>.  E.g.,</p>

<pre style="background-color:#F7F7F7; border-radius:5px 5px 5px 5px; margin-left:15px; margin-right:15px; max-width:90vw; overflow-x:auto; padding:5px" bgcolor="#F7F7F7"><code style="background-color:#F7F7F7; border-radius:3px; margin:0; padding:0" bgcolor="#F7F7F7">(setf (gethash "terrible-legacy-system" *known-systems-with-bad-secondary-system-names*) t)
</code></pre>

<p dir="auto">... and that will suppress the warnings for you.</p>

<p dir="auto">That set has "cl-ppcre" built into it, and I'm happy to add other systems that are in common use, but unmaintained.</p>

<p dir="auto">I should put documentation of this into the manual....</p>

<p dir="auto">The shims idea is interesting, but isn't it a lot of trouble to make and maintain a shim (which has to somehow indicate where to find the source files for the library), compared to forking a system?</p>

<p dir="auto">If you have a more specific idea for how this works, I'd be happy to discuss it further.</p>

</div>
<div style="white-space:normal"><blockquote style="border-left:2px solid #777; color:#777; margin:0 0 5px; padding-left:5px"><p dir="auto">2. Get rid of upgrade. Upgrade feature requires to maintain a 3d array<br>
of possible cases, where dimensions are "old asdf version", "new asdf<br>
version" and "lisp implementation". It is hard to maintain and it will<br>
get harder and harder to maintain as the time goes on. Also upgrade is<br>
a good test of CLOS, but running tests at the very beginning of image<br>
bootstrap is not a good idea because there is no e.g. SLIME to work<br>
with convenience.</p>
</blockquote></div>
<div style="white-space:normal">

<p dir="auto">I don't know about doing away with upgrade, but certainly cutting <strong>way</strong> down on the upgrades we support is a good idea.  For CMUCL, we now only test and support 3.3.0+</p>

<p dir="auto">I'm willing to do that for many more implementations, if I can figure out what ASDF versions they are shipping on what target platforms.</p>

</div>
<div style="white-space:normal"><blockquote style="border-left:2px solid #777; color:#777; margin:0 0 5px; padding-left:5px"><p dir="auto">3. Last, but most important actually. Prioritize manual, FAQ, Wiki and<br>
all like this.</p>
</blockquote></div>
<div style="white-space:normal">

<p dir="auto">I'm ok with that, but I don't have the time for an end-to-end rewrite of the manual.  Note that I am also going to integrate <strong>everything</strong> into the manual, because I don't have the time to support more than one documentation set (e.g., Fare's Markdown stuff will get folded into the manual).</p>

<p dir="auto">Part of the problem is that the manual doesn't have a clear structure.  It shoold somehow start off by teaching only the basics, in a very brief discussion, then get to more advanced topics, then the object model, and stuff that only an extender, developer, or maintainer would want to know.  But it's quite possible I will retire or die before I manage to do that level of rewrite.</p>

<p dir="auto">Restructuring is <em>really</em> not something that Texinfo makes easy, but Texinfo seems to be the worst documentation system ... except for all the other ones.</p>

<p dir="auto">A contribution I would <em>love</em> to have is an adaptation of the SBCL manual code that extracts symbols and docstrings for inclusion in Texinfo.  At one point I looked into Didier's library (DecIt, I think?), but while it's good at extraction, I couldn't see how what it extracts could be moved around and integrated with large blocks of text.</p>

<p dir="auto">I'm happy to accept FAQ suggestions and get them into the manual.</p>

</div>
<div style="white-space:normal"><blockquote style="border-left:2px solid #777; color:#777; margin:0 0 5px; padding-left:5px"><p dir="auto">Instead, when loading asdf, allow the user to pass the parameter that<br>
fills asdf database with the initial loaded system information. It<br>
would be also good to have an utility to extract this database from<br>
some old asdf versions. This way we have a slight chance to make<br>
things easier, upgrade process explicit and under user's control.</p>
</blockquote></div>
<div style="white-space:normal">

<p dir="auto">I'm not exactly sure what is meant by the above.</p>

<p dir="auto">I have a number of different projects I work on, each with their own set of libraries.  I have made simple functions for each of these projects that populates <code style="background-color:#F7F7F7; border-radius:3px; margin:0; padding:0 0.4em" bgcolor="#F7F7F7">asdf:*central-registry*</code>, and when I sit down to work on one of these systems, I just invoke that function.  That's always been sufficient for me.  So something like:</p>

<pre style="background-color:#F7F7F7; border-radius:5px 5px 5px 5px; margin-left:15px; margin-right:15px; max-width:90vw; overflow-x:auto; padding:5px" bgcolor="#F7F7F7"><code style="background-color:#F7F7F7; border-radius:3px; margin:0; padding:0" bgcolor="#F7F7F7">CL-USER> (shop2)
"SHOP2 libraries available."
NIL
CL-USER> (asdf:test-system "shop2")
....
</code></pre>

<p dir="auto">I still use <code style="background-color:#F7F7F7; border-radius:3px; margin:0; padding:0 0.4em" bgcolor="#F7F7F7">*central-registry*</code> for that because (1) I wrote it before Fare's new DSL was available and (2) I really don't have a handle on how to debug DSL-based configuration when it goes wrong (and configuration by environment variable is even more difficult, because the debugging environment isn't available until after the environment variables have been processed).</p>

<p dir="auto">I hope this is helpful,<br>
R</p>
</div>
</div>
</body>
</html>