Rustのconst fn
Rustのconst fnでabs
Rustのconst fnの制限が緩和された(Rust 1.33.0)
Rust 1.39.0でabsがconst fnになる
上記の記事の関連・続きみたいなものです。
Rustのconst fnの制限がさらに緩和された
Rust 1.46.0でconst fnの制限が更に緩和されました。
変更内容
下記が使用できるようになりました
– if, if let, match
– while, while let, loop
– &&演算子, ||演算子
forは使用できないままですが変数は使用できるのでほぼ普通の関数と変わらない書き方ができるようになりました。
forは使用できない
上で書きましたがforは使用できません。
しかし変数は使用できるのでn回ループみたいなことはwhileとletで代用できます。
1~10までの合計を返す
const fn foo() -> i32 {
let mut i = 1;
let mut sum = 0;
while i <= 10 {
sum += i;
i += 1;
}
sum
}
引数で渡されたスライスの要素の合計を返す
const fn sum(a: &[i32]) -> i32 {
let len = a.len();
let mut i = 0;
let mut s = 0;
while i < len {
s += a[i];
i += 1;
}
s
}
absを書いてみる
過去にabsを書いていたので1.46.0でどうなったのか書きます
const fn abs(value: i32) -> i32 {
if value >= 0 {
value
} else {
-value
}
}
普通の関数と変わらないです。
所感
ほぼ普通の関数と変わらない書き方ができるようになってきました。
シンプルな関数ならとりあえずconstつけといても困らないんじゃないでしょうか?
1.31.0や1.39.0のときみたいな苦労・工夫をしなくていいのはありがたいです。
参考
Announcing Rust 1.46.0
Rust 1.46を早めに深掘り – OPTiM TECH BLOG