-
Notifications
You must be signed in to change notification settings - Fork 784
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Make various i256 methods const #3026
Conversation
const fn split_array(vals: [u8; 32]) -> ([u8; 16], [u8; 16]) { | ||
let mut a = [0; 16]; | ||
let mut b = [0; 16]; | ||
let mut i = 0; | ||
while i != 16 { | ||
a[i] = vals[i]; | ||
b[i] = vals[i + 16]; | ||
i += 1; | ||
} | ||
(a, b) | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Doesn't this have new memory allocation?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Arrays are stack allocated, and in practice the compiler will optimise all of this away
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In fact it does a better job optimising it than the old TryInto based approach - https://rust.godbolt.org/z/f6jj3PM9c
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I see. That's good point.
Benchmark runs are scheduled for baseline = e2c4199 and contender = 53b7f64. 53b7f64 is a master commit associated with this PR. Results will be available as each benchmark for each run completes. |
Which issue does this PR close?
Closes #.
Rationale for this change
Help with #3025 among others
What changes are included in this PR?
Tweaks various methods to make the const
This makes use of const support for loops added stabilised in 1.46 - https://blog.rust-lang.org/2020/08/27/Rust-1.46.0.html#const-fn-improvements, which is well under our MSRV which appears to be 1.62!
Are there any user-facing changes?
No