Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Auto merge of #39356 - krdln:format-with-capacity, r=aturon
Use `String::with_capacity` in `format!` Add an `Arguments::estimated_capacity` to estimate the length of formatted text and use it in `std::fmt::format` as the initial capacity of the buffer. The capacity is calculated based on the literal parts of format string, see the details in the implementation. Some benches: ```rust empty: format!("{}", black_box("")) literal: format!("Literal") long: format!("Hello Hello Hello Hello, {}!", black_box("world")) long_rev: format!("{}, hello hello hello hello!", black_box("world")) long_rev_2: format!("{}{}, hello hello hello hello!", 1, black_box("world")) short: format!("Hello, {}!", black_box("world")) short_rev: format!("{}, hello!", black_box("world")) short_rev_2: format!("{}{}, hello!", 1, black_box("world")) surround: format!("aaaaa{}ccccc{}eeeee", black_box("bbbbb"), black_box("eeeee")) two_spaced: format!("{} {}", black_box("bbbbb"), black_box("eeeee")) worst_case: format!("{} a long piece...", black_box("and even longer argument. not sure why it has to be so long")) ``` ``` empty 25 28 3 12.00% literal 35 29 -6 -17.14% long 80 46 -34 -42.50% long_rev 79 45 -34 -43.04% long_rev_2 111 66 -45 -40.54% short 73 46 -27 -36.99% short_rev 74 76 2 2.70% short_rev_2 107 108 1 0.93% surround 142 65 -77 -54.23% two_spaced 111 115 4 3.60% worst_case 89 101 12 13.48% ```
- Loading branch information