Constify [u8]::is_ascii (unstably)#111222
Conversation
UTF-8 checking in `const fn`-stabilized back in 1.63, but apparently somehow ASCII checking was never const-ified, despite being simpler.
|
(rustbot has picked a reviewer for you, use r? to override) |
|
Hey! It looks like you've submitted a new PR for the library teams! If this PR contains changes to any Examples of
|
|
LGTM |
library/core/src/slice/ascii.rs
Outdated
| // FIXME: once iterators and closures can be used in `const fn`, | ||
| // return s.iter().all(|b| b.is_ascii()); | ||
| let mut i = 0; | ||
| while i < len { |
There was a problem hiding this comment.
Instead of having to maintain an index, you could also use slice patterns to fake iteration:
while let [next, rest @ ..] = slice {
slice = rest;
}There was a problem hiding this comment.
Well, you got me curious, so I tuned the heck out of it.
Looks like going backwards is the best in both LLVM and cg_gcc: https://rust.godbolt.org/z/K1rKs1T4d
Constify `[u8]::is_ascii` (unstably) UTF-8 checking in `const fn`-stabilized back in 1.63 (rust-lang#97367), but apparently somehow ASCII checking was never const-ified, despite being simpler. New constness-tracking issue for `is_ascii`: rust-lang#111090 I noticed this working on `ascii::Char`: rust-lang#110998
9de3d01 to
c8c5a58
Compare
|
Ok, I think I've fixed up the test. I'll iffy it just in case. |
|
☀️ Test successful - checks-actions |
|
Finished benchmarking commit (613a5c9): comparison URL. Overall result: no relevant changes - no action needed@rustbot label: -perf-regression Instruction countThis benchmark run did not return any relevant results for this metric. Max RSS (memory usage)ResultsThis is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.
CyclesResultsThis is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.
Binary sizeThis benchmark run did not return any relevant results for this metric. Bootstrap: 653.81s -> 654.562s (0.12%) |
|
Hah, I had a precursor in #104126, though this one's much nicer. I'll keep that one open for |
|
Oh, sorry @coolreader18 -- I didn't even think to look if someone had already done it. |
|
No worries! I'm glad it's now possible to do it where const_eval_select isn't necessary |
UTF-8 checking in
const fn-stabilized back in 1.63 (#97367), but apparently somehow ASCII checking was never const-ified, despite being simpler.New constness-tracking issue for
is_ascii: #111090I noticed this working on
ascii::Char: #110998