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’.


Reply via email to