Istraživači Laboratorija za računalne znanosti i umjetnu inteligenciju pri MIT-u razvili su novi revolucionarni alat za recikliranje koda.

Možda je bizarno početi priču o računalnom kodu anegdotom iz povijesti medicine. Ipak, u ovom slučaju možemo mirne duše napraviti iznimku i vratiti se u predračunalno doba, točnije – u rano 18. stoljeće.

Britanski liječnik James Blundell u to je doba imao samo 28 godina, ali i pozamašno iskustvo. Još važnije, bio je hrabar i domišljat upravo onda kad je to bilo najpotrebnije. Tog povijesnog dana pacijentici oboljeloj od hemofilije dogodilo se ono najgore – pri porodu je izgubila kritičnu količinu krvi. Blundell je znao da će je izgubiti, ne odvaži li se na nešto što je u to doba bilo nezamislivo. Nakon kraćeg razmišljanja odlučio je djelovati. Pacijentičinu suprugu injekcijom je izvadio taman toliko krvi da ga ne dovede u životnu opasnost, a opet dovoljno da pomogne njegovoj družici.

Tako je 1818. izvedena prva uspješna transfuzija krvi s jednog ljudskog bića na drugo. Blundell je nakon toga izveo desetak takvih zahvata, no uspješan je bio tek u pola slučajeva. Danas znamo i zašto. Nije svačija krv ista i transfuzija je moguća samo ako su donor i primatelj kompatibilni.

No kakve to veze ima s računalnim kodom? Odgovor je vrlo jednostavan. Baš kao krv kod ljudi, sekvence koda javljaju se u više varijanti – mnogi programi za iste se zadaće koriste različitim sljedovima naredbi, a kada bismo neki od tih sljedova iz jednog programa presadili u drugi, stvar jednostavno ne bi funkcionirala.

Novosti s MIT-a

Upravo s tom nekompatibilnošću u koštac su se uhvatili istraživači Laboratorija za računalne znanosti i umjetnu inteligenciju (CSAIL) pri MIT-u.

Razvili su novi sustav koji programerima omogućuje presađivanje koda iz jednog programa u drugi.

Procedura je razmjerno jednostavna – valja samo izabrati dio koda koji želimo preseliti te odrediti mjesto u odredišnom programu na koje će biti umetnut. Sustav zatim automatski obavi potrebne preinake – primjerice promjenu imena varijabli – kako bi taj kod integrirao u novi okoliš. U ovom trenutku dolazimo do ključne značajke.

Sustav je osposobljen za prevođenje između “reprezentacija podataka” kojima se koriste program-donor i program-primatelj.

Najbolji su primjer programi za obradu slike, koji se moraju nositi s cijelom paletom formata – jpeg, tiff, png… Nastavite niz. Program će svaku od tih slika predstaviti uz pomoć jedne jedine standardizirane sheme. No različiti programi koriste se različitim internim shemama.

Novi revolucionarni alat

Istraživači na CSAIL-u uspjeli su svoj sustav osposobiti da automatski mapira shemu donora na shemu primatelja kako bi se kod mogao glatko importirati. Tako je nastao CodeCarbonCopy – novi revolucionarni alat za recikliranje koda.

– CodeCarbonCopy omogućio nam je da dosegnemo jedan od svetih gralova u izradi softvera, a to je automatska ponovna uporaba koda -“ponosno se svojim “čedom” pohvalio Stelios Sidiroglou-Douskos, istraživač pri CSAIL-u. – Važan je to korak prema automatizaciji čiji će konačni rezultat čovjeka osloboditi dosadašnjeg nužnog zla – sudjelovanja u razvojnom ciklusu. Uvjereni smo da je čovječanstvo dosad napisalo većinu softvera koji će civilizaciji ikad biti potreban. Sad ga samo trebamo naučiti reciklirati.

Većina eksperimenata uspješno završena

Tvorci CodeCarbonCopyja uvjereni su da je upravo njihov alat ključan korak na tom putu. Proveli su osam eksperimenata tijekom kojih su transplantirali kodove između šest najkorištenijih open-source programa za obradu slike. U čak sedam slučajeva presađivanje je uspjelo, a program-primatelj uspio je funkcionalno obaviti zadaću.

Kako funkcionira?

No kako CodeCarbonCopy uopće uspijeva pomiriti različitosti programa među kojima posreduje? Prvi je korak vrlo domišljat – u oba se programa otvori isti file. Sustav zatim uspoređuje na koji ga način programi procesiraju. Ako, primjerice, program-donor obavlja slijed operacija na nizu podataka i pridružuje rezultat varijabli nazvanoj “mem clip->width,” a program-primatelj rezultat istog slijeda operacija sprema u varijablu “picture.width,” sustav će zaključiti da te varijable, svaka u svojemu programu, igraju istu ulogu.

Kad utvrdi takve korespondencije među varijablama, CodeCarbonCopy pokazuje ih korisniku. K tomu, ukazuje mu i na varijable u programu-donoru za koje nije mogao naći pandan u programu-primatelju, pri čemu navodi i njihove početne definicije. One često kod donora imaju ulogu koja je za primatelja nevažna. Korisnik ih u tom slučaju može obilježiti kao irelevantne, a CodeCarbonCopy automatski će obaviti svaku operaciju koja se njima koristi iz transplantiranog koda.

Kako bi mapirao predstavljanje podataka iz jednog programa u drugi, CodeCarbonCopy obraća pozornost na precizne vrijednosti koje oba programa skladište u memoriji. Uzmimo jednostavan primjer. Svaki piksel u digitalnoj slici definiran je uz pomoć triju vrijednosti: crvene, zelene i plave. Neki programi te triplete čuvaju redoslijedom crvena-zelena-plava, a drugi preferiraju redoslijed plava-zelena-crvena.

Kad CodeCarbonCopy pronađe sustavnu vezu između vrijednosti kojima se koriste dva programa, generira skup operacija kojima se te reprezentacije prevode.

Sljedeći koraci

Sustav je zasad vrlo uspješan s file-formatima poput slika, čiji su podaci strogo organizirani, te s programima za obradu slike, koji podatke skladište u nizovima memorijskih jedinica identične veličine.

Sljedeći korak u istraživanju bit će uopćavanje sustava, kako bi se omogućila njegova primjena na fleksibilnije obrasce organizacije podataka.

– Citiranje koda uzrok je mnogim nedaćama vezanim uz izradu i uporabu softvera – pojašnjava Vitaly Shmatikov, profesor računalnih znanosti na Cornell Techu, koji su zajednički pokrenuli Sveučilište Cornell i izraelski Technion. – Bugovi i sigurnosne slabe točke često se javljaju kad se funkcionalna rješenja iz jednog konteksta pokušavaju presaditi u drugi. Dovoljno je napraviti malu grešku i stvar se raspadne. Automatizirana procedura za preseljenje koda iz jednog okruženja u drugo značila bi golem napredak, a ovo je vrlo značajan korak u tom smjeru.

Još smo daleko od rutinskih transfuzija podataka, poput onih kojima se danas, kad je u pitanju ljudska krv, koristi suvremena medicina. No, za razliku od ranih eksperimenata na području hematologije, u transplantaciji koda možemo si mirne duše, bez straha od tragičnih posljedica, dopustiti eksperimente. Upravo tu mogućnost iskoristili su stručnjaci CSAIL-a i tako nas približili svijetu softverskih lego-kockica, koje su već tu – i samo ih treba ugraditi na pravo mjesto.