<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Tue, Oct 29, 2013 at 3:06 AM, Matthew Mondor <span dir="ltr"><<a href="mailto:mm_lists@pulsar-zone.net" target="_blank">mm_lists@pulsar-zone.net</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;padding-left:1ex;border-left-color:rgb(204,204,204);border-left-width:1px;border-left-style:solid">First a question relative to LOOP/LET and FIXNUM:</blockquote>

<div> </div><div>Actually nothing to do with LOOP. Replace LET -> LET* and you will see better optimizations. The problem is that LET misses some declarations that LET* has. Take</div><div> </div><div>(LET ((A (FOO))) (DECLARE (FIXNUM A)) ...)</div>

<div> </div><div>Internally, ECL converts this into </div><div> </div><div><div>(LET* ((X (FOO)) (A X)) (DECLARE (FIXNUM A)) ...)</div><div> </div><div>Now, since "A" is read only, it is replaced by the value X, which was not declared to be a FIXNUM. One could fix the transformer for LET to add a declaration on the temporary variables or, more simply, add (THE FIXNUM ...) around the value.</div>

</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;padding-left:1ex;border-left-color:rgb(204,204,204);border-left-width:1px;border-left-style:solid">
This next question has to do with structure accessors:<br>
<br>
As can be seen above, a function dispatch is done to access the slots in<br>
read mode.  But interestingly, for SETF, a more inline result is<br>
obtained assigning directly on the slot:[...]<br>
I realize that with CLOS this would be more complex, but this is a<br>
simple struct, with the consequences voluntarily undefined if it's<br>
redefined without recompiling its dependent code.  Could it be that<br>
SETF can infer better than LET in this case?  Or is there another<br>
reason why inline read slot access should not be done here, but that<br>
it's safer for SETF?</blockquote><div> </div><div>Not really. Both should be equivalent for structures but the difference is that SETF has an analyzer for that, but ordinary function calls do not check whether the function names a slot accessor -- the code is there, but it is deactivated because it cannot be used with CLOS.</div>

</div></div></div>