LoginSignup
29
12

More than 3 years have passed since last update.

Rustのconst fnの制限がさらに緩和された(Rust 1.46.0)

Posted at

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回ループみたいなことはwhileletで代用できます。

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

29
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
29
12