programmatūra · 5 min · 13.07.2026

Rust 1.97 ieslēdz v0 simbolu mangling pēc noklusējuma — beidzas astoņus gadus ilgā pāreja

9. jūlijā izlaistajā Rust 1.97.0 stabilajā versijā kompilators pēc noklusējuma sāk lietot tā saukto v0 simbolu kodēšanas shēmu (symbol mangling). Iespēja pieslēgties tai ar karogu -Csymbol-mangling-version=v0 pastāv kopš Rust 1.59, tātad no 2022. gada. Tagad tā kļūst par noklusējumu visiem, kas būvē ar stabilo toolchain, un ar to noslēdzas pāreja, kas ievilkās aptuveni astoņus gadus.

Vecā shēma balstījās uz C++ Itanium ABI, kas Rust vajadzībām nekad nebija domāta. Ģeneriskos parametrus tā pārvērta jaucējkodos (hash), tāpēc no gatavā binārā faila nevarēja atgūt, ar kuriem tipiem funkcija patiesībā tika instancēta. v0 šos parametrus saglabā tieši simbola nosaukumā.

Ko maina jaunā simbolu shēma

Praktiskā ietekme skar rīkus, kas lasa binārā faila simbolus: atkļūdotājus, profilētājus un backtrace izvadi. Ja Rust kods sāk izmantot v0, bet debuggeris vai profilētājs ir vecs, tas simbolus var nespēt atkodēt (demangle) un rādīs neapstrādātu _R... nosaukumu. Arī backtrace teksta formāts izskatīsies citādi nekā līdz šim. GDB un LLDB v0 atbalsta jau vairākus gadus, tāpēc lielākajai daļai izstrādātāju nekas nemainīsies, bet vecākas profilēšanas rīku versijas var vajadzēt atjaunināt.

Pretī tam v0 dod skaidrākus simbolus. Tā kā ģeneriskās instances tagad ir daļa no nosaukuma, no faila var precīzāk saprast, kura Vec<T> vai HashMap<K, V> variācija atbilst konkrētam mašīnkoda gabalam. Tas noder gan atkļūdošanā, gan bināro failu izmēra analīzē.

build.warnings — brīdinājumu kontrole bez kešatmiņas izmešanas

Otrs praktiski svarīgākais jauninājums ir stabilizēta Cargo konfigurācija build.warnings. Tā nosaka, kā vietējo pakotņu lint brīdinājumi ietekmē būvēšanu: allow tos noklusē, warn (noklusējums) rāda, bet neapstādina būvēšanu, un deny pārvērš tos par kļūdām. To pašu var uzstādīt ar vides mainīgo CARGO_BUILD_WARNINGS=deny.

Līdz šim brīdinājumu aizliegšanu CI vidē parasti dabūja ar RUSTFLAGS="-Dwarnings". Problēma bija tā, ka šis karogs maina kompilatora argumentus un tāpēc izmet būvēšanas kešatmiņu — CI katru reizi būvēja no jauna.

Jaunā pieeja to atrisina. Tā kā build.warnings ir Cargo konfigurācija, nevis kompilatora karogs, tās maiņa neizraisa pārbūvi no nulles. Komanda var lokāli strādāt ar warn, bet CI darbā uzstādīt deny, un abos gadījumos tiks izmantota tā pati kešatmiņa. Refaktorēšanas laikā to var uz brīdi pārslēgt uz allow, lai brīdinājumu troksnis netraucē, arī nezaudējot iepriekš sabūvēto.

Linkera izvade vairs nav noslēpta

Rust 1.97 arī pārstāj slēpt linkera izvadi. Agrāk linkera ziņojumi tika noklusēti, ja vien būvēšana neizgāzās; tagad tie parādās kā brīdinājuma līmeņa lint ziņojumi. Kompilators atsijā zināmos viltus pozitīvos, bet pārējos rāda, tāpēc problēmas ar linkeri — piemēram, neatrastas bibliotēkas vai simbolu konflikti — kļūst redzamas agrāk. Kam šī izvade traucē, to var atkal apklusināt ar konfigurāciju.

Jaunās stabilizētās API

Versija stabilizē 11 API un metodes. Ievērojamākās ir veselo skaitļu bitu manipulācijas metodes isolate_highest_one, isolate_lowest_one, highest_one, lowest_one un bit_width, kā arī to atbilstošie NonZero varianti. Tās ļauj tīri uzrakstīt darbības, kurām agrāk vajadzēja pašam kombinēt leading_zeros un maskas. Piemēram, bit_width atgriež bitu skaitu, kas nepieciešams skaitļa attēlošanai, bez manuālas aprēķināšanas.

Papildus char::is_control tagad ir izmantojama const kontekstos, kā arī pievienoti daži trait realizējumi, tostarp Default priekš RepeatN un Send priekš std::fs::File uz UEFI. Pilns saraksts ir releases.rs 1.97.0 lapā.

Kas jādara pirms atjaunināšanas

Lielākajai daļai projektu atjaunināšana ar rustup update stable paies bez sarežģījumiem. Uzmanība jāpievērš tur, kur ir savs process bināro simbolu apstrādei: pašrakstīti profilēšanas skripti, vecākas perf vai addr2line versijas vai rīki, kas pieņem, ka simboli izskatās kā līdz šim. Ja komanda CI ir izmantojusi -Dwarnings caur RUSTFLAGS, šī ir laba reize to nomainīt uz build.warnings = "deny" un atgūt kešatmiņas priekšrocību. Detalizētu pārskatu par pāreju sniedz arī LWN.net raksts.

Avoti

komentārisaruna

Komentāri

Šim rakstam vēl nav komentāru. Esi pirmais, kurš dalās ar savu viedokli.

Pievieno komentāru

Tavs e-pasts netiks publicēts. Obligātie lauki atzīmēti.

vēl no programmatūrasaistītie