new comer. performance question

Started by fetchoo, January 13, 2014, 08:34:37 AM

Previous topic - Next topic

fetchoo

Hi



I tried the following and compared the running time with CCL



> (let ((s)) (time (dotimes (i 1000000) (set 's (cons (sqrt i) s)))))

... do not stop

> (let ((s)) (time (dotimes (i 1000000) (push (sqrt i) s))))

111.93 milliseconds



with CCL

? (let ((s)) (time (dotimes (i 100000) (push (sqrt i) s))))

848 milliseconds



in CCL (setq x (cons a x)) == (push a x), but it looks like it is not the case for newlisp (i tried set/setf/setq)



why is this? how set/setq/setf/cons are implemented?



Kind regards

Taoufik

Lutz

#1
In newLISP cons creates a new list which then in you example is placed into s.



push takes the reference of s and modifies s which is muchfaster because no list creation and copying takes place.