LINUX.ORG.RU

История изменений

Исправление 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%.

Другие процессы есть. Может с чем-то тяжёлым пересеклось.