[libc++][format] Implements P3107R5 in <print>.
The followup paper P3235R3 which is voted in as a DR changes the names
foo_locking to foo_buffered. These changes have been applied in this
patch.
Before
-------------------------------------------------------
Benchmark Time CPU Iterations
-------------------------------------------------------
printf 71.3 ns 71.3 ns 9525175
print_string 226 ns 226 ns 3105850
print_stack 232 ns 232 ns 3026498
print_direct 530 ns 530 ns 1318447
After
-------------------------------------------------------
Benchmark Time CPU Iterations
-------------------------------------------------------
printf 70.6 ns 70.6 ns 9789585
print_string 222 ns 222 ns 3147678
print_stack 227 ns 227 ns 3084767
print_direct 474 ns 474 ns 1472786
Note: The performance of libc++'s std::print is still extemely slow
compared to printf. Based on P3107R5 std::print should outperform
printf. The main culprit is the call to isatty, which is resolved
after implementing
LWG4044 Confusing requirements for std::print on POSIX platforms
Implements
- P3107R5 - Permit an efficient implementation of ``std::print``
Implements parts of
- P3235R3 std::print more types faster with less memory
Fixes: #105435
UnifiedSplitRaw