programmatūra · 6 min · 11.09.2026

mold 2.42.1 ir pēdējā C++ versija, nākamo linkeri pārraksta Rust valodā

Ātrais linkeris mold 11. septembrī saņēma versiju 2.42.1. Laidiena piezīmēs autors Rui Ueyama raksta, ka šī visticamāk ir pēdējā C++ valodā rakstītā mold versija. Nākamais lielais laidiens, mold 3.0, būs pārrakstīts Rust valodā.

mold pirmkods GitHub parādījās 2020. gada septembrī. Repozitorijam šobrīd ir 16 968 zvaigznes, licence ir MIT. Ueyama ir arī LLVM lld autors, tātad viņš ir uzrakstījis divus no trim ātrajiem Unix linkeriem, kas parādījušies pēdējos piecpadsmit gados. Līdz ar valodu mainās arī mērķis. mold 3.x sērijas galvenais uzdevums ir kļūt par sistēmas linkeri /usr/bin/ld Linux distributīvos.

Sešus gadus C++, tagad Rust

Kad Ueyama 2020. gadā sāka rakstīt mold, Rust vēl bija samērā jauna valoda. 2026. gadā tā ir praktiska izvēle sistēmu programmatūrai: ātrums ir salīdzināms ar C++, klāt nāk atmiņas drošības garantijas. Pārrakstīšana tomēr ir risks. To Ueyama neslēpj. Laidiena piezīmēs viņš atzīst, ka pēdējā laika AI kodēšanas rīki lielapjoma pārrakstīšanu padarījuši ievērojami praktiskāku, bet riskus tie nenoņem.

Cilvēki uzticas mold, jo tas vienkārši strādā. Šo uzticēšanos mēs nevaram atļauties zaudēt.

Lietotājam mold 3.0 esot jāstrādā tāpat kā līdz šim. Mainās implementācija zem pārsega. Datumu Ueyama nav nosaucis.

GNU ld joprojām ir noklusējums

Divdesmit gadu laikā ir tapuši vairāki ātri linkeri: gold, lld un mold. Tomēr /usr/bin/ld lielākajā daļā distributīvu joprojām ir GNU ld. Linkēšanas darbs, ko mold pabeidz dažos simtos milisekunžu, ar noklusējuma linkeri var aizņemt sekundes, desmitiem sekunžu vai pat minūtes.

Daļu vainas Ueyama uzņemas pats. Viņš raksta, ka gadiem ilgi taisījis linkerus ātrākus, bet par maz darījis saderības darbu, bez kura ātrs linkeris neder par sistēmas linkera aizvietotāju. Lai to mainītu, mold vispirms jāiegūst trūkstošās linkera skriptu iespējas. Tikai ar tām var salinkēt kodolu un programmaparatūru. Pēc tam nāk plaša saderības testēšana un darbs ar distributīvu izstrādātājiem.

Savā ierakstā X Ueyama to saka īsāk: mold jāspēj salinkēt būtībā viss tas pats, ko spēj GNU ld, ieskaitot kodolus un iegultās programmas. Tieši tāpēc darbs pie linkera skriptiem notiek vienlaikus ar pāreju uz Rust.

Praksē mold jau tagad ir daudzu komandu izvēle. Linkeris ražošanā tiek lietots kopš 2021. gada. Lielos atvērtā koda projektos tas bieži ir noklusējuma linkeris būvēšanas konfigurācijā. Tas gan nozīmē vienu rindu projekta būvēšanas failā vai -fuse-ld=mold karodziņu. Sistēmas linkera nomaiņa ir cita mēroga solis: tad ar mold jāsalinkē viss distributīvs, arī kodols un zema līmeņa pakotnes, kurās linkera skripti ir ikdiena.

Inkrementālā linkēšana vairs nav aizliegta tēma

Agrāk mold plānos inkrementālā linkēšana neparādījās. Lietotāji to bieži uztvēra kā principiālu atteikumu. Laidiena piezīmēs Ueyama skaidro savu nostāju. Kopš lld izstrādes sākuma pirms vairāk nekā desmit gadiem viņš gribēja vispirms padarīt pilnu linkēšanu ātru, ideālā gadījumā tuvu vienkāršai faila kopēšanai. Tas lielā mērā ir izdevies. Šobrīd mold vairāku gigabaitu lielus bināros failus salinkē vienā vai divās sekundēs.

Ar to mainās arī prioritātes. Ueyama pieļauj, ka pudeles kakls rediģēšanas un būvēšanas ciklā tagad ir citur, piemēram, kompilatora ātrumā. Inkrementālā linkēšana no plāniem tomēr nav izsvītrota. Komanda meklē pietiekami vienkāršu risinājumu, kas dotu ieguvumu daļai slodžu bez mold uzbūves sarežģīšanas.

Otrs Rust linkeris jau strādā

Rust rakstīts linkeris Linux videi jau eksistē. To sauc wild. Galvenais uzturētājs ir Deivids Latimors, izstrādi finansē AWS. 2026. gada 30. jūnijā wild uzņēma Rust Foundation Innovation Lab. Inkrementālā linkēšana wild projektā ir mērķis kopš pirmās dienas.

mold 2.42.1 piezīmēs teikts, ka pēc pēdējo laidienu optimizācijām mold ir tikpat ātrs vai ātrāks par citiem augstas veiktspējas linkeriem, ieskaitot LLVM lld un wild. Etalonu skaitļu tur nav. Phoronix savā ziņā par pāreju norāda uz to pašu: mold Rust versija sacentīsies ar linkeri, kas Rust valodā rakstīts jau no sākuma.

Ko labo pēdējais C++ laidiens

Versija 2.42.1 galvenokārt ir labojumu laidiens. Vairākas kļūdas skāra lielus C++ projektus.

  • Tukšs izvīšanas ieraksts, ko atstāja kompilatora optimizācijas, varēja noslēpt esošu izņēmumu apstrādātāju. Programma avarēja arī tad, kad izņēmumam vajadzēja tikt noķertam.
  • LTO un ne-LTO arhīvu sajaukums izraisīja kļūdainus ziņojumus par dublētiem simboliem.
  • Sistēmās ar izslēgtu atmiņas pārpieteikšanu (vm.overcommit_memory=2) pat neliela linkēšana varēja beigties ar kļūdu fork: Cannot allocate memory. Tagad mold atmiņu pieprasa pakāpeniski.
  • Ubuntu 25.10 asambleris dažkārt izdod tukšu .sframe sekciju, ko mold uzskatīja par bojātu. Tagad tā tiek pieņemta.
  • Ļoti lielos projektos, piemēram, Godot sanitizer būvējumos, parādījās kļūdaini pārvietojumu pārpildes ziņojumi.
  • AArch64 platformai pievienota opcija -z rewrite-endbr. mold redz, kurām funkcijām bti c nolaišanās laukumi tiešām vajadzīgi, pārējos aizstāj ar NOP.
  • s390x labota nepareiza instrukciju kodēšana vairākiem pārvietojumiem ar 12 bitu nobīdi.

Divi labojumi novērš 2.42.0 regresijas. Opcija --emit-relocs varēja piesaistīt pārvietojumus nepareiziem simboliem, īpaši uz RISC-V un LoongArch. ABI pārbaudes rīki ziņoja par izmaiņām tāpēc, ka simboli _DYNAMIC un _end bija kļuvuši globāli.

Apjoms, kas jāpārraksta, GitHub valodu statistikā ir 1 228 318 baiti C++ koda. Projektu finansiāli atbalsta arī SAP, Cybozu un Mercedes-Benz Group.

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