Bijušais Heap vadītājs Malkolms Matiss 9. jūlijā paziņoja, ka viņa projekts pgrust — PostgreSQL, kas pārrakstīts Rust valodā — iztur visus 46 000 vaicājumu Postgres 18.3 regresijas testu komplektā. Kodu, vairāk nekā 450 000 rindu Rust, sarakstīja nevis cilvēki pie tastatūras, bet astoņi paralēli strādājoši AI kodēšanas aģenti.
Virsraksts skan iespaidīgi: AI atkārtojis vienu no pasaules nobriedušākajām atvērtā koda datubāzēm. Detaļas stāsta ko citu, un tieši tās izraisīja 620 komentāru garu diskusiju Hacker News, kur ieraksts savāca 740 punktu.
Divi mēģinājumi, no kuriem nostrādāja otrais
Matiss projektu sāka aprīlī, rakstot Rust kodu no nulles. Pirmajā dienā, 9. aprīlī, strādāja pamata vaicājumu izpilde. Viņš izmantoja Codex, lai tas izskaidro PostgreSQL pirmkodu, tad būvēja minimālas Rust implementācijas. Kad viens aģents kļuva par šauro vietu, viņš caur rīku Conductor vienlaikus darbināja līdz 17 kodēšanas aģentiem un mēnesī tērēja aptuveni 1600 dolāru Codex API maksās. Divās nedēļās viņš saapvienoja 280 izmaiņu pieprasījumus un līdz maija sākumam sasniedza 96 % savietojamības.
Tur pieeja no nulles apstājās. Matiss atzīst, ka pēdējie procenti bija grūtākie: «Bieži maza funkcija, kas prasa mainīt esošo kodu, ir daudz grūtāka nekā liela, pilnīgi jauna funkcija.» Atlikušie testi prasīja iebīdīt jaunu uzvedību koda vietās, kuras aģenti negribēja aiztikt.
Otrais mēģinājums bija pavisam cits. Vispirms rīks c2rust mehāniski pārtulkoja PostgreSQL C kodu Rust valodā — rezultāts bija pilns ar unsafe blokiem, taču jau spēja izpildīt SQL regresijas testu kodolu. Pēc tam PostgreSQL sadalīja aptuveni tūkstoš atsevišķās Rust pakotnēs (crates), un Claude tās pārrakstīja un pārbaudīja pa vienai. Tieši šī versija 9. jūlijā aizsniedza 100 %. pgrust vienlaikus atteicās no PostgreSQL procesa-uz-savienojumu modeļa par labu pavediena-uz-savienojumu modelim.
Matiss uzsver, ka pati pieeja ir jauna: «Es nedomāju, ka šis projekts būtu bijis iespējams pirms diviem gadiem, nemaz nerunājot par pirms sešiem mēnešiem.» Tieši tas padara stāstu interesantu — un tieši tāpēc ir vērts skatīties, kur tas neturas kopā.
Ko īsti nozīmē «iztur visus testus»
PostgreSQL regresijas komplektā ir aptuveni 230 testu failu ar desmitiem tūkstošu SQL priekšrakstu. Tie pārbauda, vai vaicājums atgriež pareizo rezultātu — dokumentētu, paredzamu uzvedību. Tie nepārbauda avārijas atkopšanu, sacīkšu stāvokļus vai ilgtermiņa noturību.
Publiskais testu palaidējs izpilda šos aptuveni 230 SQL failus vienu pēc otra, ar karodziņu -F, kas atslēdz fsync. Īstajā PostgreSQL regresija skrien ar aptuveni divdesmit vienlaicīgām sesijām un ieslēgtu diska sinhronizāciju. Tā ir starpība starp «atdod pareizās rindas» un «izdzīvo strāvas zudumu tranzakcijas vidū».
To ātri parādīja SQLsmith — rīks, kas ģenerē nejaušus, sintaktiski derīgus vaicājumus. Dažu dienu laikā tas panāca pgrust segmentācijas kļūdu (segfault), ko īsts PostgreSQL šajā vietā neizdarītu.
«Eksāmenu var nokopēt, eksaminētājus nevar»
Datubāzu inženieris Vonngs savā apskatā apgalvo, ka pgrust PostgreSQL nepārrakstīja, bet pārtulkoja, un to sauc par «koda mazgāšanu». Viņa arguments balstās domā, ka PostgreSQL uzticamība dzīvo četros slāņos: testos, pirmkodā, vēsturē un cilvēkos. c2rust pārnesa pirmos divus. Trešais un ceturtais palika ārpus tulkojuma.
Eksāmenu var nokopēt. Eksaminētājus nevar.
Kā piemēru viņš min 2018. gada «fsyncgate» — divdesmit gadus ilgu pārpratumu par to, kā Linux fsync ziņo par kļūdām. Neviens tests to nenoķēra gadiem. Postgres to salaboja tāpēc, ka pieredzējuši izstrādātāji saprata problēmu; testu komplekts par to neko nezina. PostgreSQL koku uztur 121 nosaukts līdzstrādnieks un tūkstošiem citu; šī cilvēku atmiņa par to, kāpēc katrs labojums tapa tāds, kāds tas ir, tulkojumā nepārceļas.
Kas vēl trūkst produkcijai
Matiss pats saka, ka pgrust nav gatavs produkcijai. Lielākais robs ir paplašinājumi: PostgreSQL ekosistēmā ir vairāk nekā 1600 paplašinājumu, no kuriem ap 500 tiek reāli lietoti. pgrust pagaidām pārnesis aptuveni 12 contrib moduļu. Viens vienīgs PostGIS ir viens līdz divi miljoni rindu plus plaša atkarību virkne.
Ir arī licences barjera. pgrust izmanto AGPLv3, kamēr PostgreSQL izmanto savu pieļāvīgo licenci. Tas nozīmē, ka pgrust kodu nevar ieņemt PostgreSQL galvenajā kokā, saglabājot esošo licenci. Vonngs piebilst, ka nevienā .rs failā neatrada PostgreSQL autortiesību paziņojumu.
Ātruma solījumi pagaidām nav pārbaudāmi. Matiss vēl neizlaistajā v0.2 min 50 % ātrāku darījumu caurlaidību par PostgreSQL Percona-TPCC testā un aptuveni 300 reižu ātrākas analītiskās operācijas, taču bez publiska koda un mērījumu artefaktiem. Citos skaitļos aina ir raibāka: ClickBench testā pgrust ir divreiz lēnāks par ClickHouse, bet regulāro izteiksmju operācijās aptuveni 10 reižu ātrāks par PostgreSQL. OrioleDB veidotājs Bens Dikens teica, ka projekts vēl neatbilst viņa latiņai. Skeptiķi Hacker News jautāja to pašu, ko jautātu jebkurš datubāzu inženieris: vai mērījumos bija ieslēgts fsync, un vai vispār ir reāli pārspēt ClickHouse, kurā ieguldīti simtiem cilvēkgadu.
pgrust GitHub lapā ir ap 1000 zvaigžņu, Docker konteiners un WebAssembly demonstrācija vietnē pgrust.com. Kods ir pieejams, un pēc SQLsmith rezultāta katrs to var pārbaudīt pats.
Komentāri
Šim rakstam vēl nav komentāru. Esi pirmais, kurš dalās ar savu viedokli.