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.
Referansların hemen ham ödünç almalara dönüştüğü durumları denetleyen, varsayılan olarak izin verilen raw_borrows_via_references lint'i eklendi.
unconditional_panic lint'i, chunks/windows boyutu sıfır olduğunda panic oluşturan işlev çağrılarını da kapsayacak şekilde genişletildi.
C-variadic işlev tanımları kararlı hâle getirildi.
C-variadic işlevleri tanımlamak için #[unsafe(naked)] işlevlerinin kullanılabilmesi kararlı hâle getirildi.
Trait metotları artık ayarlanmış never type üzerinde çözümleniyor.
Çıkarım değişkeni, alt tür ilişkisi aracılığıyla Sized olduğu bilinen bir türle ilişkiliyse çıkarım değişkenlerinden trait nesnelerine coercion yapılabiliyor.
#[my_macro] mod foo; kullanımı kararlı hâle getirildi. Böylece dışarıda tanımlanan modüller (mod foo, özel bir attribute veya derive makrosunun gövdesinin herhangi bir yerinde kullanılabiliyor.
Tekrarlanan olumsuzlamalarda overflowing_literals lint'i düzeltildi. Örneğin --128_i8 artık bu lint tarafından işaretlenmiyor; bu durum zaten arithmetic_overflow lint'i tarafından algılanıyor.
invalid_runtime_symbol_definitions ve suspicious_runtime_symbol_definitions lint'lerine POSIX sembolleri eklendi.
Satır içi modüllerde kullanılmayan #[path] attribute'ları için lint eklendi.
unreachable_cfg_select_predicates lint'i unused lint grubunun parçası olarak etkinleştirildi.
x86 üzerinde asm! ile 128 bit tamsayıların vektör register'ları üzerinden geçirilmesi kararlı hâle getirildi.
Bazı allocation'ların yerinde büyüyebileceği, ancak hiçbirinin yerinde küçülemeyeceği açıkça belgelendi.
UnsafeCell içeriğine get üzerinden geçmeden erişilebileceği artık garanti ediliyor.
invalid_reference_casting lint'i buna uygun şekilde ayarlandı.
global_asm! içinde küresel olarak etkinleştirilen target feature'lar hesaba katılıyor.
Bir makro çağrısında geçersiz bir doc attribute kullanıldığında uyarı veriliyor.
Derleyici
-Ctarget-cpu, AVR, AMDGCN ve NVPTX için target-modifier'a dönüştürüldü.
static_position_independent_executables tüm GNU hedeflerinde etkinleştirildi.
rustc, eksik bir metot hakkında öneri sunarken artık diğer metot adları arasında benzerlik araması yapmak yerine doc alias attribute'undaki tam eşleşen adı tercih ediyor. Yeni kullanıcıların bir metodu farklı bir adla araması bekleniyorsa doc alias eklemek, rustdoc aramasına ek olarak rustc önerileri aracılığıyla da bu metodun bulunmasına yardımcı oluyor.
Platform Desteği
riscv64-unknown-linux-musl, host araçlarıyla birlikte Tier 2 seviyesine yükseltildi.
Kütüphaneler
RangeInclusive (a..=b aralıkları) üzerinde yineleme bazı durumlarda daha iyi optimize ediliyor. Bunun bir yan etkisi olarak, iterator olarak zaten tüketilmiş RangeInclusive değerlerinin davranışı değişti. Örneğin bu tür aralıklarda start() ve end() dönüş değerleri farklı olabilir ve bu aralıkların slice indeksi olarak kullanılması farklı davranabilir. Bu davranışların kararlı kalacağı garanti edilmediğinden değişiklikler geriye dönük uyumluluğu bozan değişiklikler olarak kabul edilmiyor.
transmute_copy, ?Sized türlerini kabul edecek şekilde gevşetildi.
transmute_copy, unwind gerçekleştirmeyen bir panic kullanacak şekilde güncellendi.
escape_debug_ext içinde U+FF9E ve U+FF9F artık escape edilmiyor.
core::fmt::NumBuffer, alloc ve std içinde yeniden dışa aktarılıyor.
Kararlı Hâle Getirilen API'ler
Box<[T; N]> için IntoIterator.
&Box<[T; N]> için IntoIterator.
&mut Box<[T; N]> için IntoIterator.
VecDeque::retain_back.
core::ffi::VaList.
Box::into_non_null.
Box::from_non_null.
Vec::into_parts.
Vec::from_parts.
core::mem::size_of_val_raw.
core::mem::align_of_val_raw.
core::alloc::Layout::for_value_raw.
String::from_utf8_lossy_owned.
string::FromUtf8Error::into_utf8_lossy.
StepBy<I> için FusedIterator.
std::fs::set_times.
std::fs::set_times_nofollow.
Cargo
Yeni yerleşik debug profili eklendi. Bu, daha hızlı geliştirme yinelemeleri için daha makul bir varsayılan sağlamak amacıyla dev profilinin hata ayıklama odaklı yapıdan uzaklaştırılmasına yönelik hazırlık niteliğinde. Şu anda dev ve debug profilleri arasında fark bulunmuyor.
2024 veya daha yeni edition kullanan workspace üyeleri artık devralınan bir workspace bağımlılığının default-features alanını geçersiz kılabiliyor. Örneğin serde = { workspace = true, default-features = false }, workspace tanımında varsayılan özellikler etkinleştirilmiş olsa bile bunları kapatıyor. Daha eski edition'larda default-features = false bir uyarıyla birlikte yok sayılıyor.
Rustdoc
Yeni unused_footnote_definition rustdoc lint'i eklendi.
Trait implementasyonlarının daha akıllı filtrelenmesi sayesinde gerçek dünyadaki bazı crate'lerde ortalama %20, bazı durumlarda ise %40'a varan performans iyileştirmeleri sağlandı.
Uyumluluk Notları
Eski integral modülleri tamamen kullanımdan kaldırıldı. Örneğin std::i32::MAX yerine i32::MAX kullanılmalı.
no_mangle_generic_items artık kesin hata olarak değerlendiriliyor.
Pin::new_unchecked güvenlik invariant'larında küçük değişiklikler yapıldı.
extern static'lere yönelik referanslar artık promote edilmiyor.
let pattern'larının çıkarılan türlerinin typecheck işleminden geçmesi sağlandı.
hermit/fs içinde from_raw_os_error(22) yerine unsupported() döndürülüyor.
Kararlı Rust'ta #[repr(simd)] kullanımının yanlışlıkla makro çağrılarında kullanılabilmesine izin veren hata düzeltildi.
Üretilen değerin türünde generic'ler bulunduğunda const-eval işlemi durduruluyor.
Doc comment içindeki kod bloklarında hiçbir şeye uygulanmayan attribute'lar artık hata olarak değerlendiriliyor.
Box::leak belgelerinde kullanıcıların sızıntıyı geri almaktan kaçınması gerektiği belirtiliyor.
PowerPC inline ASM'de little-endian sistemlerde scalar float değerlerinin yanlış vektör lane'inde bulunması düzeltildi.
Doctest'ler filtrelenirken doc(cfg()) artık dikkate alınmıyor.
Associated const türlerindeki anonim lifetime'lar 'static olarak çıkarılıyor.
Noktalı virgüle genişleyen makrolar, makro başka bir crate'ten gelse bile artık semicolon_in_expressions_from_non_local_macros lint uyarısı oluşturuyor. Önceden yerel olarak düzeltilemeyen uyarıların gösterilmesini önlemek için bu uyarılar yalnızca aynı crate'teki makrolarda gösteriliyordu. Ancak makroyu sağlayan crate'in integration test'leri ayrı bir crate olarak derlendiğinden bu davranış sorunların gizlenmesine neden olabiliyordu. Böyle bir lint ile karşılaşıldığında uyarıyı yalnızca kendi crate'inizde susturmak yerine makroyu sağlayan crate'e bildirilmesi gerekiyor.
semicolon_in_expressions_from_macros lint'i artık yerel olmayan makroları da denetliyor.
Yerel olmayan semicolon_in_expressions_from_macros denetimleri ayrı bir lint'e bölündü.
Cargo'da CI ortamında çalıştırıldığında incremental compilation artık varsayılan olarak devre dışı. CI ortamı, CI environment variable aracılığıyla algılanıyor.
Dahili Değişiklikler
Rust'ın herkese açık arayüzlerini etkilemeyen ancak rustc ve ilgili araçların performansı veya dahili yapısında önemli iyileştirmeler sağlayan değişiklikler yapıldı.
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.