Add an ASCII (single-byte) fast path in String::push
#20079
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
String::push(&mut self, ch: char)currently has a single code path that callsChar::encode_utf8. This adds a fast path for ASCIIchars, which are represented as a single byte in UTF-8.Benchmarks of stage1 libcollections at the intermediate commit show that the fast path very significantly improves the performance of repeatedly pushing an ASCII
char, but does not significantly affect the performance for a non-ASCIIchar(where the fast path is not taken).A benchmark of pushing a one-byte-long
&stris added for comparison, but its performance has varied a lot lately. (When the input is fixed,s.push_str("x")could be used just as well ass.push('x').)