- Rust 1.97.0 stable sürümü, derleme çıktılarında sembol üretim biçimini ve build uyarılarının işleniş akışını değiştiriyor;
rustup update stable ile güncellenebiliyor
- symbol mangling v0, stable için varsayılan hale gelerek Rust’a özgü sembol adlandırma düzenine geçiyor; mevcut Itanium ABI tabanlı yöntem ise kaldırılma yönünde ilerliyor
- Cargo,
RUSTFLAGS=-Dwarnings yerine uyarıları allow, warn, deny olarak denetlemek için CARGO_BUILD_WARNINGS kullanıyor; böylece CI ve yerel build politikalarını ayırmak kolaylaşıyor
- rustc, başarılı link işlemlerinde bile linker çıktısını
linker_messages uyarısı olarak gösteriyor; bu lint şu anda warnings lint group’undan etkilenmiyor
- Standart kütüphaneye
RepeatN için Default, UEFI’de std::fs::File için Send, tamsayı ve NonZero bit metotları ile const context içinde char::is_control stabilizasyonu ekleniyor
Rust 1.97.0 güncellemesi
- Rust 1.97.0 bir stable sürümdür ve daha önce Rust’ı
rustup ile kuran kullanıcılar şu komutla güncelleyebilir
rustup update stable
rustup yoksa Rust web sitesindeki rustup kurulum sayfasından edinilebilir
- Ayrıntılı değişiklikler 1.97.0 için ayrıntılı sürüm notları içinde özetlenmiştir
- Gelecek sürüm testlerine katılmak için
rustup default beta veya rustup default nightly ile beta/nightly kanalları kullanılabilir; bulunan hatalar Rust issue tracker üzerinden bildirilebilir
stable’da değişen derleme ve build davranışları
-
symbol mangling v0 varsayılan olarak etkin
- Rust, obje dosyalarına veya ikili dosyalara derlenirken; function, static ve benzeri her öğenin küresel olarak benzersiz bir symbol’e sahip olması gerekir
- Farklı Rust programları birlikte link edilirken çakışmaları önlemek için Rust, özgün öğe adına modül yolu, tanımlandığı crate, generic gibi bağlamları ekleyerek adı mangle eder
- Önceki mangling yöntemi, C++’ta da kullanılan Itanium ABI temelliydi
- Yeni yöntem, generic parametre örnekleme değerlerini korur ve yalnızca bazı kısımlarda Itanium ABI kullanılmasının yarattığı tutarsızlıklar nedeniyle özel demangling ihtiyacını azaltır
- Rust 1.59’dan beri
-Csymbol-mangling-version=v0 ile Rust’a özgü mangling yöntemi seçilebiliyordu ve 2025 Kasım’dan itibaren nightly için varsayılan olmuştu
- Rust 1.97 ile bu yöntem stable Rust’ın varsayılanı oluyor; legacy mangling ise yalnızca nightly’de etkinleştirilebiliyor
- Mevcut plan, legacy mangling’i tamamen kaldırmak
- Daha fazla ayrıntı için önceki yazı olan nightly’de v0 mangling’e geçiş incelenebilir
-
Cargo’da uyarı denetimi
- CI’da uyarıları build hatası saymak yaygın bir pratiktir ve bugüne kadar genellikle
RUSTFLAGS=-Dwarnings kullanılıyordu
- Rust 1.97’den itibaren Cargo, uyarılar ile build başarısı arasındaki ilişkiyi doğrudan denetliyor
allow: uyarıları gizler
warn: başarısız saymadan gösteren varsayılan değer
deny: uyarıları reddeder ve build’i başarısız sayar
- Bu özellik davranışı Cargo yapılandırmasıyla belirlediği için varsayılan build cache’i geçersiz kılmaz
- Refactoring sonrası hataları düzeltirken uyarı gürültüsünü geçici olarak azaltmak isterseniz şu şekilde çalıştırabilirsiniz
CARGO_BUILD_WARNINGS=allow cargo check
- CI’da uyarıları reddetmek için
CARGO_BUILD_WARNINGS=deny ayarlanabilir
--keep-going ile birlikte kullanıldığında ilk başarısız package’ta durmadan tüm hata ve uyarıları toplayabilir
- Ayrıntılı yapılandırma için Cargo’nun
build.warnings belgelerine bakılabilir
-
Linker çıktısının varsayılan olarak gösterilmesi
- rustc, kullanıcı adına linker çağırır ve daha önce link başarılı olduğunda linker çıktısını varsayılan olarak gizlerdi
- Rust 1.97’den itibaren linker mesajları varsayılan olarak gösterilir ve aşağıdaki gibi bir warning lint olarak yazdırılır
warning: linker stderr: ignoring deprecated linker optimization setting '1'
|
= note: `#[warn(linker_messages)]` on by default
- rustc, false positive ya da amaçlı davranış olduğu belirlenmiş yaygın linker mesajlarını filtreler
- Nightly’de bu çıktının artık gizlenmemeye başlamasının ardından çeşitli kusurlar düzeltildi
- Şu anda
linker_messages özel bir lint’tir ve warnings lint group’undan etkilenmez
- rustc’nin linker çıktısını hassas biçimde denetleyememesi yaygındır ve çıktı yalnızca bazı platformlarda görünebilir
- Linker’ın false positive bir çıktısı gibi görünüyorsa issue açabilirsiniz
- Uyarıyı gizlemek için lint düzeyi
allow yapılabilir; bunun için Cargo.toml içine aşağıdaki lints section eklenebilir
[lints.rust]
linker_messages = "allow"
Stabilize edilen API’ler
- Rust 1.97’de aşağıdaki API’ler stable olarak stabilize edildi
- Önceden stable olan
char::is_control, artık const context içinde de stable
İlgili değişiklik günlükleri
- Tüm değişiklikler Rust, Cargo ve Clippy için ayrı değişiklik günlüklerinde incelenebilir
1 yorum
Lobste.rs yorumları
Rust 1.97’de Cargo’nun uyarılar ile derlemenin başarılı olup olmadığı arasındaki ilişkiyi kontrol edebilir hâle gelmesi çok iyi bir yeni özellik
Refactoring’den sonra hataları düzeltirken uyarılar araya giriyorsa
CARGO_BUILD_WARNINGS=allow cargo checkile geçici olarak gizlenebilir; CI’da iseCARGO_BUILD_WARNINGS=denyile uyarılar başarısızlık sayılabilir.--keep-goingile birlikte kullanıldığında ilk başarısız pakette durmak yerine tüm hatalar ve uyarılar toplanabilirYükseltmeyi bir süre ertelemek iyi olabilir. Bir yanlış derleme hatası var gibi görünüyor
https://github.com/rust-lang/rust/issues/159035
https://github.com/llvm/llvm-project/pull/208683
Harika. Burada pattern type uygulamasının ilerleme durumunu özetleyebilecek biri var mı merak ediyorum
Ne yazık ki never type bu sürümde de kararlı hâle gelmedi. Sonraki sürümü bekliyorum