ナイトリー版では正式採用されていない不安定な機能を試用できる。
ここで紹介する方法はどれもナイトリー版の有効化が必要になる。
有効化の方法については『バージョンの切替』を参照されたい。
std
や core
の新しい API、そして新しい文法は feature
属性から導入できる。
新しい API の場合、機能名は rustdoc の対応するアイテムに載っている。
新しい文法の場合、機能名は “The Unstable Book” の該当ページに載っている。
以下では、不安定な機能 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
オプションから導入できる。
このオプションは本来は各種のコンパイルの挙動の調整用だが、新しい処理系統の開発にも流用されているようである。ただ、使用可能な機能名を一覧にした公式の資料は見つけられなかった。おそらく、コンパイラの開発段階で非公式に導入されるためだろう。ちなみに、筆者が知っているのは以下の二つである。
rustflags
オプションは .cargo/config.toml
ファイルからも指定できる。
これは IDE からビルドする場合には必須になる。
以下は .cargo/config.toml
ファイルで Polonius を有効化する場合の内容である。
[build]
rustflags = ["-Zpolonius"]