Pluto.jl, Julia programmēšanas valodas populārākais atvērtā koda projekts, jūnija sākumā sasniedza versiju 1.0 pēc sešiem izstrādes gadiem. Stabilā versija dod vienu konkrētu solījumu: notebook fails pats satur precīzas izmantoto pakotņu versijas, tāpēc tas palaižas identiski arī uz cita cilvēka datora.
Pluto glabā notebookus kā parastus .jl failus, nevis JSON, un katrā failā ieraksta tieši tās pakotņu versijas, ar kurām autors strādāja. Kad kāds cits atver failu, Pluto atjauno to pašu vidi automātiski. 1.0 zīme nozīmē, ka API vairs nemainīsies negaidīti, un uz to var paļauties mācību kursi, pētniecības konveijeri un iestādes. Julia ir programmēšanas valoda skaitliskiem un zinātniskiem aprēķiniem, un Pluto tajā ieņem apmēram to pašu lomu, ko Jupyter Python pasaulē.
Kāpēc Jupyter notebooki bieži neatkārtojas
Notebooku atkārtojamība ir sena problēma. GigaScience publicētā pētījumā 10 388 biomedicīnas Jupyter notebooki tika palaisti no jauna tīrā vidē, un tikai 879 — mazāk nekā viens no divpadsmit — deva tieši tādus pašus rezultātus kā sākotnēji ziņots. Divi galvenie iemesli bija slēptais stāvoklis atmiņā un šūnu izpilde tādā secībā, kas neatbilst tam, kā kods izskatās ekrānā.
Jupyter un Matlab ļauj šūnas palaist jebkurā secībā, un mainīgais, ko definēja izdzēsta šūna, var palikt atmiņā. Rezultāts izskatās pareizs, bet to nevar atkārtot, jo tas balstās uz kaut ko, kas failā vairs nav redzams.
Praksē tas nozīmē, ka pētnieks var publicēt notebooku kopā ar rakstu, un recenzents to atver un palaiž ar pārliecību, ka skaitļi sanāks tie paši. Ar Jupyter recenzentam bieži jāuzmin, kādā secībā šūnas jāizpilda un kādas bibliotēku versijas autoram bija instalētas.
Reaktīvais atkarību grafs
Pluto to risina ar reaktīvo modeli. Atverot notebooku, tas ar statisko koda analīzi — bibliotēkām ExpressionExplorer.jl un PlutoDependencyExplorer.jl — izveido atkarību grafu starp šūnām. Ja maini vienu šūnu, Pluto pats no jauna izpilda visas šūnas, kuru rezultāts no tās atkarīgs. Kad izdzēš šūnu, kas definēja mainīgo, Pluto to mainīgo izņem no vides. Nav pogas «palaist visu» un nav darba vietas, kas paliek pāri no iepriekšējiem mēģinājumiem. Pluto pārrēķina tikai skartās šūnas, nevis visu failu, tāpēc arī lielā notebookā viena izmaiņa neprasa gaidīt visa koda atkārtotu izpildi.
Jebkurā brīdī programmas stāvokli pilnībā apraksta kods, ko redzi. Nav slēpta stāvokļa, nav slēptu kļūdu.
Šim modelim ir sava cena. Katru mainīgo Pluto atļauj definēt tikai vienā šūnā — divas šūnas ar vienu un to pašu vārdu dod kļūdu, jo grafs citādi nezinātu, kura vērtība ir spēkā. Tas prasa citu domāšanu nekā Jupyter, kur šūnu drīkst pārrakstīt cik reižu grib. Bet tieši šis ierobežojums ļauj Pluto garantēt, ka failā redzamais kods atbilst rezultātam.
@bind sasaista mainīgo ar slīdni
Reaktīvais grafs dod arī interaktivitāti. Ar makro @bind mainīgo var piesaistīt HTML elementam — slīdnim, izvēlnei vai teksta laukam. Kad lietotājs pavelk slīdni, mainās mainīgā vērtība, un Pluto no jauna izpilda visas šūnas, kas no tā atkarīgas. Tā tapušas mācību lapas, kur students groza parametru un uzreiz redz, kā mainās grafiks vai formula, nerakstot nevienu koda rindu. Gatavus elementus dod pakotne PlutoUI ar slīdņiem, pogām, krāsu izvēlni un failu augšupielādi.
Pakotnes un versijas glabājas pašā failā
Katram notebookam ir sava izolēta pakotņu vide ar fiksētām versijām. Pluto ar sintakses analīzi saprot, kuras pakotnes tiek izmantotas, un pats pārvalda vidi. Informācija, kas vajadzīga tieši tās pašas vides atjaunošanai, tiek ierakstīta notebook failā.
Tā kā fails ir parasts Julia pirmkods, to var likt versiju kontrolē un palaist tieši, bez atsevišķa vides apraksta blakus. Git diff parāda tikai koda izmaiņas, nevis JSON metadatu un šūnu izvades juceklīgu maisījumu, kā tas notiek ar Jupyter .ipynb failiem. Kad kolēģis atver failu ar Pluto, tiek izmantota tā pati pakotņu vide, un bibliotēkas strādā uz viņa datora. Šī pieeja atrisina to, ko Jupyter atstāj lietotāja ziņā — iegūt tieši to pašu bibliotēku versiju kopumu.
Kas mainījās 1.0 versijā
1.0 versija ļauj atspējot atsevišķu šūnu, un šī izmaiņa izplatās pa grafu — atspējotas tiek arī visas šūnas, kas no tās atkarīgas. Projekts palaida pluto.land — bezmaksas hostinga pakalpojumu, kur notebooka eksportu var padalīt, un saņēmējam Julia nav jāinstalē.
Pluto pirmoreiz parādīts JuliaCon 2020 konferencē, un pagāja seši gadi, līdz izstrādātāji bija gatavi fiksēt API. Eksports uz pluto.land ir statisks HTML, tāpēc lapu var atvērt jebkurā pārlūkā bez Julia. Pluto tiek izstrādāts kopā ar MIT kursu Computational Thinking un ir pieejams ar MIT licenci. Paziņojums par 1.0 Hacker News savāca vairāk nekā 200 punktu. Pluto jau izmantots skaitļošanas bioloģijā, fizikā, klimata zinātnē un datu zinātnes mācīšanā.
Komentāri
Šim rakstam vēl nav komentāru. Esi pirmais, kurš dalās ar savu viedokli.