Rust 1.96.0 Yayınlandı: Yeni Range Türleri ve Güvenlik Yamaları
Rust 1.96.0, Copy destekli yeni core::range türleri, assert_matches! makrosu, WebAssembly linker değişiklikleri ve iki Cargo güvenlik yamasıyla geldi.
Rust ekibi, dilin 1.96.0 sürümünü duyurdu. Bu sürümün en dikkat çekici yeniliği, RFC3550 kapsamında stabilize edilen core::range::Range, RangeFrom ve RangeInclusive türleri. Mevcut Range tipleri Iterator uyguladığı için Copy olamıyordu; yeni türler bunun yerine IntoIterator uyguluyor ve böylece Copy olarak işaretlenebiliyor. Bu, slice erişimlerini start/end alanlarına bölmeden Copy yapılarda saklamayı mümkün kılıyor. Klasik 0..1 sözdizimi şimdilik eski türleri üretmeye devam ediyor, ancak gelecekteki bir edition'da yeni range türlerine geçecek.
Sürüm ayrıca assert_matches! ve debug_assert_matches! makrolarını kararlı hale getiriyor. Bunlar assert!(matches!(..)) ile aynı işlevi görse de başarısızlık durumunda değerin Debug temsilini yazdırarak hata ayıklamayı kolaylaştırıyor. Üçüncü parti crate'lerle isim çakışmasını önlemek için bu makrolar standart prelude'a eklenmedi, manuel import gerektiriyor.
WebAssembly hedeflerinde önemli bir davranış değişikliği de var: linker artık --allow-undefined bayrağını varsayılan olarak geçirmiyor, yani tanımsız semboller artık sessizce env modülünden import'a dönüştürülmek yerine linker hatasına yol açıyor. Bu, build zamanı hatalarını ve sembol isimlendirme sorunlarını daha erken yakalamayı sağlıyor; eski davranış RUSTFLAGS veya #[link(wasm_import_module)] ile geri açılabiliyor. Ayrıca sürüm, üçüncü parti registry kullanıcılarını ilgilendiren iki Cargo güvenlik açığını (symlink içeren tarball çıkarma ve normalize edilmiş URL'lerle kimlik doğrulama) düzeltiyor; crates.io kullanıcıları bu açıklardan etkilenmiyor.
Bu değişiklikler, kütüphane geliştiricilerinin API tasarımını ve WebAssembly hedefleyen projelerin build süreçlerini doğrudan etkiliyor; özellikle range tabanlı Copy yapılar ve linker hata ayıklaması açısından mühendisler için pratik faydalar sunuyor.