Help us understand the problem. What is going on with this article?

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

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

block
Game/Game Programming/C++/Rust/C#
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away