<html><body>
<p><tt>Gustaf Neumann &lt;neumann@wu-wien.ac.at&gt; wrote on 05/09/2006 03:54:49 AM:<br>
<br>
&gt; Scott Gargash schrieb:<br>
&gt; &gt;<br>
&gt; &gt; I.e., you can't forward the &quot;mixin delete&quot; to an object of another <br>
&gt; &gt; class. &nbsp;If the mixin to be deleted is present in the call stack, it <br>
&gt; &gt; appears that the mixin can't be deleted. Not that I expected it to <br>
&gt; &gt; work, but it seems worth noting.<br>
&gt; &gt;<br>
&gt; if you have a case that goes beyond &quot;do not remove actvive mixins from <br>
&gt; the before part of active mixin classes&quot;), please send an example.<br>
</tt><br>
<tt>No, the same conditions apply. It's just that the BEFORE part includes anything invoked indirectly by the BEFORE part. &nbsp;Sometimes you don't have knowledge of what some other object will do when invoked, and it can be a subtle bug. </tt><br>
<br>
<tt>&gt; We have to deal with the following cases when we have e.g. a precedence<br>
&gt; order &nbsp;M1 M2 M3 M4, and the following happens in the BEFORE part of M2:<br>
&gt; <br>
&gt; a &nbsp; chain is set to: M1 M3 M4 &nbsp; &nbsp;(your case, you want to continue with M3)<br>
&gt; b &nbsp; chain is set to: M1 M4 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; defensible M4<br>
&gt; c &nbsp; chain is set to: M2 M1 M3 M4 &nbsp; &nbsp;under current semantics, continue with M1<br>
&gt; d &nbsp; chain is set to: M4 M2 M3 M1 &nbsp; &nbsp;continue with M3, M4 will never by <br>
&gt; invoked<br>
</tt><br>
<tt>Yup, that's exactly the behavior I (naively) had expected. </tt><br>
<br>
<tt>But to be clear, what is the current behavior of 'next' for each of these cases? To unwind the call stack? &nbsp;When can the updated mixin list be considered to have taken effect? &nbsp; </tt><br>
<tt><br>
&gt; The general problem is pretty similar to the &quot;immediate&quot; and &quot;logical&quot; <br>
&gt; update view in logic languages, </tt><br>
<br>
<tt>Good analogy, that makes sense.</tt><br>
<br>
<tt>&gt; but it goes back to Lindholm and Richard<br>
&gt; O'Keefe (ROK) from 87, */Efficient implementation of a defensible semantics<br>
&gt; for dynamic Prolog code/* (unfortunately, could not find this fine paper on<br>
&gt; the net). &nbsp;</tt><br>
<br>
<tt>There's also a brief discussion of this in O'Keefe's book &quot;The Craft of Prolog&quot;.</tt><br>
<tt><br>
&gt; The most promissing approach not mentioned yet is to develop a<br>
&gt; c-level implementation of mixin/instmixin/filter/instfilter delete,<br>
&gt; which simply flags the entry in the chain as deleted.....<br>
</tt><br>
<tt>Interestingly, that's how I assumed it was implemented, which is probably why I was surprised.</tt><br>
<br>
<tt>        Scott</tt></body></html>