(use matchable medea spiffy uri-common intarweb comparse intarweb miscmacros) ;; ==================== debug ;; if you start nrepl and connect to it, you'll get the same results ;; (nrepl's thread-start! causes heap to grow). ;; (thread-start! (lambda () (use nrepl) (nrepl 1234))) ;; ==================== globals (thread-start! (lambda () (print "heap-size should be steady for 10 seconds") (thread-sleep! 10) (thread-start! (lambda () ;; this thread's existance alone makes the heap-size grow, it seems (print "now the heap-size will grow for 10 seconds") (thread-sleep! 10) (print "now it'll be steady again (one of my favorite wtf moments)"))))) (thread-start! (lambda () (let loop () (print "heap-size: " (vector-ref (memory-statistics) 1)) (flush-output) (thread-sleep! 1) (loop)))) ;; (read-string 4 (make-repeating-port "ab")) => "abab" (define (make-repeating-port string) (let* ((document (string->list string)) (buffer document)) (make-input-port (lambda () (let retry () (if (pair? buffer) (begin0 (car buffer) (set! buffer (cdr buffer))) (begin (set! buffer document) (retry))))) error error))) (let () (define input-port (make-repeating-port " { } ")) (let loop ((input input-port)) (receive (json rest) (read-json input) (if (not (parser-input-end? rest)) (loop rest)))))