ナイトリー版では正式採用されていない不安定な機能を試用できる。

ナイトリー版の導入

ここで紹介する方法はどれもナイトリー版の有効化が必要になる。

有効化の方法については『バージョンの切替』を参照されたい。

API や文法の試用

stdcore の新しい API、そして新しい文法は feature 属性から導入できる。

新しい API の場合、機能名は rustdoc の対応するアイテムに載っている。

新しい文法の場合、機能名は “The Unstable Book” の該当ページに載っている。

サンプル - API の試用

以下では、不安定な機能 allocator_api を有効化している。
これにより、Box::try_new が使えるようになる。


#![feature(allocator_api)]

fn main() {
    let Ok(new_box) = Box::try_new(42) else {
        println!("Out of memory error!");
        return;
    };

    println!("Box {new_box} is allocated.")
}

サンプル - 文法の試用

以下では、不安定な機能 try_blocks を有効化している。
これにより、try キーワードを使えるようになる。


#![feature(try_blocks)]

use std::num::ParseIntError;

fn main() {
    let result: Result<i32, ParseIntError> = try {
        "1".parse::<i32>()?
            + "2".parse::<i32>()?
            + "3".parse::<i32>()?
    };
    assert_eq!(result, Ok(6));

    let result: Result<i32, ParseIntError> = try {
        "1".parse::<i32>()?
            + "foo".parse::<i32>()?
            + "3".parse::<i32>()?
    };
    assert!(result.is_err());
}

処理系統の試用

新しい処理系統は rustflags オプションから導入できる。

このオプションは本来は各種のコンパイルの挙動の調整用だが、新しい処理系統の開発にも流用されているようである。ただ、使用可能な機能名を一覧にした公式の資料は見つけられなかった。おそらく、コンパイラの開発段階で非公式に導入されるためだろう。ちなみに、筆者が知っているのは以下の二つである。

polonius
新しい借用チェッカー [1]
next-solver
新しいトレイトソルバー [2]

rustflags オプションは .cargo/config.toml ファイルからも指定できる。
これは IDE からビルドする場合には必須になる。

サンプル

以下は .cargo/config.toml ファイルで Polonius を有効化する場合の内容である。


[build]
rustflags = ["-Zpolonius"]