rust/library/core/src/str
bors 86bd45979a Auto merge of #130223 - LaihoE:faster_str_replace, r=thomcc
optimize str.replace

Adds a fast path for str.replace for the ascii to ascii case. This allows for autovectorizing the code. Also should this instead be done with specialization? This way we could remove one branch. I think it is the kind of branch that is easy to predict though.

Benchmark for the fast path (replace all "a" with "b" in the rust wikipedia article, using criterion) :
| N        | Speedup | Time New (ns) | Time Old (ns) |
|----------|---------|---------------|---------------|
| 2        | 2.03    | 13.567        | 27.576        |
| 8        | 1.73    | 17.478        | 30.259        |
| 11       | 2.46    | 18.296        | 45.055        |
| 16       | 2.71    | 17.181        | 46.526        |
| 37       | 4.43    | 18.526        | 81.997        |
| 64       | 8.54    | 18.670        | 159.470       |
| 200      | 9.82    | 29.634        | 291.010       |
| 2000     | 24.34   | 81.114        | 1974.300      |
| 20000    | 30.61   | 598.520       | 18318.000     |
| 1000000  | 29.31   | 33458.000     | 980540.000    |
2024-10-17 16:20:02 +00:00
..
converts.rs update bootstrap configs 2024-10-15 20:30:23 -07:00
count.rs Add blank lines after module-level //! comments. 2024-06-20 09:23:20 +10:00
error.rs add FIXME(const-hack) 2024-09-08 23:08:40 +02:00
iter.rs Reformat using the new identifier sorting from rustfmt 2024-09-22 19:11:29 -04:00
lossy.rs Utf8Chunks: add link to Utf8Chunk 2024-09-25 19:46:41 +02:00
mod.rs update bootstrap configs 2024-10-15 20:30:23 -07:00
pattern.rs Add fast path for ascii to ascii in str::replace 2024-09-23 19:24:06 +03:00
traits.rs remove const_slice_index annotations, it never had a feature gate anyway 2024-09-08 23:08:43 +02:00
validations.rs Reformat use declarations. 2024-07-29 08:26:52 +10:00