(define (my-string->list s) (##sys#check-string s 'string->list) (let ((len (##sys#size s))) (let loop ((i (fx- len 1)) (ls '())) (if (fx< i 0) ls (loop (fx- i 1) (cons (##core#inline "C_subchar" s i) ls)))))) (define *corpus* `("foo" "bar" "baaaaaaaaaaaaaaar" "" "lorem ipsum dolor sit amet" ,(make-string 1000 #\a) ,(make-string 5000 #\a) ,(make-string 10000 #\a))) (gc #t) (time (let lp ((i 10000)) (unless (fx= i -1) (map my-string->list *corpus*) (lp (fx- i 1))))) (gc #t) (time (let lp ((i 10000)) (unless (fx= i -1) (map string->list *corpus*) (lp (fx- i 1))))) ;; 11.604s CPU time, 6.214s GC time (major), 160016/18245 mutations (total/tracked), 4643/2766 GCs (major/minor), maximum live heap: 628.45 KiB ;; 25.413s CPU time, 15.476s GC time (major), 160016/34176 mutations (total/tracked), 12229/4957 GCs (major/minor), maximum live heap: 698.44 KiB