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_until
ControlFlow::break_value
ControlFlow::continue_value
ControlFlow::map_break
ControlFlow::map_continue
DebugList::finish_non_exhaustive
DebugMap::finish_non_exhaustive
DebugSet::finish_non_exhaustive
DebugTuple::finish_non_exhaustive
ErrorKind::ArgumentListTooLong
ErrorKind::Deadlock
ErrorKind::DirectoryNotEmpty
ErrorKind::ExecutableFileBusy
ErrorKind::FileTooLarge
ErrorKind::HostUnreachable
ErrorKind::IsADirectory
ErrorKind::NetworkDown
ErrorKind::NetworkUnreachable
ErrorKind::NotADirectory
ErrorKind::NotSeekable
ErrorKind::ReadOnlyFilesystem
ErrorKind::ResourceBusy
ErrorKind::StaleNetworkFileHandle
ErrorKind::StorageFull
ErrorKind::TooManyLinks
Option::get_or_insert_default
Waker::data
Waker::new
Waker::vtable
char::MIN
hash_map::Entry::insert_entry
hash_map::VacantEntry::insert_entry
3. その他の変更
Rust本体だけでなく、CargoやClippyといった関連ツールにも改良が加えられている。すべての変更点については以下のリンクを参照されたい。
詳細はAnnouncing Rust 1.83.0を参照していただきたい。