;; -*- Mode: Irken -*- ;; Can we use this simple coro to write samefringe? Can it even be ;; done with a statically-typed call/cc? Not in the simple way that ;; we can in Python - since the run-queue would need to be able to ;; store random objects in the queue? I think samefringe really wants ;; to be done with generators... (include "lib/basis.scm") (define run-queue (queue/make)) (define (enqueue k) (queue/add run-queue k)) (define (dispatch) (match (queue/pop run-queue) with (maybe:yes k) -> (putcc k #u) (maybe:no) -> #u)) (define (fork f) (enqueue (getcc)) (f) (dispatch)) (define (yield) (enqueue (getcc)) (dispatch)) (define (thread n) (for-range i 10 (print-string (format "thread# " (int n) ":" (int i) "\n")) (yield) )) (print-string "first fork\n") (fork (lambda () (thread 0))) (print-string "second fork\n") (fork (lambda () (thread 1))) (thread 2) (print-string (format "queue length = " (int run-queue.length) "\n"))