<br><font size=2><tt>Gustaf Neumann &lt;neumann@wu-wien.ac.at&gt; wrote
on 09/07/2006 10:24:35 AM:<br>
<br>
&gt; Scott Gargash schrieb:<br>
&gt; &gt; Thanks, but in my particular case I don't have knowledge of Derived,
<br>
&gt; &gt; only Base. &nbsp;By that, I mean I'm actually adding BaseMixin
(the HW <br>
&gt; &gt; simulator) to Base (the HW) before Derived has even been created.
&nbsp;I'd <br>
&gt; &gt; like for Derived to remain ignorant of BaseMixin because BaseMixin
<br>
&gt; &gt; only exists for testing purposes. &nbsp;I prefer to avoid having
code paths <br>
&gt; &gt; that exist only for testing purposes. (Which mixins are particualrly
<br>
&gt; &gt; well-suited for).<br>
&gt; well, that are your requirements, but for others it might be different.<br>
</tt></font>
<br><font size=2><tt>Agreed. &nbsp;Except I don't understand the scenario
where the current behavior is desirable. &nbsp;</tt></font>
<br>
<br><font size=2><tt>If mixins intercepted at the class they were mixed
into, then you have the ability to choose precisely where you want the
mixin to intercept:</tt></font>
<br>
<br><font size=2><tt>That could be globally by adding the mixin at the
head:</tt></font>
<br><font size=2><tt>::Derived mixin add ::BaseMixin ==&gt; ::BaseMixin
::Derived ::Base </tt></font>
<br>
<br><font size=2><tt>Or at an intermediate location by adding the mixin
lower in the stack</tt></font>
<br><font size=2><tt>::Base mixin add ::BaseMixin ==&gt; ::Derived ::BaseMixin
::Base</tt></font>
<br>
<br><font size=2><tt>But the current definition only allows for the first
case, irrespective of where the developer places the mixin. &nbsp;I can
understand why someone might want to intercept Derived, but if that's what
they want they should have to be explicit about it, no? &nbsp;Implicitly
intercepting classes you don't have knowledge of seems to be asking for
errors.</tt></font>
<br><font size=2><tt><br>
At least that's how I found out how this works...</tt></font>
<br>
<br><font size=2><tt>&gt; Do you have a technical reason, why you want
the instmixin BaseMixin in the<br>
&gt; precedence order between Base and Derived? I have developed many<br>
&gt; applications with mixins/instmixin, and i never had this need.</tt></font>
<br>
<br><font size=2><tt>::Base ==&gt; Class that manipulates HW device</tt></font>
<br><font size=2><tt>::Derived ==&gt; Derived class that adds application-specific
methods to the HW device.</tt></font>
<br><font size=2><tt>::BaseMixin ==&gt; HW Simulator</tt></font>
<br>
<br><font size=2><tt>Since BaseMixin simulates HW that Base would actually
access, BaseMixin terminates (some) call chains (doesn't invoke 'next').
If BaseMixin is put in front of ::Derived, this keeps those ::Derived methods
from being invoked. &nbsp;If BaseMixin invokes 'next', the HW is (incorrectly)
accessed. If ::Derived is made aware of BaseMixin, then there's code in
the release application dealing with BaseMixin, which won't exist in the
release application (BaseMixin simulates HW for test purposes). &nbsp;</tt></font>
<br>
<br><font size=2><tt>I'm sure that this is the appropriate precedence order.
&nbsp;I'm not sure that mixins are the appropriate solution. &nbsp;Or rather,
I was sure but since enough people don't share my belief that this is an
issue I suspect I'm misusing it somehow. &nbsp;</tt></font>
<br>
<br><font size=2><tt>Implementing a simulator as a mixin seemed like a
good idea. &nbsp; The application has no reference to the simulator (::Derived
-superclass ::Base), and the test harness can mixin the simulator as necessary
(::Base mixin add ::BaseMixin) without touching the rest of the application.
&nbsp;It just doesn't work. </tt></font>
<br>
<br><font size=2><tt>I can accept that it doesn't work the way I want,
but I'm still struggling with why it works the way it does. &nbsp;I don't
see the advantage of always forcing the mixin to the head of the precedence,
even ahead of classes that haven't been defined yet. &nbsp;My expectation
was that when I added a mixin to a particular class, I would intercept
methods at the point I added the mixin. &nbsp;Why is my expectation inappropriate?</tt></font>
<br>
<br><font size=2><tt>&nbsp; &nbsp;</tt></font>