<!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 21 Feb 2018, at 10:55, Faré wrote:</p>

<blockquote style="border-left:2px solid #777; color:#777; margin:0 0 5px; padding-left:5px">
<p dir="auto">On Tue, Feb 20, 2018 at 4:44 PM, Robert Goldman <a href="mailto:rpgoldman@sift.info" style="color:#777">rpgoldman@sift.info</a> wrote:</p>

<blockquote style="border-left:2px solid #777; color:#999; margin:0 0 5px; padding-left:5px; border-left-color:#999">
<p dir="auto">I still see these "dependency not done" warnings in test-bundle on SBCL and<br>
other implementations (I haven't checked them all, but at least my big<br>
three: SBCL, Allegro, and CCL).</p>
</blockquote>

<p dir="auto">I can see them too.</p>

<blockquote style="border-left:2px solid #777; color:#999; margin:0 0 5px; padding-left:5px; border-left-color:#999">
<p dir="auto">This seems like a bug somewhere, right? And it must be an ASDF bug, probably<br>
in the definition of LOAD-OP for bundles.</p>
</blockquote>

<p dir="auto">I believe it's all due to this method:</p>

<p dir="auto">(defmethod mark-operation-done :after ((o load-bundle-op) (c system))<br>
    (mark-operation-done (find-operation o 'load-op) c)))</p>
</blockquote>

<p dir="auto">Thanks for explaining that.  That said, can you explain why we do this, instead of marking <code style="background-color:#F7F7F7; border-radius:3px; margin:0; padding:0 0.4em" bgcolor="#F7F7F7">load-bundle-op</code> as done?  I guess because loading the bundle is intended to be equivalent to loading the system, so that if we load a bundle for a system, S, we want other systems that depend on S to know that it has been loaded.</p>

<p dir="auto">Related to this, the first parameter to <code style="background-color:#F7F7F7; border-radius:3px; margin:0; padding:0 0.4em" bgcolor="#F7F7F7">FIND-OPERATION</code> is described as a "context," but there's nowhere an explanation of what a context is meant to be and in what way another operation can be a context.  <code style="background-color:#F7F7F7; border-radius:3px; margin:0; padding:0 0.4em" bgcolor="#F7F7F7">find-operation</code> is actually confusing me a bit, because it seems to have quite different behavior for strings and symbols:</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">(defmethod find-operation ((context t) (spec operation))
    spec)
  (defmethod find-operation ((context t) (spec symbol))
    (when spec ;; NIL designates itself, i.e. absence of operation
      (make-operation spec))) ;; TODO: preserve the (operation-canonical-initargs context)
  (defmethod find-operation ((context t) (spec string))
    (make-operation spec))) ;; TODO: preserve the (operation-canonical-initargs context)
</code></pre>

<p dir="auto">I read this as "find an operation by making it.  Ignore the context argument." So I'm not entirely sure why it exists (presumably because it's idempotent, and <code style="background-color:#F7F7F7; border-radius:3px; margin:0; padding:0 0.4em" bgcolor="#F7F7F7">MAKE-OPERATION</code> is not), or why it has the <code style="background-color:#F7F7F7; border-radius:3px; margin:0; padding:0 0.4em" bgcolor="#F7F7F7">context</code> argument.  I guess that you foresaw the need for a context at some point, but never ended up using it?</p>

<blockquote style="border-left:2px solid #777; color:#777; margin:0 0 5px; padding-left:5px">
<p dir="auto">Said method should probably somehow hush these specific warnings,<br>
or first recurse into all dependencies and mark them done, or be removed.<br>
You decide.</p>
</blockquote>

<p dir="auto">As I said above, I don't yet understand why that method exists, so I don't know what would be the implications of removing it.</p>

<p dir="auto">Yes, we could make that dependency warning into a defined condition and muffle it in this context.  I just need to understand a little better the implications of doing that.</p>

<blockquote style="border-left:2px solid #777; color:#777; margin:0 0 5px; padding-left:5px">
<p dir="auto">While it's indeed a cosmetic bug to issue the warning,<br>
I believe the underlying logic is sound.</p>

<blockquote style="border-left:2px solid #777; color:#999; margin:0 0 5px; padding-left:5px; border-left-color:#999">
<p dir="auto">So, even after the last email, I'm inclined to hold up a release until I<br>
understand this bug and kill it.</p>
</blockquote>

<p dir="auto">—♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• <a href="http://fare.tunes.org" style="color:#777">http://fare.tunes.org</a><br>
Toleration is not about respecting other people's ideas.<br>
We have every right to fight ideas we think are stupid.<br>
Toleration is about respecting other people's persons.<br>
We have every duty to respect even persons we think are stupid.<br>
                — Faré</p>
</blockquote>
</div>
</div>
</body>
</html>