
Rust'un ürettiği Debug kodu bir durumda uv'ye yaklaşık 160KB ekledi
Rust artık birkaç derive makrosu tarafından üretilen koda inline ipuçları ekliyor. Bir durumda, Debug'in büyük uygulaması nedeniyle birikmiş tekrarlanan kod, uv projesinin yaklaşık 160KB küçültülmesine yeterli oldu.
Rust'un derive sonucunda inline ipuçları
Rust geliştiricileri sık sık Debug, Display ve Clone gibi temel trait'leri uygulamak için #[derive(...)] kullanır. Yazar, Rust'ın şu anda bu derive'ler sırasında #[inline] ürettiğini keşfetti.
Bu davranış garanti edilmemiştir, ancak referans verilen örneği ima eder ve makrolar genişletilirken ortaya çıkar. Çoğu durumda üretilen ipucu tercih edilir çünkü üretilen uygulamalar sıklıkla küçüktür ve onlar için inline olarak genişletmek fayda sağlar. Öznitelik yine de bir ipucu olarak kalır, talimat olarak değil.
Neden bloat hataları kodu büyütür
Büyük uygulamalar her zaman inline olarak genişletmekten fayda sağlamaz. Üç hata yapısı ve bir hata enum'i içeren hiyerarşi, üretilen Debug uygulamaları için önemli miktarda kod üretti. Bu kodun büyük bir kısmı, üst düzey enum'in uygulaması her çağrıldığında inline olarak genişletilebilirdi.
Bu tür çağrılar debug veya trace günlükleme sırasında birkaç kez gerçekleşebilir. Örnekte verilen hiyerarşi, gerçek Rust uygulamalarında sıklıkla karşılaşılan, sayıda alanı olmayan derin iç içe hata enum'leri nedeniyle açıkça basitleştirilmiştir. Sonuçta elde edilen inline kod, Rust ikili dosyasının toplam boyutunun önemli bir kısmını oluşturabilir.
uv ikili dosyasının boyutunun küçültülmesi
Yazar ve ekip, rustc'ye belirli bir Debug uygulamasının inline olarak genişletme izni verilmediğinde uv ikili dosyasının yaklaşık 160KB küçültülebileceğini belirledi. Sonuç beklenmedikti çünkü boyut maliyeti hızla birikiyordu ve rustc, görünüşe göre, ne uygulamanın boyutunu ne de inline olarak genişletilme sıklığını sınırlıyordu.
Küçültmeyi başarmak için ekip, derive(Debug) gibi davranan ancak #[inline(never)] kullanan kendi prosedürel makrosunu ekledi. Bu durum, üretilen uygulamanın derin iç içe bir türün etkisiyle kullanıldığında, üretilen inline ipuçlarının ikili dosya boyutunu nasıl etkileyebileceğini gösteriyor.
SiTech — AI destekli web geliştirme
Hızlı ve modern web siteleri kuruyor, AI'yı gerçek iş akışlarına taşıyoruz. Projeniz veya sorunuz mu var? Yardımcı olmaktan mutluluk duyarız.