The Speed of eval in Some
|
|
Newlisp:
(time (begin (setq i 1)
(do-while (< 1000000)
(setq i (+ i 1))
(begin (setq x 0)
(setq x (+ x 1))))))
(time (begin (setq i 1)
(do-while (< i 1000000)
(setq i (+ i 1))
'(begin (setq x 0)
(setq x (+ x 1))))))
(time (begin (setq i 1)
(do-while (< i 1000000)
(setq i (+ i 1))
(eval '(begin (setq x 0)
(setq x (+ x 1)))))))
(time (begin (setq i 1)
(do-while (< i 1000000)
(setq i (+ i 1))
(begin (setq x (eval 0))
(setq x (+ x 1)))))) |
Scheme:
(define x 0)
(time (do ((i 0 (+ i 1)))
((= i 1000000))
(begin (set! x 0)
(set! x (+ x 1)))))
(time (do ((i 0 (+ i 1)))
((= i 1000000))
'(begin (set! x 0)
(set! x (+ x 1)))))
(time (do ((i 0 (+ i 1)))
((= i 1000000))
(eval '(begin (set! x 0)
(set! x (+ x 1))))))
(time (do ((i 0 (+ i 1)))
((= i 1000000))
(begin (set! x (eval 0))
(set! x (+ x 1)))))
|
|
Common Lisp:
(time (do ((i 0 (+ i 1)))
((= i 1000000))
(progn (setf x 0)
(setf x (+ x 1)))))
(time (do ((i 0 (+ i 1)))
((= i 1000000))
'(progn (setf x 0)
(setf x (+ x 1)))))
(time (do ((i 0 (+ i 1)))
((= i 1000000))
(eval '(progn (setf x 0)
(setf x (+ x 1))))))
(time (do ((i 0 (+ i 1)))
((= i 1000000))
(progn (setf x (eval 0))
(setf x (+ x 1)))))
|
Clojure:
(time (do (def i 1)
(while (< i 1000000)
(def i (+ i 1))
(do (def x 0)
(def x (+ x 1))))))
(time (do (def i 1)
(while (< i 1000000)
(def i (+ i 1))
'(do (def x 0)
(def x (+ x 1))))))
(time (do (def i 1)
(while (< i 1000000)
(def i (+ i 1))
(eval '(do (def x 0)
(def x (+ x 1)))))))
(time (do (def i 1)
(while (< i 1000000)
(def i (+ i 1))
(do (def x (eval 0))
(def x (+ x 1))))))
|
The results:
| Implementation | time1 | time2 | time3 | time4 |
| PicoLisp 3.0.1, Linux 64 bit (VirtualBox) | 0.163 | 0.070 | 0.174 | 0.174 |
| Eligis Open Lisp 9.1.0 (32 bit) | 0.139 | 0.070 | 0.212 | 0.166 |
| Eligis Open Lisp 9.1.0 (64 bit) | 0.195 | 0.078 | 0.231 | 0.227 |
| PicoLisp 3.0.1, Linux 32 bit (VirtualBox) | 0.251 | 0.135 | 0.269 | 0.250 |
| Newlisp 10.0.0. | 0.544 | 0.275 | 0.611 | 0.636 |
| Newlisp 9.3.12. | 0.578 | 0.265 | 0.656 | 0.656 |
| GNU CL 2.6.7. | 1.040 | 0.510 | 1.110 | 1.120 |
| Lispworks CL 5.0 compiled | 0.015 | 0.000 | 1.187 | 0.015 |
| XLISP-PLUS 3.04 | 1.280 | 0.780 | 1.500 | 1.390 |
| CLisp CL 2.41 | 1.672 | 1.047 | 1.906 | 1.859 |
| Lispworks CL 5.0 without compiling | 2.578 | 1.500 | 2.828 | 2.656 |
| Allegro CL 8.1. compiled | 0.016 | 0.015 | 3.703 | 0.094 |
| Clozure CL 1.6-r14468 (WindowsX8664) | 0.025 | 0.004 | 3.991 | 0.103 |
| Clozure CL 1.5-r13651 (WindowsX8664) | 0.025 | 0.004 | 4.189 | 0.106 |
| Ufasoft CL 4.2.21.0 | 4.095 | 2.889 | 4.393 | 4.416 |
| ABCL 0.20 interpreted | 3.762 | 0.900 | 4.911 | 4.623 |
| ABCL 0.18 compiled | 0.069 | 0.039 | 5.117 | 1.388 |
| Clozure CL 1.4-r13122 (WindowsX8664) | 0.031 | 0.015 | 5.556 | 0.064 |
| ABCL 0.18 interpreted | 3.808 | 1.280 | 5.796 | 5.586 |
| Petit Chez Scheme 7.4. | 0.109 | 0.063 | 10.125 | 0.859 |
| SBCL 1.0.34, Linux 32 bit (Sun Virtual Box) | 0.011 | 0.004 | 11.962 | 0.390 |
| Allegro CL 8.1 without compiling | 11.875 | 7.922 | 13.906 | 12.704 |
| Prime-Lisp 2.1 | 10.569 | 5.802 | 13.821 | 11.762 |
| Gambit 4.2.6. Scheme interpreter | 0.609 | 0.344 | 19.828 | 2.016 |
| Chicken 4.6.0 (compiled, VirtualBox) | 0.050 | 0.017 | 25.150 | 0.870 |
| Petit Chez Scheme 8.0. (nonthreaded) | 0.259 | 0.078 | 32.513 | 2.865 |
| Chicken 4.6.0 (interpreted, VirtualBox) | 0.960 | 0.620 | 35.150 | 2.050 |
| Gauche Cygwin 0.9 Scheme | 0.095 | 0.061 | 45.693 | 8.975 |
| PLT Scheme 372 (debugging and profiling off) | 0.140 | 0.063 | 50.406 | 6.953 |
| Petit Chez Scheme 8.0. (threaded) | 0.270 | 0.078 | 50.761 | 9.713 |
| PLT Scheme 4.13 (debugging and profiling off) | 0.047 | 0.004 | 77.127 | 19.609 |
| Racket 5.1 (debugging and profiling off) | 0.032 | 0.004 | 102.292 | 28.108 |
| Racket 5.00 (debugging and profiling off) | 0.016 | 0.000 | 104.396 | 30.358 |
| SXM (CXEMA) Version 1.1 Dec 10 2001 | 0.780 | 0.470 | 165.844 | 45.781 |
| Clojure 1.2. | 2.946 | 0.873 | 181.235 | 11.764 |
| Corman 3.0.1. (VirtualBox) | 0.005 | 0.003 | 250.137 | 94.427 |
| Clojure 1.3. | 7.156 | 2.106 | 291.523 | 20.451 |
| Clojure 1.1. | 4.110 | 1.549 | 304.426 | 23.023 |