programmatūra · 5 min · 16.07.2026

CPython grasās ielaist Rust: pirmais modulis ir base64, PEP jūlijā

Emma Smita un Kirila Podopigora, divi CPython pamatizstrādātāji, ierosina ielaist Rust valodu pašā Python interpretatorā. Viņu pirmspriekšlikums nāk ar strādājošu pierādījumu: _base64 modulis, kas pārrakstīts Rust valodā un jau kompilējas komandas atzarojumā uz visām testētajām platformām. Oficiālo PEP viņi plāno iesniegt jūlijā, un pirmais laidiens ar Rust kodu būtu Python 3.16.

Ideja nav pārrakstīt visu CPython. Sākumā Rust dabūtu tikai daži izvēles standarta bibliotēkas moduļi, un esošo C paplašinājumu autoriem nekas nav jāmaina. Pati doma tomēr ir liela: CPython trīsdesmit gadus ir bijis rakstīts C valodā, un tagad komanda vēlas otru sistēmvalodu blakus.

Kāpēc Rust

Galvenais arguments pirmspriekšlikumā ir atmiņas drošība. Rust kompilators aizliedz lasīšanu un rakstīšanu ārpus atmiņas robežām un use-after-free kļūdas, tātad veselu kļūdu klasi, kas C kodā regulāri pārtop par drošības ievainojamībām. Otrs arguments ir pavedienu drošība: Rust datu sacensības (data races) noķer jau kompilēšanas laikā.

Tas der Python bezglobālās slēdzenes (free-threading) virzienam. Kopš 3.13 CPython var būvēt bez globālās interpretatora slēdzenes, tātad vairāki pavedieni tiešām skrien paralēli pa vienu un to pašu procesu. C kodā, kas rakstīts ar pieņēmumu, ka slēdzene visu sargā, tādā režīmā parādās sacensības, kuras grūti atkārtot un vēl grūtāk atkļūdot. Rust šīs kļūdas noķer, pirms kods vispār nonāk līdz palaišanai.

Kā pierādījumu Smita un Podopigora paņēma tieši base64. Rust versija dod ātruma pieaugumu pret C implementāciju, un modulis ir pietiekami mazs, lai to varētu izmērīt un salīdzināt bez liela riska.

Kā to būvē

Lai Rust kods varētu runāt ar CPython C iekšām, komanda uztaisīja jaunu cpython-sys pakotni. Tā ar bindgen rīku būvēšanas laikā nolasa C galvenes un no tām automātiski ģenerē Rust FFI saites, tāpēc nav jāraksta un jāuztur roku darbs katrai funkcijai atsevišķi.

Atkarības komanda plāno piegādāt kopā ar CPython pirmkodu caur Cargo vendoring. Tas nozīmē, ka Rust bibliotēkas ieceļo pašā avota kokā, un būvēšanas brīdī nekas nav jālejupielādē no interneta. Lietotājam tas nozīmē: sākotnēji Rust paliek izvēles atkarība, tāpēc, lai uzbūvētu Python vai palaistu Python programmas, Rust kompilators nav vajadzīgs. Prasība to obligāti uzstādīt būtu vēlāka, ne agrāk par Python 3.17, un tikai pēc atsevišķas diskusijas.

Termiņi

Grafiks pēdējā gada laikā jau ir pārcelts. Sākotnēji mērķis bija Python 3.15, bet pēc kopienas iebildumiem komanda to nobīdīja uz 3.16. Pēc aprīļa atskaites būvēšanas sistēmas darbs ir pabeigts, un CPython ar Rust veiksmīgi kompilējas atzarojuma CI uz visām pārbaudītajām platformām. Maijā komanda sāka API implementāciju un rīkoja darbnīcu PyConUS. PEP rakstīšana sākās jūnijā, iesniegšana un publiskā apspriešana — jūlijā. Python 3.16 beta versija plānota 2027. gada maijā, pilnais laidiens — oktobrī.

Kur sākas strīds

Kopiena dalījās. Alekss Geiners un Džeimss Vebers priekšlikumu atbalstīja. Stīvs Dauers iebilda pret pašu ideju likt izvēles moduļus valodas kodolā. Vairāki koda uzturētāji uztraucas par jaukto valodu slogu — cilvēkam, kas grib salabot kļūdu, tagad varētu nākties zināt gan C, gan Rust.

Divi tehniskie iebildumi ir nopietnāki. Pirmais ir sāknēšanas problēma: lai uzbūvētu Rust rīkkopu, tradicionāli vajag Python, bet nu CPython gribētu Rust. Otrais nāca no Mihala Gurņi (Gentoo), kurš norādīja, ka Rust neatbalsta daļu neparasto arhitektūru — HPPA, RISC OS un vecākus CentOS laidienus, kur CPython šobrīd strādā ar samērā mazu uzturēšanas piepūli. Ja Rust kļūtu obligāts, šīs platformas nokristu ārā. Tieši šo iebildumu dēļ komanda uz nenoteiktu laiku atlika stingros termiņus, kad Rust būtu jāpieprasa būvēšanai.

Gvido van Rossums šo virzienu nodēvēja par lielisku attīstību un pauda uzticību Smitas vadītajai diskusijai. Python kopiena pret tik lielām izmaiņām mēdz būt piesardzīga, tāpēc valodas radītāja atbalsts diskusiju ievirza.

Pierādījums, atzarojuma CI un Gvido atbalsts ir vienā svaru kausā. Otrā — sāknēšana, retās platformas un uzturētāju bažas. PEP, kas parādīsies jūlijā, būs vieta, kur šos jautājumus izšķir; pati apspriešana, kā rāda līdzšinējo termiņu pārcelšana, var vilkties mēnešiem.

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