Matt Welland <mattrwell...@gmail.com> writes:
> With Chicken 4 I'm seeing a pretty high impact on startup time from > (declare (uses foo.import)). I think that will be less of a problem when I > switch from using * for my export lists to only the procedures that need to > be exported. However I was very surprised to see readline in the top three > when I ran a profile. I'm thinking somehow I've created a genuine problem > but I've no idea what to look for. > > Suggestions? I'd guess this is from the O(n^2) behaviour of merge-se in modules.scm. This has been fixed in C5. Here's a version for C4 that I used to use: (define (merge-se . ses*) ; later occurrences take precedence to earlier ones (let ([table (make-hash-table)] [rses (reverse ses*)]) (let loop ([ses (cdr rses)] [last-se #f] [se2 (car rses)]) (cond [(null? ses) se2] [(eq? last-se (car ses)) (loop (cdr ses) last-se se2)] [(null? (car ses)) (loop (cdr ses) last-se se2)] [(not last-se) (for-each (lambda (e) (hash-table-set! table (car e) #t)) se2) (loop ses se2 se2)] [else (let lp ([se (car ses)] [se2 se2]) (cond [(null? se) (loop (cdr ses) (car ses) se2)] [(hash-table-exists? table (caar se)) (lp (cdr se) se2)] [else (hash-table-set! table (caar se) #t) (lp (cdr se) (cons (car se) se2))]))])))) > > Note - migration is a work in progress but we are not quite at a point > where I can test this in Chicken 5. > > procedure calls > seconds average percent > --------------------------------------------------------------------------------------------------- > <syntax> 29 > 1.880 0.064 12.384 > megamod.import.scm:71: ##sys#register-compiled-module 1 > 1.660 1.660 10.935 > readline.scm:74: ##sys#register-compiled-module 1 > 1.580 1.580 10.408 > runsmod.import.scm:43: ##sys#register-compiled-module 1 > 1.350 1.350 8.893