Neomejen dostop | že od 9,99€
Doc. dr. Matija Pretnar z ljubljanske fakultete za matematiko in fiziko (FMF) je dobitnik prestižne nagrade na področju programske opreme – test of time award, ki jo podeljuje ETAPS, Evropska krovna konferenca o teoriji in praksi programske opreme. Nagrado si deli s kolegom in mentorjem, prof. dr. Gordonom D. Plotkinom z edinburške univerze, in sicer za prestreznike učinkov, ki so elegantno orodje za izražanje številnih pojmov v različnih programskih jezikih.
Članek je bil odgovor na vprašanje, ki je bilo takrat odprto slabih deset let. Moj mentor prof. Plotkin je s sodelavcem Johnom Powerjem odkril nov način, kako v programskih jezikih predstaviti računske učinke, ki za seboj potegnejo vrsto zapletov. Teoretični računalničarji skušamo s pomočjo matematike analizirati programe, ki bi jih najraje opisali s funkcijami v matematiki. Vendar so matematične funkcije v nasprotju s programi čiste, nimajo stranskih učinkov, vsakič dajo isti rezultat in se med računanjem ne sesujejo.
Računalničar Eugenio Moggi je v ta namen v funkcijskem programiranju na začetku 90. let vpeljal monade, sicer že od prej znan matematični pojem, ki so postale pomembne strukture v programiranju, Plotkin in Power pa sta nato okoli leta 2000 predstavila še nekoliko bolj prefinjeno ali razdelano različico monad, proste algebre, v katerih si lahko vsako izvajanje programa predstavljamo kot drevo, ki se ob vsakem učinku razveji na toliko vej, kolikor je možnih izidov učinka. Kar nekaj problemov je bilo s tem rešenih, seveda pa ne vsi in ena kritična točka so bili prestrezniki izjem.
S prestrezniki učinkov lahko ulovimo posamezne dogodke, ki jih sprožijo programi, hkrati pa imamo še vedno dostop do preostanka programa. Primer: rad bi, da računalnik pregleda vse možnosti, zato mu v programu na določenih mestih napišem, naj se odloči med dvema ponujenima možnostma. Ne pozabimo, računalnik je samo stroj, on ne tehta tako kot ljudje, ampak potrebuje natančna navodila. Zato okoli programa ovijemo še prestreznik učinkov, ki določi, da naj ob vsaki odločitvi preostanek izvede s prvo izbiro. Če je rezultat uspešen, lahko izvajanje konča, če ni, naj poskusi še drugo možnost.
Še en primer je pri sočasnem izvajanju več ukazov, ki se med seboj izmenjujejo. S prestreznikom lahko določite, na kakšen način naj program na neki točki počaka in da prednost drugemu ukazu.
Vse to se je že prej dalo opisati v programskih jezikih, ampak dostikrat je bilo treba preurediti celoten program, prestrezniki učinkov pa to omogočajo s spremembo samo enega dela programa.
Prestreznike so najprej posvojili v funkcijskem programiranju, ki je najbližje matematiki. Zanimivo je, da ideje, ki so jih funkcijski programerji imeli pred 30 leti, zdaj počasi prihajajo v vodilne programske jezike. Dodajanje novih orodij obstoječim programskim jezikom je seveda precej zapleteno zaradi združljivosti s starimi različicami. Prav zares bodo denimo prestreznike implementirali v novi verziji programskega jezika OCaml, ki je eden bolj znanih funkcijskih jezikov. Presenetilo pa me je, da so jih v svoji knjižnici uporabili pri podjetju Meta, ki ga bolj poznamo pod imenom Facebook. To je knjižnica React, ki se uporablja za uporabniške vmesnike na spletu, ima jo skoraj vsaka druga stran, čeprav se seveda večina nas tega ne zaveda.
Kot se pogosto zgodi, so stvari ušle z vajeti (nasmeh). Z njimi se je ukvarjala skupina v Edinburgu, predvsem Ohad Kammar in Sam Lindley, sam sem se vrnil v Slovenijo, kjer sva s profesorjem Andrejem Bauerjem razvila prototipni programski jezik Eff. Z njim sva želela pokazati, kako prestrezniki delujejo, saj so bili do takrat samo ideja na papirju. Kmalu zatem so seveda rešitev prevzeli tudi drugi programerji in jo preizkušali v drugih jezikih. Ideja se je pravzaprav ponekod tako preoblikovala, da je niti ne prepoznam več.
Da, imam še veliko vprašanj, ki bi jih rad razrešil. Trenutno se ukvarjam s tem, kako bi bili čim bolj učinkoviti. Programski jezik je most med računalnikom in človekom in želimo, da bi človek svoje ideje izrazil čim bolj jasno in na enostaven način, računalnik pa mora nato to učinkovito izvesti. Prvi del smo nekako pokrili, pri drugem delu pa zdaj dobivamo obetavne rezultate. Omenil sem, da imajo prestrezniki, ko se nekaj zgodi, dostop do preostanka programa, ki ga lahko izvedejo enkrat, večkrat ali pa nikoli. Večina prestreznikov to nadaljevanje izvede največ enkrat in temu so prilagojene trenutne implementacije, v primeru večkratnih ponovitev pa je izvajanje manj učinkovito. Zdaj poskušam rešiti to zagato.
Sodelujem tudi pri vpeljavi prestreznikov v programski jezik WebAssembly, ki so ga začeli razvijati veliki igralci od Appla do Microsofta, saj želijo nov standard, ki naj bi nadomestil JavaScript. Ta jezik ima formalno matematično specifikacijo in po narejeni osnovni verziji so začele kapljati želje, kaj vse naj še vsebuje. Izkazalo se je, da bi lahko več teh zmožnosti izrazili z enim orodjem, to je s prestrezniki.
Najprej sem bil matematik. Kot otroka me programiranje ni zanimalo, potem pa me je na fakulteti prof. Andrej Bauer navdušil nad teoretičnim računalništvom. Na FMF imamo zelo močno skupino na tem področju, kar dokazuje tudi to, da bomo letos po zaslugi prof. Bauerja gostili največjo konferenco s področja funkcijskega programiranja. S programiranjem sem vseskozi v stiku, saj o tem tudi predavam in študentom želim predstaviti najnovejše smernice.
Teoretično računalništvo skuša rešitve, ki so se že pojavile v praksi, spraviti v matematične okvire, da bi bilo tako manj napak, da bi še hitreje lahko pisali programe. Z matematiko tako formaliziramo računalništvo, hkrati pa v njej iščemo navdih za nova orodja. Programer Leo White je to lepo opisal, da je teorija programskih jezikov kot arhitektura. Kot arhitekti se moramo držati pravil, da bo hiša stala in bo varna in stabilna, kakšna bo videti, pa si lahko izmišljuješ. Včasih lahko kar nekaj časa tavaš v temi. Najbolj mi je všeč to odkrivanje stvari, ki so že tam, a so vseeno skrivnostne. Mi nikoli ne rečemo, da smo nekaj izumili, ampak da smo nekaj odkrili. Tudi prestrezniki so leta čakali, da bomo lahko prek njih izrazili svoje ideje.
Teoretično računalništvo se je začelo razvijati, preden smo sploh imeli računalnike, pravi razmah pa je doživelo po drugi svetovni vojni. Na tem področju smo tako šele na začetku in potencial je ogromen. Študentom pogosto povem, da mi iščemo rešitve, ki bodo uporabne čez 30 let. Nekoliko pri tem zamolčim, da je tako tudi zato, ker tvojega dela nihče ne opazi. Mi delamo orodja za ljudi, ki delajo orodja za ljudi … Ta veriga je lahko zelo dolga. Vendar se je tudi pri tej nagradi, ki sva jo dobila za delo, staro le malo več kot deset let, izkazalo, da nas vseeno nekdo spremlja.
Pri vsem tem pa mora biti zraven še sreča. Precej stvari se je moralo poklopiti: v pravem trenutku videti problem, ga rešiti, ampak predvsem gre zasluga drugim strokovnjakom, ki so v preteklosti morali postoriti marsikaj, da so celotno področje pripeljali do točke, ko naše ideje, čeprav se včasih zdi, da gre za neuporabno teorijo, prepoznajo tudi v praksi.
Hvala, ker berete Delo že 65 let.
Vsebine, vredne vašega časa, za ceno ene kave na teden.
NAROČITEObstoječi naročnik?Prijavite se
Komentarji