1 puan yazan GN⁺ 4 시간 전 | 1 yorum | WhatsApp'ta paylaş
  • 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

İlgili değişiklik günlükleri

1 yorum

 
GN⁺ 4 시간 전
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 check ile geçici olarak gizlenebilir; CI’da ise CARGO_BUILD_WARNINGS=deny ile uyarılar başarısızlık sayılabilir. --keep-going ile birlikte kullanıldığında ilk başarısız pakette durmak yerine tüm hatalar ve uyarılar toplanabilir

  • Yü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

    • İlginç şekilde bu yanlış derleme 10 sürümdür zaten varmış; eskiden sınırın biraz dışından okurken, şimdi çok daha fazla dışarıdan okuyup segfault’a yol açıyor gibi görünüyor
    • LLVM hatasıymış. Neyse ki düzeltme oldukça doğrudan görünüyor
      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

    • “never type adını kararlı hâle geleceği tarihten alıyor” şakası da artık son demlerine yaklaşıyor
    • Derleyici ekibinden bir üye RustWeek’te never type hakkında sunum yaptı. Kararlı hâle gelme ihtimalini daha iyi değerlendirmeye yardımcı olabilir; izlemenizi öneririm: https://www.youtube.com/watch?v=3jM4cnEVrLc