Marc:
Discussing schelog again brought to mind my suggestion about how the compiler should inline eqv?:
https://webmail.iro.umontreal.ca/pipermail/gambit-list/2006-October/ 000885.html
Some results on the naive reverse% benchmark are at
https://webmail.iro.umontreal.ca/pipermail/gambit-list/2006-October/ 000890.html
Even on the "houses" puzzle, which spends a lot of time in the "occurs" check, the change in how to compile eqv? makes a big difference with the declarations:
(declare (standard-bindings) (extended-bindings) (block)) (declare (not safe)) (declare (inlining-limit 1000))
New eqv?:
[brad:~/Desktop/schelog/examples] lucier% gsc -:m100000 Gambit Version 4.0 beta 23
(load "../gambit-unix-version-of-schelog")
"/Users/lucier/Desktop/schelog/examples/../gambit-unix-version-of- schelog.o2"
(load "houses")
"/Users/lucier/Desktop/schelog/examples/houses.o1"
(load "puzzle")
"/Users/lucier/Desktop/schelog/examples/puzzle.o1"
(time (solve-puzzle %houses))
(time (solve-puzzle %houses)) 395 ms real time 366 ms cpu time (268 user, 98 system) no collections 66951840 bytes allocated no minor faults no major faults ((solution= ((japan owns the zebra) (norway drinks water))))
*** EOF again to exit
Old eqv?:
[brad:~/Desktop/schelog/examples] lucier% gsc -:m100000 Gambit Version 4.0 beta 23
(load "../gambit-unix-version-of-schelog.o1")
"/Users/lucier/Desktop/schelog/examples/../gambit-unix-version-of- schelog.o1"
(load "houses")
"/Users/lucier/Desktop/schelog/examples/houses.o1"
(load "puzzle")
"/Users/lucier/Desktop/schelog/examples/puzzle.o1"
(time (solve-puzzle %houses))
(time (solve-puzzle %houses)) 709 ms real time 657 ms cpu time (551 user, 106 system) no collections 66952160 bytes allocated no minor faults no major faults ((solution= ((japan owns the zebra) (norway drinks water))))
*** EOF again to exit