2月8日、Rustチームは新バージョン、1.76.0を発表した。
既存のRustバージョンをrustupを使用してインストールしている場合は、次のコマンドで1.76.0にアップデートできる:
rustup update stable
1.76.0の安定版に含まれる主な変更点
このリリースは比較的小規模なものだ。今回のリリースに含まれるいくつかの変更点を以下で紹介する。
ABI互換性の更新
ABI互換性に関するドキュメントが更新され、関数シグネチャがABI互換であることの説明と、char
とu32
がABI互換であることが今後も保証されるという記述が追加された。これらは常に同じサイズとアライメントを持っていたが、今後は関数呼び出しのABIでも同等と見なされる。
参照からの型名
any::type_name::<T>()
はRust 1.38以降、デバッグ目的で利用可能で、型T
の文字列説明を返していたが、これには明示的な型パラメータが必要だった。
新たに追加された関数 type_name_of_val(&T)
は、任意の参照から型のラベルを取得する方法を提供します。
fn get_iter() -> impl Iterator<Item = i32> {
[1, 2, 3].into_iter()
}
fn main() {
let iter = get_iter();
let iter_name = std::any::type_name_of_val(&iter);
let sum: i32 = iter.sum();
println!("`{iter_name}`の合計は{sum}です。");
}
これは現在、次のように出力されます:
`core::array::iter::IntoIter<i32, 3>`の合計は6です。
安定化されたAPI
以下のAPIがステーブルになった。
Arc::unwrap_or_clone
Rc::unwrap_or_clone
Result::inspect
Result::inspect_err
Option::inspect
type_name_of_val
std::hash::{DefaultHasher, RandomState}
ptr::{from_ref, from_mut}
ptr::addr_eq
すべての変更点は、Rust、Cargo、およびClippyに記載されている。
この記事に関する詳細はAnnouncing Rust 1.76.0 を参照して頂きたい。