wisp
 
(Arne Babenhauserheide)
2013-09-13: short code which is just as efficient.

short code which is just as efficient.

diff --git a/wisp-guile.w b/wisp-guile.w
--- a/wisp-guile.w
+++ b/wisp-guile.w
@@ -556,10 +556,12 @@ define : wisp2lisp-lines lines
                  . parsed
 
 
-; efficient version from rev 12266d455bb0
+; ,time (string-replace-substring (xsubstring "abcdefghijkl" 0 99999) "def" "abc")
+; 1.320449s real time, 1.319953s run time.  1.140535s spent in GC.
+; less efficient and longer version from rev 12266d455bb0
 ; ,time (string-replace-substring (xsubstring "abcdefghijkl" 0 99999) "def" "abc")
 ; 0.668212s real time, 0.667948s run time.  0.482193s spent in GC.
-; less efficient version from rev a887aeb0dfe2
+; even less efficient version from rev a887aeb0dfe2
 ; ,time (string-replace-substring (xsubstring "abcdefghijkl" 0 99999) "def" "abc")
 ; 5.242456s real time, 5.240834s run time.  0.358750s spent in GC.
 define : string-replace-substring s substring replacement
@@ -567,16 +569,12 @@ define : string-replace-substring s subs
        let : : sublen : string-length substring
            let replacer
                : newstring s
-                 startindex 0
-                 addindex : string-contains s substring
-               if : not : equal? addindex #f
-                  let*
-                      : index : + startindex addindex
-                        replaced : string-replace newstring replacement index : + index sublen
-                        newaddindex : string-contains (substring/read-only replaced index) substring
-                      replacer replaced index newaddindex
+                 index : string-contains s substring
+               if : not : equal? index #f
+                  let : : replaced : string-replace newstring replacement index : + index sublen
+                    replacer replaced : string-contains replaced substring index ; only look at parts after index
                   . newstring
-               
+
 
 define : unescape-linebreaks text
        . "unescape linebreaks"