Rust 1.98'de kritik derleyici hatası: sıfır vtable girdisi segfault'a yol açıyor
Rust 1.98.0'da boxed dyn Service dispatch'inde sıfır vtable girdisi keşfedildi; güvenli kod segfault veriyor, geçici çözüm ve ilgili rustc hataları paylaşıldı.
Rust 1.98.0 sürümünde, derleyicinin ürettiği vtable'larda kutulanmış (boxed) dyn Service trait nesneleri için bir metot yuvasının sıfır değer içerdiği kritik bir miscompilation tespit edildi. Güvenli Rust kodu bu yuvadan çağrı yaptığında işlem adres sıfırda segfault veriyor.
Hata, rama ağ kütüphanesi üzerinden aarch64-apple-darwin platformunda deterministik biçimde yeniden üretildi: aynı kaynak kod 1.97.1'de ve nightly-2026-07-16'da sorunsuz çalışırken, yalnızca 1.98.0 kararlı sürümünde CONNECT isteği sırasında çöküyor. Sorunun, async trait dispatch'te predicate'lerin yanlış şekilde "imkansız" sayılıp VtblEntry::Vacant'a düşmesinden kaynaklandığı ve daha önce bildirilen rustc hatalarıyla (#152735, #153596, #158148) ilişkili olabileceği değerlendiriliyor.
BoxService sınırını manuel olarak silinmiş (type-erased) bir Arc<dyn Fn> tabanlı future çağrısıyla değiştirmek geçici çözüm olarak işe yarıyor. Bu durum, async trait'leri tip silme (type erasure) yoluyla dinamik olarak çağıran her projeyi doğrudan ilgilendiriyor; sorunun 1.98.1 ile hızlıca giderilmesi bekleniyor.
Bu sentez, kaynağından yapay zeka tarafından üretildi; insan editör ya da elle onay adımı yoktur. Nasıl çalışıyoruz