Skip to content

Instantly share code, notes, and snippets.

@shirok
Created April 25, 2020 20:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save shirok/012504f7c795519d42be099b123ae040 to your computer and use it in GitHub Desktop.
Save shirok/012504f7c795519d42be099b123ae040 to your computer and use it in GitHub Desktop.
$ ./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 --
(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