I am investigating the performance issues but one thing popped up. You are writing things like<div><br><div><div>(defun run-array-set ()</div><div>  (declare (optimize (speed 3) (debug 0) (safety 0)))</div><div>  (let ((A (make-array '(100 100 100) :element-type 'single-float :adjustable nil))</div>

<div><span class="Apple-tab-span" style="white-space:pre">      </span>(value 8.5))</div><div>    (time (dotimes (n 50)</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>    (dotimes (i 90)</div><div><span class="Apple-tab-span" style="white-space:pre">  </span>      (dotimes (j 90)</div>

<div><span class="Apple-tab-span" style="white-space:pre">              </span>(dotimes (k 90)</div><div><span class="Apple-tab-span" style="white-space:pre">              </span>  (setf (aref A i j k) value))))))))</div><div><br></div><div>Notice that TIME does not have to be "efficient" in any way. In particular ECL uses a closure and an inner function that does the job. This means that whenever it has to use the variable "A" in the loops it has to go through extra effort and you are measuring not arrays but closures.</div>

<div><br></div><div>A more reasonable way would be to make sure that the variables are properly isolated as in</div><div><br></div><div>(defun run-array-set ()</div><div>  (flet ((inner-loop (A value)</div><div>           (declare ..)</div>

<div>      ...))</div><div>    (time (funcall (make-array ...)))</div><br>-- <br>Instituto de Física Fundamental, CSIC<br>c/ Serrano, 113b, Madrid 28006 (Spain) <br><a href="http://tream.dreamhosters.com">http://tream.dreamhosters.com</a><br>


</div></div>