Mark H Weaver <m...@netris.org> skribis: > Indeed, the implementation of 'string-join' was very bad: about O(n^2)
[...] > Before: > > scheme@(guile-user)> ,time (define s (string-join (make-list 10000 "test") > "-")) > ;; 0.998800s real time, 0.996677s run time. 0.984885s spent in GC. > scheme@(guile-user)> ,time (define s (string-join (make-list 100000 "test") > "-")) > ;; 98.006569s real time, 97.817077s run time. 97.795970s spent in GC. > > After: > > scheme@(guile-user)> ,time (define s (string-join (make-list 10000 "test") > "-")) > ;; 0.006362s real time, 0.006351s run time. 0.000000s spent in GC. > scheme@(guile-user)> ,time (define s (string-join (make-list 100000 "test") > "-")) > ;; 0.028513s real time, 0.028457s run time. 0.022235s spent in GC. > scheme@(guile-user)> ,time (define s (string-join (make-list 1000000 "test") > "-")) > ;; 0.303098s real time, 0.302543s run time. 0.289639s spent in GC. > scheme@(guile-user)> ,time (define s (string-join (make-list 10000000 "test") > "-")) > ;; 3.288105s real time, 3.281922s run time. 3.174460s spent in GC. Nice! Ludo’.