Rustのconst fnの制限が緩和された
Rust 1.33.0でconst fn
の制限が少しだけ緩和されました。
const fn
の引数にtupleを受け取れるようになった
const fn foo((x, y): (u8, u8)) { ... }
ということができるようになった。
そもそもできないことを知らなかったです。
1.32.0でコンパイルしてみたところ
local variables in const fn are unstable
というエラーが出たのでローカル変数と同じ扱いだったんだと思います。
ローカル変数を使えるようになった
関数内で変数を宣言できるようになりました。
fn foo() {
let a = 0;
}
最高
mut
変数も使用できるようになった
当然代入もできる。
fn foo() {
let mut a = 0;
a = 1;
}
その他
x += y
, x[3] = 42
のような変数に変更を加える演算子も使用可能になりました。
const fn
の中でconst unsafe fn
の呼び出しが可能になった
下記のようなことが可能になりました。
const unsafe fn foo() -> i32 { 5 }
const fn bar() -> i32 {
unsafe { foo() }
}
感想
だいぶ使いやすくなりました。
次は条件分岐とかループとか対応してほしい。
for
以外使えるようになりました。
Rustのconst fnの制限がさらに緩和された(Rust 1.46.0)
これらの変更によって標準ライブラリの多くの関数がconst fn
になったようです。
元の文や標準ライブラリの変更が気になる方は下記を見てください。
https://github.com/rust-lang/rust/blob/stable/RELEASES.md#version-1330-2019-02-28