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 ASCIIchar
s, 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
&str
is 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')
.)