Seebs said:
Idle curiousity: How's mine do? I haven't checked to see what the official
interface is, but I'm pretty sure this is adequately obvious. It presumably
suffers from double-scanning, but I don't know how much that matters. It
doesn't do a lot of mallocs.
It all depends on the length of the string and probably on the quality
of the library. Yours is ps_replace. I put it next to my first one,
bb_replace, because they are structurally the same (as is Willem's
first which I have not timed since I expected it to be the same as
mine).
replace(`cat d4004`, "[]", "xx"):
blm_replace 4086300 calls in 4.998s is 1.223e-06 s/call 1.223 µs/call
rh_replace2 647200 calls in 5.000s is 7.726e-06 s/call 7.726 µs/call
cmt_replace 5229000 calls in 5.000s is 9.562e-07 s/call 956.2 ns/call
w_replace 617700 calls in 5.001s is 8.096e-06 s/call 8.096 µs/call
en_replace 627100 calls in 4.999s is 7.972e-06 s/call 7.972 µs/call
fast_replace 1424600 calls in 5.000s is 3.51e-06 s/call 3.51 µs/call
bb_replace 3141500 calls in 5.000s is 1.592e-06 s/call 1.592 µs/call
ps_replace 3138400 calls in 5.000s is 1.593e-06 s/call 1.593 µs/call
replace(`cat d4004`, "{}", "xx"):
blm_replace 4630500 calls in 4.999s is 1.08e-06 s/call 1.08 µs/call
rh_replace2 648700 calls in 5.001s is 7.709e-06 s/call 7.709 µs/call
cmt_replace 5258400 calls in 4.999s is 9.507e-07 s/call 950.7 ns/call
w_replace 620100 calls in 5.001s is 8.064e-06 s/call 8.064 µs/call
en_replace 640500 calls in 4.999s is 7.806e-06 s/call 7.806 µs/call
fast_replace 1300000 calls in 5.000s is 3.846e-06 s/call 3.846 µs/call
bb_replace 2985300 calls in 5.000s is 1.675e-06 s/call 1.675 µs/call
ps_replace 2991000 calls in 5.000s is 1.672e-06 s/call 1.672 µs/call
replace(`cat wap.txt`, "and", "xx"):
blm_replace 200 calls in 5.143s is 0.02571 s/call 25.71 ms/call
rh_replace2 500 calls in 5.540s is 0.01108 s/call 11.08 ms/call
cmt_replace 200 calls in 4.537s is 0.02269 s/call 22.69 ms/call
w_replace 500 calls in 5.205s is 0.01041 s/call 10.41 ms/call
en_replace 400 calls in 4.612s is 0.01153 s/call 11.53 ms/call
fast_replace 600 calls in 5.214s is 0.008689 s/call 8.689 ms/call
bb_replace 200 calls in 8.728s is 0.04364 s/call 43.64 ms/call
ps_replace 100 calls in 4.397s is 0.04397 s/call 43.97 ms/call
replace(`cat wap.txt`, "ZZZ", "xx"):
blm_replace 300 calls in 6.698s is 0.02233 s/call 22.33 ms/call
rh_replace2 700 calls in 4.446s is 0.006351 s/call 6.351 ms/call
cmt_replace 300 calls in 6.549s is 0.02183 s/call 21.83 ms/call
w_replace 700 calls in 4.673s is 0.006675 s/call 6.675 ms/call
en_replace 800 calls in 5.167s is 0.006459 s/call 6.459 ms/call
fast_replace 1100 calls in 4.465s is 0.004059 s/call 4.059 ms/call
bb_replace 200 calls in 8.509s is 0.04255 s/call 42.55 ms/call
ps_replace 200 calls in 8.541s is 0.04271 s/call 42.71 ms/call
replace("abzzefzzijlmzzpqrzzuvzzyz", "zz", "xx"):
blm_replace 7714500 calls in 4.999s is 6.48e-07 s/call 648 ns/call
rh_replace2 31172100 calls in 5.000s is 1.604e-07 s/call 160.4 ns/call
cmt_replace 8842600 calls in 5.000s is 5.654e-07 s/call 565.4 ns/call
w_replace 26458800 calls in 5.000s is 1.89e-07 s/call 189 ns/call
en_replace 12170600 calls in 5.000s is 4.108e-07 s/call 410.8 ns/call
fast_replace 22489800 calls in 5.000s is 2.223e-07 s/call 222.3 ns/call
bb_replace 6505100 calls in 5.000s is 7.686e-07 s/call 768.6 ns/call
ps_replace 6331000 calls in 5.000s is 7.898e-07 s/call 789.8 ns/call
replace("abcdefghijlmnopqrstuvwxyz", "zz", "xx"):
blm_replace 43166400 calls in 4.999s is 1.158e-07 s/call 115.8 ns/call
rh_replace2 43100600 calls in 5.000s is 1.16e-07 s/call 116 ns/call
cmt_replace 22713000 calls in 5.000s is 2.201e-07 s/call 220.1 ns/call
w_replace 53059200 calls in 5.000s is 9.423e-08 s/call 94.23 ns/call
en_replace 35975500 calls in 5.000s is 1.39e-07 s/call 139 ns/call
fast_replace 49671300 calls in 5.000s is 1.007e-07 s/call 100.7 ns/call
bb_replace 31664100 calls in 5.000s is 1.579e-07 s/call 157.9 ns/call
ps_replace 31432800 calls in 5.000s is 1.591e-07 s/call 159.1 ns/call
The tests are explained elsewhere, but I will repeat the details if
you like. The first two are modelled on B L Massingill's test data
(for comparison).
<snip code>