Negde u 2019, MIT Ph.D. student Ajai Brahmakshatriia formulisao je jednostavan, ali i dalje prilično izazovan cilj. Želeo je da omogući ljudima koji su imali stručnost u određenom domenu – kao što su klimatsko modeliranje, bioinformatika ili arhitektura – da napišu sopstvene programske jezike, takozvane jezike specifične za domen (ili DSL), čak i ako imaju malo ili bez iskustva u kreiranju programskih jezika.
Član istraživačke grupe na čelu sa profesorom MIT-a Samanom Amarasingheom u Institutu za računarsku nauku i laboratoriju za veštačku inteligenciju (CSAIL), Brahmakšatrija je želeo da ovi jezici dolaze sa svim pomoćnim funkcijama koje bi ljudi trebali da ih udobno koriste, uključujući alate za otklanjanje grešaka. Ovaj proces za otklanjanje grešaka u delu softvera je od suštinskog značaja, složili su se on i Amarasinghe, jer su nedostatak podrške za otklanjanje grešaka nazvali „Ahilovom petom za DSL-ove“.
Bilo je to produktivnih nekoliko godina za oboje. Brahmakshatriia i Amarasinghe su 2021. predstavili BuildIt, softverski paket koji u velikoj meri pojednostavljuje zadatak kreiranja DSL-a. Prošlog meseca, na međunarodnoj konferenciji u Montrealu koju je zajednički sponzorisalo Udruženje za računarske mašine, ovaj dvojac je predstavio D2Ks, alat koji olakšava dodavanje otklanjanja grešaka u bilo koji DSL i pokazao se da posebno dobro funkcioniše sa BuildIt-om. Njihov rad o radu čak je osvojio jednu od dve nagrade za istaknuti rad dodeljene na konferenciji.
Glavni razlog za stvaranje jezika u specijalizovanom domenu, objašnjava Bramakšatrija, „je promovisanje lakoće upotrebe“. DSL za obradu slika, na primer, može imati funkciju koja kaže „zamuti celu sliku“. Izdavanje iste komande na jeziku opšte namene zahtevalo bi mnogo više linija koda, primećuje Bramakšatrija. „To je deo razloga za korišćenje DSL-a. Drugi su performanse.“ Pošto su operacije specifične za taj domen, mogu se lakše optimizovati—izvršiti u odgovarajućem redosledu, a samim tim i završiti efikasnije i brže.
Brahmakshatriia opisuje BuildIt kao „DSL za kreiranje DSL-ova“. Olakšava proceduru u više koraka za uzimanje postojećeg, višenamenskog programskog jezika i njegovo sređivanje dok ne postane specijalizovan na pravi način. „Pretpostavimo da imate problem i želite da napišete program da ga rešite“, kaže on. „Možete napisati program da ga rešite u celini, ili možete napisati manji program da rešite samo podklasu problema za koji ste zainteresovani. Što je program specijalizovaniji, to će brže raditi.“ BuildIt je dizajniran da konstruiše DSL-ove sa tim vodećim principima na umu.
Halide—jezik za obradu slika izumljen 2012. godine, godinama pre nego što je BuildIt postojao—jedan je od prvih DSL-ova koji su izašli iz Amarasingheove grupe. Njegov razvoj su vodili tadašnji diplomirani student Džonatan-Ragan Keli i Endrju Adams, u to vreme postdoktor CSAIL-a. „Halide je sada veoma popularan i koristi se u mnogim Adobe aplikacijama, uključujući Photoshop, ali još uvek nema program za otklanjanje grešaka“, kaže Amarasinghe. Razlog za to je, dodaje, „što su programi za otklanjanje grešaka veoma komplikovani. Veoma ih je teško napisati, zbog čega većina malih DSL-ova nema podršku za otklanjanje grešaka“.
To nije poželjno stanje stvari, prema Bramakšatriji, koji insistira na tome da svaki DSL treba da ima svoj program za otklanjanje grešaka. „Ne možete direktno da koristite postojeće programe za otklanjanje grešaka za svoj novi jezik jer oni ne razumeju domen.“ Štaviše, nemoguće je napisati program koji je potpuno ispravan prvi put, kaže on. „Uvek počinjete sa nečim što ima greške u sebi, iako se one često ne pojavljuju mnogo kasnije u razvojnom ciklusu. Ako se greška pojavi u tom trenutku, kada imate 5.000 linija koda, to može biti veoma teško da ga nađem.“ Shodno tome, kada je program „dovršen kod“ — koji njegovi programeri smatraju spremnim za testiranje — softverski inženjeri će možda morati da posvete više od polovine svog vremena napornom zadatku otklanjanja grešaka.
Ali pomoć je na putu u obliku D2Ks (izgovara se „detoks“ jer se odnosi na pojam oslobađanja vašeg programa od otrova ili nedostataka). D2Ks nije program, sam po sebi, već je umesto toga klasifikovan kao biblioteka — deo kompjuterskog koda koji drugi programi mogu ponovo da koriste. Dizajniran je da radi sa postojećim programima za otklanjanje grešaka (kao što su GDB ili LLDB), služeći kao most između tih alata i datog DSL-a. Debageru su potrebne informacije o programu, ili programskom jeziku, koje treba očistiti. „Svaki program za otklanjanje grešaka zahteva te informacije u svom posebnom formatu, koji može biti dokument od 400 stranica“, kaže Amarasinghe. „Ako koristite D2Ks, ne morate da brinete o tome. O tome se brine za vas.“
S obzirom da D2Ks služi kao interfejs, Bramakšatrija kaže, „vaš program se može otkloniti korišćenjem popularnih programa za otklanjanje grešaka bez ikakvih modifikacija na samim programima za otklanjanje grešaka“. Po njegovom mišljenju, to je glavna prednost koja dolazi od kombinovanja D2Ks-a sa BuildIt-om: „Ako napišete DSL koristeći BuildIt, ne morate da radite nikakav dodatni posao. Dobijate program za otklanjanje grešaka besplatno, bez pisanja nijednog dodatnog reda. koda“.
„D2Ks direktno rešava inherentnu kontradikciju u softveru visokih performansi“, komentariše Adrijan Sampson, vanredni profesor računarskih nauka na Univerzitetu Kornel. „S jedne strane, jezici specifični za domen su naša jedina nada za ozbiljna poboljšanja u efikasnosti računara u modernoj eri. Međutim, teško je napraviti novi program za otklanjanje grešaka za novi jezik od nule, a odsustvo debagera je racionalan razlog da bi programer mogao odbaciti ‘bolji’ jezik u korist ‘goreg’. Odlična stvar kod D2Ks je to što snižava barijeru za konstruisanje korisnog debagera za DSL.“
Ali to nije kraj priče, što se bramakšatrije tiče. Još jedna karakteristika koju bi želeo da spoji sa BuildIt-om, pored otklanjanja grešaka, je uređivanje, što olakšava pisanje programa. Urednici, na primer, mogu da istaknu određene ključne reči u dokumentu, što može poboljšati njegovu čitljivost. Oni mogu da obavljaju i druge funkcije, kao što je automatsko dovršavanje, koje automatski popunjava tekst nakon što se unese mali deo.
Brahmakshatriia bi želeo da uključi profilere zajedno sa debagerima i uređivačima kao deo BuildIt platforme. „Profileri su kao programi za otklanjanje grešaka, ali umesto da vam pomognu da pronađete greške, oni vam omogućavaju da procenite probleme sa performansama u vašem programu“, kaže on. „Ako program radi sporije nego što se očekivalo, možete koristiti profiler da biste razumeli koji deo programa ometa stvari.“ U budućnosti bi se mogle dodati i druge korisne funkcije, kaže on.
Svi ovi napori, smatra Amarasinghe, učiniće mogućnost stvaranja specijalizovanih jezika mnogo privlačnijom. „Kako ja to vidim, postoji ogroman broj ljudi koji podržavaju tradicionalne jezike — hiljade programera koji prave alate za C, C++ ili Javu“, kaže on. „S druge strane, ako pravim jednostavan DSL, nemam hiljade programera koji bi pružili svu tu podršku.“ Ali sada, sa BuildIt-om i D2Ks, dodaje on, „mali momci mogu da dobiju sve stvari koje dobijaju i drugi, uključujući programe za otklanjanje grešaka i eventualno urednike i programere – iste prednosti koje dolaze sa tradicionalnim jezicima. A to možete dobiti bez posedovanja timova inženjeri koji pišu sve vrste komplikovanog koda.“