Unnamed repository; edit this file 'description' to name the repository.
Rollup merge of #158053 - niklasf:perf/addr-parser, r=workingjubilee
Optimize network address parser
Motivated by working with datasets of IP addresses.
First commit adds more examples for each case in the benchmark suite.
Second commit splits `read_number()` into seperate methods for the the `max_digits` `Some(_)` and `None` cases, which by itself significantly helps code generation.
Hoist reading the first digit which is always required.
The path for unlimited digits then no longer has to count digits at all.
Drive-by "fixes" the 10 digit debug assertion (which would be insufficient in base 16). Not actually used anywhere near the limit.
`./x bench library/coretests --test-args addr_parser` before -> after on AMD Ryzen 9 9950X:
net::addr_parser::bench_parse_ipaddr_v4 81.73ns/iter +/- 0.60 -> 62.36ns/iter +/- 0.12
net::addr_parser::bench_parse_ipaddr_v6_compress 303.70ns/iter +/- 1.29 -> 212.80ns/iter +/- 1.25
net::addr_parser::bench_parse_ipaddr_v6_full 453.06ns/iter +/- 7.89 -> 294.88ns/iter +/- 0.91
net::addr_parser::bench_parse_ipaddr_v6_v4 301.41ns/iter +/- 1.52 -> 224.82ns/iter +/- 0.99
net::addr_parser::bench_parse_ipv4 87.24ns/iter +/- 0.32 -> 52.94ns/iter +/- 0.33
net::addr_parser::bench_parse_ipv6_compress 277.92ns/iter +/- 3.29 -> 195.98ns/iter +/- 1.10
net::addr_parser::bench_parse_ipv6_full 402.48ns/iter +/- 22.20 -> 276.37ns/iter +/- 4.05
net::addr_parser::bench_parse_ipv6_v4 276.78ns/iter +/- 1.18 -> 216.04ns/iter +/- 1.20
net::addr_parser::bench_parse_socket_v4 105.18ns/iter +/- 0.79 -> 69.20ns/iter +/- 0.46
net::addr_parser::bench_parse_socket_v6 378.69ns/iter +/- 5.25 -> 274.82ns/iter +/- 0.95
net::addr_parser::bench_parse_socket_v6_scope_id 336.61ns/iter +/- 2.36 -> 258.56ns/iter +/- 0.89
net::addr_parser::bench_parse_socketaddr_v4 118.20ns/iter +/- 0.66 -> 78.86ns/iter +/- 0.22
net::addr_parser::bench_parse_socketaddr_v6 429.17ns/iter +/- 5.70 -> 315.69ns/iter +/- 1.48