Исправление monk, (текущая версия) :
А можешь показать как в ракете выглядит цикл и генератор?
#lang racket/base
(require racket/generator)
(define my-stop-value (gensym))
(define (list-yield n)
(generator ()
(for ([i (in-range n)]) (yield i))
my-stop-value))
(displayln "for")
(time
(for ([i (in-range 10000)])
(define y 0)
(for ([k (in-range 10000)])
(set! y (+ y k)))))
(displayln "yield")
(time
(for ([i (in-range 10000)])
(define y 0)
(for ([k (in-producer (list-yield 10000) my-stop-value)])
(set! y (+ y k)))))
С итераторами CL
cl-snakes с
(defgenerator list-yield (n)
(loop for i from 0 to (- n 1) do (yield i))
?
Если это предыдущая версия yield то +-5 секунд, хотя и много, но в целом «так бывает».
Предыдущая.
Хотя, наверное, погрешность должна быть не более 5%.
Другие процессы есть. Может с чем-то тяжёлым пересеклось.
Исходная версия monk, :
А можешь показать как в ракете выглядит цикл и генератор?
#lang racket/base
(require racket/generator)
(define my-stop-value (gensym))
(define (list-yield n)
(generator ()
(for ([i (in-range n)]) (yield i))
my-stop-value))
(displayln "for")
(time
(for ([i (in-range 10000)])
(define y 0)
(for ([k (in-range 10000)])
(set! y (+ y k)))))
(displayln "yield")
(time
(for ([i (in-range 10000)])
(define y 0)
(for ([k (in-producer (list-yield 10000) my-stop-value)])
(set! y (+ y k)))))
Для sbcl получилось в 25 раз быстрее чем python3 на моей машине.
cl-snakes с
(defgenerator list-yield (n)
(loop for i from 0 to (- n 1) do (yield i))
?
Если это предыдущая версия yield то +-5 секунд, хотя и много, но в целом «так бывает».
Предыдущая.
Хотя, наверное, погрешность должна быть не более 5%.
Другие процессы есть. Может с чем-то тяжёлым пересеклось.