6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Rustのconst fnの制限が緩和された(Rust 1.33.0)

Last updated at Posted at 2019-03-19

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


1.31.0の時の話

6
4
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
6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?