Giderilen Hatalar
- Illumos Dosya Kilitleme: Illumos işletim sisteminde dosya kilitleme (file locking) desteği etkinleştirildi. Bu, Cargo'nun derleme dizinini kilitleyememesi sorununu giderir ve derleme kararlılığını sağlar.
- WASM Bağlayıcı Hatası: wasm_import_module niteliğinin çapraz sandıkta (cross-crate) düzgün çalışmaması düzeltildi. Bu, WASM hedeflerinde bağlayıcı (linker) hatalarını çözüyor.
Dil (Language)
- Örüntü Bağlama ve Atma Sırası: Örüntü bağlamaları (pattern bindings), yazılma sırasına göre çözümlenir ve atma (drop) sırası, birincil bağlamaların sırasına göre belirlenir.
- C-stili Variadic Fonksiyonlar: sysv64, win64, efiapi ve aapcs ABI'ları için C-stili variadic fonksiyonların (C-style variadic functions) kararlılığı sağlandı. Bu, bu ABI'ları, variadic fonksiyonların extern bloklarda beyan edilmesine (tanımlanmamasına) izin veren C ABI'ı ile uyumlu hale getirir.
- Yeni Lint'ler (Kod Kalitesi Kontrolü):
- dangling_pointers_from_locals: Yerel değişkenlerden sarkan işaretçilere (dangling pointers) karşı uyarı verir.
- integer_to_ptr_transmutes: Integer'dan işaretçiye transmute işlemlerine karşı varsayılan olarak uyarı verir.
- Önemli Lint Yükseltmesi: semicolon_in_expressions_from_macros linti, warn (uyarı) seviyesinden deny (reddet) seviyesine yükseltildi. Gelecekte bu bir hata olacaktır.
- Hedef Özellik Kararlılığı: LoongArch32 satır içi assembly, sse4a ve tbm hedef özellikleri kararlı hale getirildi.
- Yeni Yapılandırma Bayrakları: target_env = "macabi" ve target_env = "sim" cfg'leri, aynı değerlere sahip olan target_abi cfg'lerinin yerine eklendi.
Derleyici (Compiler)
- Uyarı Engelleme: Erişilemez (unreachable) olarak değerlendirilen never tipinden any tipine yapılan as dönüşümlerinde artık uyarı verilmeyecek.
Platform Desteği
- Tier 1 Yükseltmesi: aarch64-pc-windows-msvc hedefi Tier 1 seviyesine yükseltildi.
- Tier 2 Yükseltmeleri: aarch64-pc-windows-gnullvm ve x86_64-pc-windows-gnullvm hedefleri, ana bilgisayar araçlarıyla birlikte Tier 2 seviyesine yükseltildi. (LLVM araçları ve MSI yükleyicileri gelecekte eklenecektir.)
Kütüphaneler (Libraries)
- Panic Mesajları: panic mesajlarına iş parçacığı ID'sinin (thread ID) yazdırılması sağlandı.
- Hata Yönetimi: std:
:Builder::stack_size ayarlama hatası başarısız olursa artık paniklemek yerine bir hata (error) döndürülür.
- min/max Sırası Garantisi: std::cmp içindeki min, max ve minmax'ın _by() varyantları için parametre sırası garantilendi.
- Trait Desteği: Clone ve Eq trait'leri hakkındaki varsayımlar belgelendi.
Kararlı Hale Getirilen API'ler
Bu sürümde çok sayıda yeni API ve const bağlamlarda kararlı hale getirilen API'ler bulunmaktadır. Önemli yeni API'lar arasında:
- Atomik İşaretçi İşlemleri: AtomicPtr için fetch_ptr_add, fetch_ptr_sub, fetch_byte_add, fetch_byte_sub, fetch_or, fetch_and, ve fetch_xor.
- Sıkı Aritmetik İşlemler: Tamsayılar ({integer}) için strict_add, strict_sub, strict_mul, strict_div gibi strict_ ön ekine sahip aritmetik metotlar.
- Yol (Path) İşlemleri: Path::file_prefix, PathBuf::add_extension, PathBuf::with_added_extension.
- Koleksiyonlar: BTreeMap::extract_if ve BTreeSet::extract_if.
- Path Eşitliği: PathBuf ve Path için str ve String ile PartialEq uygulamaları.
- Tupıllanmış Adresler: Ipv4Addr::from_octets, Ipv6Addr::from_octets, Ipv6Addr::from_segments.
Cargo
- build.build-dir Kararlılığı: Geçici derleme artefaktlarının saklanacağı dizini belirleyen build.build-dir konfigürasyonu kararlı hale getirildi.
- Hedef Takma Adı: --target bayrağı ve build.target konfigürasyonu, artık dahili olarak ana bilgisayarın hedef üçlüsüyle değiştirilecek olan "host-tuple" dize değişmezini kabul edebilir.
Uyumluluk Notları
- Gereklilikler: Coroutine yakalamalarının drop-live olması artık her zaman gereklidir.
- Apple Linkleme: cc ile linkleme yapılırken her zaman SDK kökü geçirilir. Bu, Xcode içinde çalışırken linkleme sorunlarını çözmelidir. /usr/local/lib içindeki kütüphaneler artık otomatik olarak linklenmeyebilir.
- Hata Denetimi: let-else ile bildirilen bağlamalar için atma denetleyicisinin daha hoşgörülü olması düzeltildi. Nitelikleri ayrıştırırken daha katı olunacak ve geçersiz niteliklerde hata verilecektir.
- Kullanımdan Kaldırma: semicolon_in_expressions_from_macros linti artık varsayılan olarak reddedilir.
- Geçici Kapsam Kısıtlaması: pin!, format_args!, write!, ve writeln! makroları tarafından oluşturulan geçici değişkenlerin kapsamı, Rust Edition 2024'teki if let geçici kapsam kurallarına uyacak şekilde kısıtlandı.
Dil (Language):
- Sabit Bağımsız Değişkenler: Açıkça çıkarılan sabit bağımsız değişkenlerin kararlılığı sağlandı.
- Yaşam Süresi Kontrolü: Fonksiyon bağımsız değişkenleri ve dönüş değerleri arasında aynı yaşam süresinin farklı sözdizimi kategorileriyle kullanılmasına yönelik yeni bir lint (kod analizi) uyarısı eklendi.
- Derleme ve Bellek: i128 ve u128 tipleri improper_ctypes_definitions kapsamından çıkarıldı ve repr128 özelliği kararlı hale getirildi.
- AVX512 ve Diğer Hedef Özellikleri:
- AVX512 hedef özellikleri kararlı hale getirildi.
- x86 için kl ve widekl hedef özellikleri kararlı hale getirildi.
- x86 için sha512, sm3 ve sm4 hedef özellikleri kararlı hale getirildi.
- LoongArch için f, d, frecipe, lasx, lbt, lsx ve lvz hedef özellikleri kararlı hale getirildi.
- Geçici Yaşam Süresi: Geçici yaşam süresi uzantısı artık tuple struct ve tuple variant oluşturucuları üzerinden de genişletiliyor.
- WebAssembly (Wasm): wasm32-unknown-unknown hedefindeki extern "C" fonksiyonları artık standartlara uyumlu bir ABI'ye (Application Binary Interface) sahiptir.
Derleyici (Compiler):
- Çerçeve İşaretçileri:
- aarch64-linux üzerinde varsayılan olarak non-leaf frame işaretçileri kullanılması sağlandı.
- Arm64EC Windows için non-leaf frame işaretçileri etkinleştirildi.
- Apple çerçeve işaretçileri mimariye göre ayarlandı.
Platform Desteği:
- LoongArch: loongarch32-unknown-none ve loongarch32-unknown-none-softfloat olmak üzere iki yeni Tier-3 hedefi eklendi.
- x86_64-apple-darwin hedefi, ana bilgisayar araçlarıyla birlikte Tier 2'ye düşürülme sürecindedir.
Kütüphaneler (Libraries):
- Geliştirilmiş API'lar: File için lock, unlock, try_lock gibi dosya kilitleme metotları eklendi. NonNull için from_ref, from_mut gibi yeni metotlar eklendi.
- Fonksiyonellik: format_args!() makrosunun bir değişkende saklanmasına izin verildi.
- Genel: NonZero<char>, çeşitli x86, AVX512, SHA512, SM3 ve SM4 intrinsics'leri kararlı hale getirildi.
Cargo:
- Düzeltme Komutları: cargo fix ve cargo clippy --fix komutları, artık varsayılan olarak diğer derleme komutlarıyla aynı Cargo hedef seçimini kullanacak. Bu, daha tutarlı bir davranış sağlar.
- Çapraz Derleme: doctest-xcompile özelliği kararlı hale getirildi. Artık çapraz derleme sırasında doctest'ler de test ediliyor.
Rustdoc:
- Mobil Uyum: Mobil cihazlarda kenar çubuğu tam genişlikte olacak şekilde ve metinler satır sonu yapacak şekilde ayarlandı. Bu, uzun bölüm ve öğe adlarının mobil cihazlarda daha kolay okunmasını sağlar.
Dil İyileştirmeleri:
Derleyici:
- let_chains Özelliği Kararlı Hale Getirildi: Artık if ve while ifadeleri içinde && ile zincirleme let ifadeleri kullanılabiliyor. Bu, boolean ifadelerle karışık kullanım imkanı sunuyor ve let alt ifadelerindeki desenler ister çürütülemez ister çürütülebilir olsun fark etmiyor.
- naked_functions Kararlı Hale Getirildi: Derleyici tarafından oluşturulan önsöz ve sonsöz içermeyen fonksiyonlar yazmaya olanak tanıyor. Bu sayede belirli bir fonksiyon için üretilen assembly kodu üzerinde tam kontrol sağlanıyor.
- cfg_boolean_literals Kararlı Hale Getirildi: #[cfg(true)] ve #[cfg(false)] gibi boolean değişmezlerinin cfg koşul ifadesi olarak kullanılmasına izin veriliyor.
- #[bench] Niteliği Tamamen Kararsızlaştırıldı: Rust 1.77'den beri #![feature(custom_test_frameworks)] olmadan #[bench] kullanımı varsayılan olarak reddedilen gelecekteki uyumsuzluk uyarısını tetiklese de, artık doğrudan bir hata olacak.
- dangerous_implicit_autorefs Lint Eklendi: Ham işaretçi referanslarının dolaylı olarak otomatik referanslanmasına karşı varsayılan olarak uyarı veren bir lint eklendi. Bu lint, Rust'ın bir sonraki sürümünde varsayılan olarak reddedilen bir uyarıya dönüşecek.
- invalid_null_arguments Lint Eklendi: Null işaretçilerin geçersiz kullanımını önlemek için clippy::invalid_null_ptr_usage'dan yükseltilen invalid_null_arguments lint'i eklendi.
- Yerleşik uygulamalar ve önemsiz where koşulları için trait uygulama adayı tercihi değiştirildi.
- Jenerik const parametre varsayılanlarının tipleri kontrol edilecek.
Platform Desteği:
- Üretilecek DWARF hata ayıklama bilgisinin sürümünü seçmek için -Cdwarf-version kararlı hale getirildi.
Kütüphaneler:
- i686-pc-windows-gnu Tier 2'ye düşürüldü. Rust'ın kademeli platform desteği hakkında daha fazla bilgi için Rust'ın platform destek sayfasına bakabilirsiniz.
Kararlı Hale Getirilen API'ler:
- #[should_panic] test başarısızlık mesajından ters tırnak işaretleri kaldırıldı.
- Durum bilgisi olan bir closure iletilmesi durumunda, [T; N]::from_fn'in artan indeks sırasına göre üretilmesi garanti edildi.
- libtest bayrağı --nocapture yerine daha tutarlı olan --no-capture bayrağı lehine kullanımdan kaldırıldı.
- {float}::NAN'ın sessiz bir NaN olması garanti edildi.
Daha Önce Kararlı Olan ve Artık:
- Cell::update
- impl Default for *const T
- impl Default for *mut T
- HashMap::extract_if
- HashSet::extract_if
- proc_macro::Span::line
- proc_macro::Span::column
- proc_macro::Span::start
- proc_macro::Span::end
- proc_macro::Span::file
- proc_macro::Span::local_file
Cargo:
- NonNull<T>::replace
- <*mut T>::replace
- std:
tr::swap_nonoverlapping
- Cell::{replace, get, get_mut, from_mut, as_slice_of_cells}
Rustdoc:
- Otomatik çöp toplama kararlı hale getirildi.
- Rust kodunda gzip sıkıştırması için zlib-rs kullanılacak.
Uyumluluk Notları:
- Doküman testleri, ignore-* nitelikleri kullanılarak hedef adlarına göre yoksayılabilir.
- Bir doküman testini çalıştırmak için bir program (qemu gibi) ve argümanlarını belirtmek üzere --test-runtool ve --test-runtool-arg CLI seçenekleri kararlı hale getirildi.
- Yapıştırılan tokenlerin dahili temsilinin değiştirilmesi tamamlandı. Daha önce belirsiz durumlarda kabul edilen belirli geçersiz bildirimsel makrolar, derleyici tarafından artık doğru şekilde reddediliyor. Bir tt fragment belirleyicisi kullanmak genellikle bu makroları düzeltebilir.
- #[bench] niteliği tamamen kararsızlaştırıldı. Rust 1.77'den beri #![feature(custom_test_frameworks)] olmadan #[bench] kullanımı zaten varsayılan olarak reddedilen gelecekteki uyumsuzluk uyarısını tetiklese de, artık doğrudan bir hata olacak.
- Bazı her zaman doğru desenlerin ödünç alma kontrolü düzeltildi. Ödünç alma denetleyicisi bazı durumlarda aşırı hoşgörülü davranarak derlenmemesi gereken programlara izin veriyordu.
- Minimum harici LLVM sürümü 19'a güncellendi.
- Gerekli hedef özelliği etkinleştirmeden Rust dışı bir ABI ile vektör türü kullanmak artık kesin bir hata olarak kabul edilecek.
Anonymous Pipes:
1.87 sürümü, standart kütüphaneye anonim borulara erişim ekler. Bu, std:rocess::Command'ın giriş/çıkış metotlarıyla entegrasyonu içerir. Örneğin, standart çıktı (stdout) ve standart hata (stderr) akışlarını tek bir akışta birleştirmek, daha önce ek iş parçacıkları (threads) veya platforma özgü fonksiyonlar gerektirirken, aşağıda gösterildiği gibi artık nispeten basittir.
Kod:use std::process::Command; use std::io::Read; let (mut recv, send) = std::io::pipe()?; let mut command = Command::new("path/to/bin") // Both stdout and stderr will write to the same pipe, combining the two. .stdout(send.try_clone()?) .stderr(send) .spawn()?; let mut output = Vec::new(); recv.read_to_end(&mut output)?; // It's important that we read from the pipe before the process exits, to avoid // filling the OS buffers if the program emits too much output. assert!(command.wait()?.success());
Daha fazlası...
Özellik Türü Yukarı Çevrimi (Trait Upcasting)
Bu sürüm, uzun zamandır beklenen bir özelliği içeriyor: özellik nesnelerini yukarı çevirme yeteneği.Bir özelliğin süper özelliği varsa, söz konusu özellik nesnesine yapılan bir referansı, süper özelliğin bir özellik nesnesine yapılan bir referansa zorlayabilirsiniz:
Kod:trait Trait: Supertrait {} trait Supertrait {} fn upcast(x: &dyn Trait) -> &dyn Supertrait { x }
Daha fazlası...
1.85.1 Sürümünde Neler Var?
- Birleştirilmiş doctest derlemesi düzeltildi:
- Uygulamadaki bir hata nedeniyle, birleştirilmiş doctestler kararlı 2024 Sürümü'nde amaçlandığı gibi çalışmıyordu. Özellik kararlılığı ile ilgili iç hatalar, rustdoc'un önceki sürümlerde olduğu gibi otomatik olarak "birleştirilmemiş" yedek yöntemini kullanmasına neden oluyordu.
- Bu hatalar artık 1.85.1'de düzeltildi ve birleştirilmiş doctest derlemesinin amaçlanan performans iyileştirmesi gerçekleştirildi! Bu davranış değişikliğini bir nokta sürümünde yapmanın risk analizini de içeren daha fazla ayrıntı için geri aktarma sorununa bakın.
- Diğer düzeltmeler:
- 1.85.1, 1.85.0'da tanıtılan birkaç gerilemeyi de çözüyor:
- Belgeleri oluştururken bazı target_feature kontrolleri gevşetildi.
- Windows 1607'de std::fs::rename'deki hatalar düzeltildi.
- Özel hedefleri düzeltmek için bootstrap cc düşürüldü.
- Rust'ı bir kaynak tarball'dan oluştururken alt modül güncellemeleri atlandı.
- 1.85.1'e Katkıda Bulunanlar:
- Rust 1.85.1'i oluşturmak için birçok kişi bir araya geldi. Hepiniz olmadan bunu başaramazdık. Teşekkürler!