考慮的Chez Scheme這段代碼:切斯計劃分配:--program VS --script
(import (chezscheme)) (define (list-enumerate ls val proc) (let loop ((ls ls) (return? #f) (val val)) (if (or (null? ls) return?) val (call-with-values (lambda() (proc val (car ls))) (lambda (return? val) (loop (cdr ls) return? val)))))) (define (list-index ls proc) (list-enumerate ls 0 (lambda (i elt) (if (proc elt) (values #t i) (values #f (+ i 1)))))) (define n 100000) (define data (iota n)) (time (list-index data (lambda (elt) (= elt (- n 1)))))
運行:
~ $ scheme --script ~/scratch/_list-enumerate-allocation-test-chez-a.sps (time (list-index data ...)) no collections 3 ms elapsed cpu time 4 ms elapsed real time 8 bytes allocated
哇,它報告說,只有8個字節被分配。
讓我們來運行它再次使用--program
選項,而不是--script
:
~ $ scheme --program ~/scratch/_list-enumerate-allocation-test-chez-a.sps (time (list-index data ...)) no collections 3 ms elapsed cpu time 3 ms elapsed real time 800000 bytes allocated
哎呀,分配800000個字節。
有什麼區別?
埃德