; This time I'll try different eval benchmark; instead of
; evaluating simple expressions many time, I'll write the program
; that construct large s-expression and measures the time of its
; evaluation
(setq large-s-expression 1)
(setq counter 1)
(do-while (< counter 1000000)
(setq counter (+ counter 1))
(setq large-s-expression
(list 'eval
(list 'quote
(list '+ counter large-s-expression))))
(when (= (% counter 100) 0)
(println counter
" > "
(time (eval large-s-expression)))))
; This is how those z that are evaluated
; look like for counter=2,3,...
;(eval (quote (+ 2 1)))
;(eval (quote (+ 3 (eval (quote (+ 2 1))))))
;(eval (quote (+ 4 (eval (quote (+ 3 (eval (quote (+ 2 1)))))))))
; 100 > 0
; 200 > 15
; 300 > 15
; 400 > 31
; 500 > 46
; 600 > 78
; 700 > 109
; 800 > 140
; 900 > 234
; 1000 > 281
; 1100 >
; ERR: call stack overflow in function eval : quote
;
; Newlisp returns to REPL after that stack overflow. The speed
; is satisfactory, although it seems it is not stable, in some
; executions I got numbers like 900 ms for evaluation of the
; expression with 1000 evals.
; Also, stack overflow happens earlier than in other Scheme
; or Lisp implementations. Clisp and PLT stack overflow
; happens for counter = about 4000, Lispworks and Allegro (free
; editons somewhere near 50 000, while Petit Chez Scheme works
; happily for counter > 10 000 000 and more. Stack overflow
; results in crash of PLT IDE and Chez Scheme interpreter
; respectively.
; However, that stack overflow in Newlisp is not the result of
; eval and quote, because it happens even earlier if eval and
; quote are replaced with sin and cos.
; Conclusion: for evaluation of very large expressions, Newlisp
; is satisfactory, but there is a lot of room for improvement.
Evaluation of Large Expressions in Newlisp.
Subscribe to:
Post Comments (Atom)
you could always change the stack size:
ReplyDeletenewlisp -s 100000
newLISP v.9.3.11 on OSX IPv4 UTF-8, execute 'newlisp -h' for more info.
>
... your code
1
1
100 > 2
200 > 10
300 > 21
400 > 37
500 > 59
600 > 87
700 > 120
800 > 160
900 > 206
1000 > 258
1100 > 316
1200 > 381
1300 > 460
1400 > 534
1500 > 620
1600 > 710
1700 > 807
1800 > 906
1900 > 1017
2000 > 1271
2100 > 5031
2200 > 2891
2300 > 3135
2400 > 1711
2500 > 3319
2600 > 4231
2700 > 9140
2800 > 4333
2900 > 3216
3000 > 6424
3100 > 3831
3200 > 4892
3300 > 6247
3400 > 5205
3500 > 6683
3600 > 6150
3700 > 22911
3800 > 113175
it gets very slow though... :)
Thanks, now I know for stack. This 3600 limit will require some rethinking once, it is not really big list for modern computers ...
ReplyDeleteGreat reviews written by the company themselves, in efforts to sway customers their way. With such trickery, consumers can be easily misled. Safer Reviews
ReplyDelete