· kaynak Hacker News – Front Page (native)
Rust 1.100, never type, extern "custom" ve custom allocator'ları stabilize etti
Rust 1.100.0, never type ve extern "custom" özelliklerini stabilize ediyor, custom allocator'ları standart kütüphaneye taşıyor ve Cargo'ya kendi lint sistemi ile dependency cooldown desteği kazandırıyor.
Rust projesi, never type, extern "custom" bildirimlerini ve standart kütüphanedeki custom allocator'ları stabilize eden, dille ağırlıklı bir güncelleme olan 1.100.0 sürümünü yayınladı. rust-lang GitHub deposunda yayınlanan ve Hacker News'in ana sayfasına da taşınan sürüm notlarına göre bu sürüm, kapsamlı bir Cargo güncellemesi ve alışılmadık derecede uzun bir uyumluluk değişiklikleri listesiyle birlikte geliyor.
Never type stabilize edildi
! olarak yazılan never type, return, break veya koşulsuz olarak dallanan bir çağrı gibi asla değer üretemeyecek ifadeleri tanımlar. Stabilize edilmesi, dilin ifade etmek için tasarlandığı şey ile stabil kodun gerçekte kullanabildiği şey arasındaki en eski boşluklardan birini kapatıyor. Sürüm notları Infallible'ı da resme dahil ediyor: artık ! için bir type alias ve bu tip AsRef ile AsMut implementasyonları kazanıyor. Önceden edition'lar arasında farklı davranan never type fallback'i artık her yerde ! olarak çözümleniyor — notların tip çıkarımında ortaya çıkabileceği için uyumluluk başlığı altında işaretlediği bir değişiklik.
extern "custom" ve derleyici değişiklikleri
Foreign function tarafında extern "custom", crate'lerin fonksiyonları derleyicinin yerleşik dizgelerinden biri yerine özel bir ABI etiketiyle bildirmesini sağlıyor; bu, kendi çağrı kurallarını tanımlayan araç zincirleri ve hedefler için tasarlanmış. Dilin diğer yerlerinde, tekrarlanan #[repr(..)] attribute'ları artık lint'leniyor, repr(packed) tipinin içindeki repr(align) alanlarına yönelik hard error, varsayılan olarak deny olan bir lint'e dönüştü (aligned_fields_in_packed) ve dropping_references, dropping_copy_types ile undropped_manually_drops lint'leri artık drop_in_place'i de kapsıyor. Adreslenemeyen belleğe yönelik volatile erişimlerin trap yapmasına artık izin veriliyor. Derleyicide, örnek güdümlü optimizasyon için -Cprofile-sample-use stabilize edildi ve yeni nesil trait solver artık orphan check için varsayılan oldu.
Custom allocator'lar ve stabilize edilen API'ler
Kütüphane tarafındaki büyük hikaye custom allocator'lar. std::alloc::Allocator, Global ve System ile birlikte artık stabil; ayrıca referanslar, Box, Rc ve Arc için Allocator implementasyonları ile allocator farkındalıklı bir kurucu filosu da stabil oldu: Box::new_in, Vec::new_in, Vec::with_capacity_in, Vec::from_raw_parts_in ve ham parçaları allocator ile birlikte çıkaran karşılıkları. Notlar, bazı Box implementasyonlarının rastgele allocator'lara genelleştirildiğini, bunun mevcut kodda yeni tip çıkarımı hatalarını tetikleyebileceği konusunda uyarıyor.
Daha küçük bir grup API de yerini aldı: Box::take, Box::map, Rc::map, Arc::map, bool::toggle, str::trim_prefix ve str::trim_suffix, Vec::from_fn, core::mem::DropGuard, UnsafeCell::replace ve Child::main_thread_handle.
Cargo lint'ler, cooldown'lar ve yeni bir cache düzeni kazanıyor
Cargo kendi lint sistemini tanıtıyor: bazı uyarılar artık [lints.cargo] tablosu üzerinden yapılandırılabilen lint'ler olarak yayınlanıyor; cargo::unused_dependencies olarak açığa çıkan yeni bir yerleşik kullanılmayan bağımlılık kontrolü de bunlara dahil. Tedarik zincirini izleyen ekipler için daha kayda değer olan minimum publish age — RFC 3923 kapsamında dependency cooldown olarak da adlandırılıyor — resolver'ın, yapılandırılan bir pencereden daha yakın zamanda yayınlanan crate sürümlerini yok saymasını sağlıyor; bu sürümler Cargo.lock içinde zaten kayıtlıysa durum farklı.
cargo install artık varsayılan olarak .crate tarball'ının içinde gelen lockfile'ı yeniden kullanıyor, bu da --locked seçeneğini etkisiz hale getiriyor. Ara build artefaktları da yeni bir dizin düzenine taşındı; notlar, araçlara artefaktları dizin yapısı üzerinden değil Cargo'nun JSON mesajları üzerinden bulmalarını öneriyor; dizin yapısı açıkça stabil bir arayüz değil.
Platform hamleleri ve uyumluluk notları
Platform desteğinde wasm32-wasip3 Tier 2'ye yükseltildi, i686-pc-windows-gnu host araçları olmayan bir Tier 2 hedef haline geldi ve powerpc64-sony-ps3 yeni bir Tier 3 hedef olarak katıldı. Kütüphanelerde ENOTSUP artık ErrorKind::Unsupported ile eşleşiyor ve SGX bekleme kuyruğunun unsafe listesindeki bir soundness sorunu düzeltildi.
Uyumluluk listesi yükseltmeden önce dikkatli bakmayı hak ediyor: closure'lar artık if let içinde kullanılan değişkenleri daha hassas yakalıyor, bu da yeni hatalara yol açabilir; trait objelerinin dyn uyumluluğu daha fazla yerde kontrol ediliyor; box pattern'ları artık sözdizimsel olarak kabul edilmiyor; ve Iterator::{min,max}(_by_key) ailesi hangi Ord metotlarını çağırdığını değiştirdi — doğru implementasyonlar için zararsız ama tutarsız olanlar için davranışı değiştirebilir. Standart kütüphane Unicode 18.0.0'a geçti ve WASI SDK 33. sürümden 34'e atladı. ARM'da ABI'yi değiştirecek -Ctarget-feature ve -Ctarget-cpu değerleri artık hard error olarak reddediliyor; notlar ayrıca birkaç ARMv7-A hardfloat hedefinin 1.94'ten 1.100'e kadar yanlışlıkla VFPv3-D32 FPU gerektirdiğini açıklıyor; etkilenen build'ler -Ctarget-feature=+d32 geçebilir. Rustdoc ayrıca bir invalid_markdown_table lint'i ekliyor.
Neden önemli
Never type manşet: kütüphane yazarlarına "bu dal gerçekleşemez" bilgisini doğrudan tip sisteminde kodlama imkanı veriyor ve Infallible etrafında şekillenmiş uzun süredir kullanılan bir geçici çözümü ortadan kaldırıyor. Custom allocator'lar en çok geleneksel sunucu yazılımlarının dışında önem taşıyor — çekirdekler, gömülü hedefler ve arena'ların hepsi belleğin nereden geldiği konusunda açık kontrol gerektiriyor. Ve Cargo'nun cooldown'ları, ekosistemin tedarik zinciri olaylarına giderek daha fazla önem verdiği bir dönemde geliyor; ekiplere bir bağımlılığın en yeni sürümüne otomatik olarak çözümlenmekten kaçınmak için yerleşik bir mekanizma sunuyor. Birkaç Rust point release'i bu ağırlıkta üç değişikliği aynı anda sunar.
- #rust
- #cargo
- #programming-languages
- #compilers