Created
April 25, 2020 20:09
-
-
Save shirok/012504f7c795519d42be099b123ae040 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
$ ./gosh -ftest ./t | |
Benchmark: ran giterate0, giterate0-1, giterate1, giterate2, gunfold1, each for 10 times. | |
giterate0: 14.336 real, 21.140 cpu (20.990 user + 0.150 sys)@0.47/s n=10 | |
giterate0-1: 6.291 real, 6.290 cpu ( 6.290 user + 0.000 sys)@1.59/s n=10 | |
giterate1: 7.002 real, 7.000 cpu ( 7.000 user + 0.000 sys)@1.43/s n=10 | |
giterate2: 5.903 real, 5.910 cpu ( 5.910 user + 0.000 sys)@1.69/s n=10 | |
gunfold1: 14.704 real, 14.720 cpu (14.710 user + 0.010 sys)@0.68/s n=10 | |
Rate giterate0 giterate0-1 giterate1 giterate2 gunfold1 | |
giterate0 0/s -- 0.298 0.331 0.280 0.696 | |
giterate0-1 2/s 3.361 -- 1.113 0.940 2.340 | |
giterate1 1/s 3.020 0.899 -- 0.844 2.103 | |
giterate2 2/s 3.577 1.064 1.184 -- 2.491 | |
gunfold1 1/s 1.436 0.427 0.476 0.401 -- | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(use gauche.time) | |
(use gauche.generator) | |
(define (giterate0 f x) | |
(^[] | |
(begin0 x | |
(set! x (f x))))) | |
(define (giterate0-1 f x) | |
(^[] | |
(rlet1 x_ x | |
(set! x (f x))))) | |
(define (giterate1 f x) | |
(gcons* x | |
(^[] | |
(set! x (f x)) | |
x))) | |
(define (giterate2 f x) | |
(^[] | |
(set! x (f x)) | |
x)) | |
(define (gunfold1 f x) | |
(gunfold (^_ #f) identity f x)) | |
(define (runner proc) | |
(^[] ((gdrop (proc (cut + 1 <>) 1) 10000000)))) | |
(define (main args) | |
(time-these/report | |
10 | |
`((giterate0 . ,(runner giterate0)) | |
(giterate0-1 . ,(runner giterate0-1)) | |
(giterate1 . ,(runner giterate1)) | |
(giterate2 . ,(runner giterate2)) | |
(gunfold1 . ,(runner gunfold1)) | |
))) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment