11月29日、Rust開発チームは、プログラミング言語Rustの新バージョン1.83.0を公開した。
今回のリリースにより、新たな機能や改良が多数追加された。本記事では、その主要な内容を以下にまとめる。
1. 新たなconstの機能
Rust 1.83.0では、コンパイル時に評価されるconstコンテキスト内で利用可能な機能が大幅に拡張された。以下はその具体例である。
staticへの参照の許可
これまで、constコンテキスト内でstatic項目を参照することは許されなかったが、この制限が解除された。ただし、ミュータブルなstaticや内部可変なstaticの値を読み取ることは依然として禁止されている。
static S: i32 = 25;
const C: &i32 = &S;
ミュータブルなstaticに対する参照を扱う場合はエラーとなるが、未評価の生ポインタとしてなら許可される。
static mut S: i32 = 64;
const C: *mut i32 = &raw mut S;
ミュータブルな参照とポインタの使用
const関数内でミュータブルな参照を操作できるようになった。
const fn inc(x: &mut i32) {
*x += 1;
}
const C: i32 = {
let mut c = 41;
inc(&mut c);
c
};
ミュータブルな参照やポインタは、定数の最終的な値に含めることはできないが、計算過程で使用可能である。
const C: &mut i32 = &mut 4;
// エラー: 定数の最終値にミュータブルな参照を含めることはできない
2. 安定化されたAPI
以下の多くのAPIが安定化され、本番環境でも問題なく動作するようになった。
BufRead::skip_untilControlFlow::break_valueControlFlow::continue_valueControlFlow::map_breakControlFlow::map_continueDebugList::finish_non_exhaustiveDebugMap::finish_non_exhaustiveDebugSet::finish_non_exhaustiveDebugTuple::finish_non_exhaustiveErrorKind::ArgumentListTooLongErrorKind::DeadlockErrorKind::DirectoryNotEmptyErrorKind::ExecutableFileBusyErrorKind::FileTooLargeErrorKind::HostUnreachableErrorKind::IsADirectoryErrorKind::NetworkDownErrorKind::NetworkUnreachableErrorKind::NotADirectoryErrorKind::NotSeekableErrorKind::ReadOnlyFilesystemErrorKind::ResourceBusyErrorKind::StaleNetworkFileHandleErrorKind::StorageFullErrorKind::TooManyLinksOption::get_or_insert_defaultWaker::dataWaker::newWaker::vtablechar::MINhash_map::Entry::insert_entryhash_map::VacantEntry::insert_entry
3. その他の変更
Rust本体だけでなく、CargoやClippyといった関連ツールにも改良が加えられている。すべての変更点については以下のリンクを参照されたい。
詳細はAnnouncing Rust 1.83.0を参照していただきたい。