Son kullanma tarihi geçmiş, bayatlamış bir tarayıcı kullanıyorsanız, Mercedes kullanmak yerine tosbağaya binmek gibi... Web sitelerini düzgün görüntüleyemiyorsanız eh, bi' zahmet tarayıcınızı güncelleyiniz. Modern Web standartlarını karşılayan bir tarayıcı alternatifine göz atın.
Invariant bir konumda bile unsize coercion yapılırken &mut yaşam süresinin kısaltılmasına izin verildi. Örneğin artık Cell<&'long mut i32>, Cell<&'short mut dyn Send> türüne dönüştürülebiliyor. Bu tür kısaltmalara daha önce &mut türünden & türüne veya & türünden & türüne coercion yapılırken zaten izin veriliyordu.
Varsayılan olarak deny düzeyindeki invalid_runtime_symbol_definitions lint'i ve varsayılan olarak warn düzeyindeki suspicious_runtime_symbol_definitions lint'i eklendi.
Lint'ler şu anda özellikle memcmp, memset ve strlen gibi temel çalışma zamanı sembollerini hedefliyor ve kapsamlarının önümüzdeki birkaç sürümde genişletilmesi planlanıyor.
Dönüş türü olarak core::ffi::c_void kullanımını denetlemek için varsayılan olarak warn düzeyindeki c_void_returns lint'i eklendi.
Platform Desteği
powerpc64-unknown-linux-gnuelfv2, Tier 3 olarak eklendi.
aarch64-unknown-linux-pauthtest, Tier 3 hedefi olarak eklendi.
Rust'ın kademeli platform desteği hakkında daha fazla bilgi için Rust'ın platform desteği sayfasına bakın.
Kütüphaneler
Panic[Hook]Info içindeki Location<'_> yaşam süresi 'static olarak değiştirildi.
RangeInclusive::from(legacy::RangeInclusive) içindeki panic durumu belgelendi.
ManuallyDrop'un Box ile etkileşimindeki sorunun düzeltildiği belgelendi.
LoongArch CRC intrinsics kararlı hâle getirildi.
derive makrosu {core,std}::derive konumunda kullanılabilir hâle geldi. Bu API daha önce 1.96'da istemeden kararlı hâle getirilmişti ancak artık kararlı bir API olarak açıkça kabul edildi.
{core,std}::derive için MSRV'nin 1.98 değil, 1.96 olacağını unutmayın.
Kararlı Hâle Getirilen API'ler
str::substr_range
[T]::subslice_range
core::fmt::NumBuffer
<{integer}>::format_into
std:rocess::CommandArgs için Send/Sync
{fN}::algebraic_add
{fN}::algebraic_sub
{fN}::algebraic_mul
{fN}::algebraic_div
{fN}::algebraic_rem
NonZero<{integer}>::from_str_radix
String::from_utf16le
String::from_utf16le_lossy
String::from_utf16be
String::from_utf16be_lossy
[T]::strip_circumfix
str::strip_circumfix
Atomic<T>::from_mut
Atomic<T>::get_mut_slice
Atomic<T>::from_mut_slice
std::range::legacy
Uyumluluk Notları
Tamamen elide edilmiş trait object türlerinin yaşam süresi sınırları artık çok özel ve nadir senaryolarda farklı çözümlenebilir veya tamamen reddedilebilir.
Belirsiz import'lar artık daha fazla durumda hata oluşturuyor.
Windows'ta thread-local destructor uygulaması Fiber Local Storage (FLS) kullanacak şekilde değiştirildi.
ambiguous_glob_imports lint'inin bazı durumları doğrudan hataya dönüştürüldü.
Type = Type ve Type == Type biçimindeki where sınırlarına artık sözdizimsel olarak izin verilmiyor.
std::env::Vars{,Os} için Send/Sync uygulanmaması sağlandı.
Bazı attribute'larda argümanların düzgün şekilde reddedilmemesi sorunu düzeltildi.
repr(transparent), hangi alanların "trivial" yerleşime sahip sayılarak yok sayılabileceği konusunda artık daha katı. repr(C) türleri, private alanlara sahip türler ve #[non_exhaustive] türleri artık "trivial" kabul edilmiyor.
Bazı repr attribute'ları söz konusu olduğunda transmute() içinde türlerin eşit boyutta olup olmadığı artık doğru şekilde denetleniyor.
String ve char değerleri yazdırılırken daha fazla karakter escape ediliyor.
Ord derive edilirken derive(PartialOrd) için hızlı yol uygulandı. Bu değişiklik, bir türün PartialOrd ve Ord implementasyonlarının birbiriyle tutarsız olduğu crate'leri pratikte bozabilir.
assert_eq ve assert_ne için geçici scope eklendi.
Pattern matching yapısal eşitlik kontrolündeki bir açık kapatıldı. Böylece aynı tür için derive(PartialEq) implementasyonu da mevcutken elle yazılmış PartialEq implementasyonuyla uyuşmamasına rağmen bir sabitin eşleşmesine izin verilen durumlar engellendi.
Emscripten'de artık WASM exception handling ABI koşulsuz olarak kullanılıyor. JS exception'larına geri dönmek için kullanılan -Zemscripten-wasm-eh=false bayrağı kaldırıldı.
UNSAFE_CODE lint'i artık tüm unsafe attribute'lar için tutarlı şekilde oluşturuluyor.
Solaris'te File::lock implementasyonu yanlış semantiğe sahip olduğu için kaldırıldı; bunun yerine "unsupported" döndürülecek.
Windows-gnu hedefleri artık temel araç sürümlerini belirtiyor.
rustfmt artık cfg_select! içinde tanımlanan modül dosyalarını keşfediyor. Bu nedenle daha önce yok sayılan daha fazla kod biçimlendirilebilir.
Panic[Hook]Info içindeki Location<'_> yaşam süresi 'static olarak değiştirildi.
LLVM optimizasyonlarından kaynaklanan rustc yanlış derleme sorunu düzeltildi. Bunun için düzeltmeyi içeren LLVM alt modülü güncellendi ve hatayı tetikleyebilen rustc değişikliği geri alındı.
Rust artık varsayılan olarak v0 sembol adlandırma düzenini kullanıyor. Bu durum eski hata ayıklayıcılar ve profiler gibi bazı araçların sembolleri çözememesine ve geri izleme çıktılarının biçiminin değişmesine neden olabilir.
Güvenlik sorunlarını önlemek amacıyla pin! içinde deref dönüşümleri engellendi.
std::char sabitleri ve işlevleri kullanımdan kaldırıldı.
Bağlayıcı (linker) çıktıları artık varsayılan olarak uyarı veriyor.
1.0 sürümünden beri kullanımdan kaldırılmış gizli f64 yöntemleri kaldırıldı.
varargs_without_pattern lint'i artık bağımlılıklarda da raporlanıyor.
Modül genel tür parametrelerini yeniden dışa aktarsa bile modül yol bölümlerine genel tür parametresi verilmesi artık yasaklandı.
Geçersiz Mach-O link_section belirticileri artık hata oluşturuyor.
Yerleşim garantisi olmayan bazı enum'ların kodlama biçimi değiştirildi.
#[export_name = "..."] özniteliğinde boş ad kullanılması artık hata oluşturuyor.
Yapı desenlerinde tuple indeks kısayolları artık sözdizimsel olarak reddediliyor.
#[link_name = "..."] ve #[link(name = "...")] parametreleri artık doğrulanıyor.
Windows'ta bir soketin yazma tarafı shutdown ile kapatıldıktan sonra aynı sokete yazma girişimleri artık Other yerine BrokenPipe hatası döndürüyor.
Lint ve Uyumluluk:unused_visibilities artık varsayılan olarak uyarı veriyor. impl öğeleri, bağlı oldukları trait'lerin dead_code lint seviyesini devralıyor.
Unicode 17: Dil standartları en son Unicode 17 sürümüne güncellendi.
Kapanışlar (Closures):** Kapanışların değişkenleri yakalama (capturing) mekanizması daha tutarlı ve doğru hale getirildi; hatalı yaşam süresi (lifetime) çakışmaları engellendi.
Platform ve Mimari Desteği
RISC-V:** riscv64im-unknown-none-elf hedefi (tier 3) eklendi. Ayrıca RVA22U64 ve RVA23U64 profilleri için 29 yeni hedef özellik stabilize edildi.
Stabilize Edilen API'ler
Koleksiyon ve Bellek:array_windows, element_offset ve LazyCell/LazyLock (get/get_mut/force_mut) artık kararlı.
Matematiksel Sabitler:** EULER_GAMMA ve GOLDEN_RATIO (f32/f64) eklendi.
[*] Const Desteği:** f32::mul_add ve f64::mul_add artık const bağlamlarında kullanılabilir.
[*] Donanım Intrinsics:** x86 AVX512fp16 ve AArch64 NEON fp16 komut setleri (f16 tipi hariç) stabilize edildi.
Cargo Güncellemeleri
Yapılandırma:** include anahtarı stabilize edildi; artık projeler arası konfigürasyon paylaşımı çok daha kolay.
[*] Kayıt:** pubtime alanı eklendi (paketlerin yayınlanma zamanını tutar).
[*] TOML v1.1:** Cargo artık TOML v1.1 formatını tam destekliyor.
Uyumluluk ve Dikkat Edilmesi Gerekenler
Makro İçe Aktarma:** Standart kütüphane makroları artık #[macro_use] yerine doğrudan prelude üzerinden içe aktarılıyor. Benzer isimli makrolar için çakışma uyarısı alabilirsiniz.
[*] Path/Yol İşleme:** Derleyicinin ürettiği yollar artık mutlak (absolute) değil, --remap-path-prefix ile uyumlu ve göreceli (relative) formatta sunuluyor.
[*] Windows Zamanı:** SystemTime::checked_sub_duration, Windows epoch öncesi (1601 öncesi) tarihler için None döndürecek şekilde güncellendi.