Created
April 26, 2020 04:07
-
-
Save shirok/8c0dbd9a503ad3cd06a5c0e7ff2094f3 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
Benchmark: ran giterate0, giterate0-1, giterate0-2, giterate0-3, giterate1, giterate1-1, giterate1-2, giterate2, each for 10 times. | |
giterate0: 6.322 real, 6.310 cpu (6.300 user + 0.010 sys)@1.58/s n=10 | |
giterate0-1: 6.336 real, 6.320 cpu (6.320 user + 0.000 sys)@1.58/s n=10 | |
giterate0-2: 6.583 real, 6.560 cpu (6.560 user + 0.000 sys)@1.52/s n=10 | |
giterate0-3: 6.538 real, 6.520 cpu (6.520 user + 0.000 sys)@1.53/s n=10 | |
giterate1: 7.110 real, 7.110 cpu (7.110 user + 0.000 sys)@1.41/s n=10 | |
giterate1-1: 7.004 real, 7.010 cpu (7.010 user + 0.000 sys)@1.43/s n=10 | |
giterate1-2: 6.564 real, 6.560 cpu (6.560 user + 0.000 sys)@1.52/s n=10 | |
giterate2: 5.977 real, 5.980 cpu (5.980 user + 0.000 sys)@1.67/s n=10 | |
Rate giterate0 giterate0-1 giterate0-2 giterate0-3 giterate1 giterate1-1 giterate1-2 giterate2 | |
giterate0 2/s -- 1.002 1.040 1.033 1.127 1.111 1.040 0.948 | |
giterate0-1 2/s 0.998 -- 1.038 1.032 1.125 1.109 1.038 0.946 | |
giterate0-2 2/s 0.962 0.963 -- 0.994 1.084 1.069 1.000 0.912 | |
giterate0-3 2/s 0.968 0.969 1.006 -- 1.090 1.075 1.006 0.917 | |
giterate1 1/s 0.887 0.889 0.923 0.917 -- 0.986 0.923 0.841 | |
giterate1-1 1/s 0.900 0.902 0.936 0.930 1.014 -- 0.936 0.853 | |
giterate1-2 2/s 0.962 0.963 1.000 0.994 1.084 1.069 -- 0.912 | |
giterate2 2/s 1.055 1.057 1.097 1.090 1.189 1.172 1.097 -- |
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 (giterate0-2 f x) | |
(let ((x_ x)) | |
(^[] | |
(set! x_ x) | |
(set! x (f x)) | |
x_))) | |
(define (giterate0-3 f x . dummy) | |
(^[] | |
(if (null? dummy) | |
(set! dummy #t) | |
(set! x (f x))) | |
x)) | |
(define (giterate1 f x) | |
(gcons* x | |
(^[] | |
(set! x (f x)) | |
x))) | |
(define (gcons1 item g) | |
(define (gen) | |
(set! gen g) | |
item) | |
(^[] (gen))) | |
(define (giterate1-1 f x) | |
(gcons1 x | |
(^[] | |
(set! x (f x)) | |
x))) | |
(define (giterate1-2 f x) | |
(let ((first #t) | |
(x x)) | |
(^[] (if first | |
(begin (set! first #f) x) | |
(begin (set! x (f x)) x))))) | |
(define (giterate2 f x) | |
(^[] | |
(set! x (f x)) | |
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)) | |
(giterate0-2 . ,(runner giterate0-2)) | |
(giterate0-3 . ,(runner giterate0-3)) | |
(giterate1 . ,(runner giterate1)) | |
(giterate1-1 . ,(runner giterate1-1)) | |
(giterate1-2 . ,(runner giterate1-2)) | |
(giterate2 . ,(runner giterate2)) | |
))) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment