Geri qayıt
Rust-un yaratdığı Debug kodu bir halda uv-a təxminən 160KB artırdı
SiTech AI Team2 dəq oxu

Rust-un yaratdığı Debug kodu bir halda uv-a təxminən 160KB artırdı

Rust hazırda bir neçə derive makrosu ilə yaradılmış koda inline işarələri əlavə edir. Bir halda Debug-un böyük implementasiyası o qədər təkrarlanan kodu yaradıb ki, uv layəhəsi təxminən 160KB azala bilərdi.

Rust-un derive nəticəsində inline işarələri

Rust developerləri tez-tez #[derive(...)]-dan istifadə edərək Debug, Display və Clone kimi əsas trait-ləri həyata keçirir. Müəllif aşkar etdi ki, Rust hazırda bu derive-lərin bir hissəsi kimi #[inline] əlavə edir.

Bu davranış zəmanət verilmir, lakin referensdə verilən nümunə ona işarələyir və makrolar açıldıqda ortaya çıxır. Əksər hallarda yaradılmış işarə arzuolundur, çünki yaradılmış implementasiyalar tez-tez kiçik olur və onların inline edilməsi fayda verir. Atribut yenə də buyruq kimi deyil, işarə kimi qalır.

Nə üçün iç içə səhvlər kod həcmini artıra bilər

Böyük implementasiyalar hər zaman inline-dan fayda almır. Üç səhv strukturunu və bir səhv enum-ını ehtiva edən iyerarxiya onların yaradılmış Debug implementasiyaları üçün kifayət qədər böyük həcmdə kod yaratdı. Bu kodun böyük hissəsi hər dəfə inline edilə bilərdi, yuxarı səviyyəli enum-un implementasiyası çağrılanda.

Belə çağrılar debug və ya trace loglaması zamanı təkrarlana bilər. Təsvir edilən nümunə açıq şəkildə sadələşdirilmişdi, çünki real Rust tətbiqlərində tez-tez dərin yerləşmiş səhvləri, sahələrin trivial olmayan sayı ilə ehtiva edən enum-lar rast gəlinir. Nəticədə əldə edilən inline kod Rust binarının ümumi ölçüsünün əhəmiyyətli hissəsini təşkil edə bilər.

uv binarının ölçüsünün azaldılması

Müəllif və komanda aşkar etdi ki, rustc tərəfindən verilən Debug implementasiyasının inline edilməsinə mane olsalar, uv binarının ölçüsü təxminən 160KB azala bilərdi. Nəticə təəccüblidir, çünki ölçü xərci sürətlə toplanırdı və görünürək rustc implementasiyanın inline edilməsinin ölçüsünü və ya sayını məhdudlaşdırmırdı.

Azalmağı təmin etmək üçün komanda öz prosedural makrosunu əlavə etdi; bu derive(Debug)-a oxşar davranırdı, amma #[inline(never)]-dan istifadə edirdi. Bu hal göstərir ki, yaradılmış inline işarələri nə vaxt binarın ölçüsünə təsir göstərə bilər: yaradılmış implementasiya dərin yerləşmiş tip vasitəsilə istifadə edildikdə.

SSiTech

SiTech — AI ilə gücləndirilmiş veb hazırlanması

Sürətli və müasir saytlar qurur, AI-ı real biznes proseslərinə gətiririk. Layihəniz və ya sualınız var? Kömək etməyə hazırıq.