Hata Düzeltmeleri​

  • rustc'de vtable oluşturulurken hatalı derlemeye neden olan sorun düzeltildi.

Dil​

  • 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.
  • thumbv7a-none-eabi, Tier 2 seviyesine yükseltildi.
  • thumbv7a-none-eabihf, Tier 2 seviyesine yükseltildi.
  • thumbv7r-none-eabi, Tier 2 seviyesine yükseltildi.
  • thumbv7r-none-eabihf, Tier 2 seviyesine yükseltildi.
  • thumbv8r-none-eabihf, Tier 2 seviyesine yükseltildi.
  • 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::process::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.

Hata Düzeltmeleri​

  • 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ı.
Dil
  • must_use lint'i için Result<T, Uninhabited> ve ControlFlow<Uninhabited, T> türleri T ile eşdeğer kabul ediliyor.
  • Binary crate'lerde kullanılmayan pub öğeleri için varsayılan olarak izin verilen dead_code_pub_in_binary lint'i eklendi.
  • div32, lam-bh, lamcas, ld-seq-sa ve scq hedef özellikleri kararlı hâle getirildi.
  • cfg(target_has_atomic_primitive_alignment) kararlı hâle getirildi.
  • Import ifadelerinde sona yazılan self daha fazla durumda destekleniyor.


Platform Desteği
  • nvptx64-nvidia-cuda hedefinde eski mimariler ve eski ISA'lar için destek kaldırıldı.


Kararlı Hâle Getirilen API'ler
  • RepeatN için Default desteği kararlı hâle getirildi.
  • ffi::FromBytesUntilNulError için Copy desteği kararlı hâle getirildi.
  • UEFI üzerinde std::fs::File için Send desteği kararlı hâle getirildi.
  • <{integer}>::isolate_highest_one kararlı hâle getirildi.
  • <{integer}>::isolate_lowest_one kararlı hâle getirildi.
  • <{integer}>::highest_one kararlı hâle getirildi.
  • <{integer}>::lowest_one kararlı hâle getirildi.
  • <{integer}>::bit_width kararlı hâle getirildi.
  • NonZero<{integer}>::isolate_highest_one kararlı hâle getirildi.
  • NonZero<{integer}>::isolate_lowest_one kararlı hâle getirildi.
  • NonZero<{integer}>::highest_one kararlı hâle getirildi.
  • NonZero<{integer}>::lowest_one kararlı hâle getirildi.
  • NonZero<{integer}>::bit_width kararlı hâle getirildi.
  • char::is_control artık const bağlamlarında da kararlı olarak kullanılabiliyor.


Cargo
  • build.warnings yapılandırması kararlı hâle getirildi.
  • resolver.lockfile-path yapılandırması kararlı hâle getirildi.
  • cargo clean artık --target-dir geçerli bir Cargo hedef dizini görünmüyorsa hata vererek yanlış dizinlerin silinmesini önlüyor.
  • --manifest-path için -m kısa seçeneği eklendi.
  • crates-io crate'inden curl bağımlılığı kaldırıldı.


Rustdoc
  • --emit seçeneği kararlı hâle getirildi.
  • --remap-path-prefix seçeneği kararlı hâle getirildi.

Uyumluluk Notları
  • f32: From<{float}> kullanılarak {float} türünün sınırlandırılmasına güvenildiğinde gelecekteki uyumluluk uyarısı veriliyor.
  • 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.
Sürüm: 1.96.1
Sürüm: 1.96.0
Sürüm: 1.95.0
Sürüm: 1.94.1

🚀 Dil ve Derleyici İyileştirmeleri​

  • 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.
Sürüm: 1.93.1