Sa eksplozijom koju je na svetskoj računarskoj sceni izazvao razvoj Interneta, došla je i enormna popularnost novog programskog jezika - Jave. Iako Java nije donela ništa kvalitativno novo u svet programskih jezika, imala je tu sreću da se pojavi kao prava stvar na pravom mestu u pravo vreme... | |
Zoran Budimlić |
Java je razvijena u laboratorijama kompanije Sun Microsystems. Originalni projekat se vodio pod nazivom Oak (hrast), a ime je dobio po hrastovom drvetu u dvorištu Sun-ove laboratorije u Palo Altu u Silicijumskoj dolini. Prvobitna namera je bila da se razvije kompaktan jezik koji bi se koristio za programiranje malih elektronskih uređaja - celularnih telefona, tostera, kreditnih kartica... S brzim razvojem Interneta, razvojni tim Oak-a je uvideo mnogo širi potencijal tako dizajniranog jezika, uspeo je da u to ubedi i predsednika Sun-a Scott McNeally-ja, jezik je preimenovan u Java i formirano je odeljenja Sun-a pod imenom JavaSoft. Ostalo je istorija... |
Java i drugi jezici
Java je potpuno objektno-orijentisani jezik: sve promenljive su objekti, osim "primitivnih" celih i racionalnih brojeva. Sintaksa je vrlo slična C++-u, ali Java nije nadskup C-a, tj. nema nezavisnih procedura - svaka procedura mora da bude deo objekta, nema pointera ni eksplicitne alokacije i dealokacije memorije (garbage collector se brine o tome umesto programera). U Javi takođe nema preopterećivanja operatora, višestrukog nasleđivanja, šablona (templates) i, što je najvažnije, jezik je potpuno standardizovan, za razliku od C++-a, gde svaki proizvođač kompajlera ima svoju verziju jezika.
|
Klasične optimizacije
Ubrzo pošto je razvijen prvi kompajler za Javu, u Sun-u su počeli sa radovima na usavršavanju i unapređivanju koda koji taj kompajler generiše. Nekoliko inženjera je dobilo zadatak da implementira nekoliko "klasičnih" optimizacija, od kojih smo većinu već opisali u prethodnim izdanjima ove naše mini-serije tekstova. U početku je sve izgledalo ružičasto, ali se ispostavilo da Java predstavlja tvrđi orah za optimizaciju nego što bi se to na prvi pogled moglo zaključiti...
|
Dokaži ako umeš
Srećom, nije sve tako crno: problem se može jednostavno rešiti tzv. "ljuštenjem" prve iteracije petlje sa slike 3 - to je optimizacija koja se vrlo često primenjuje u kompajlerima za paralelne računare. Prva iterakcija petlje je na ovaj način izdvojena od ostatka petlje, tako da se prekid koji se ranije dešavao u prvoj iteraciji petlje sada dešava u okviru if naredbe. U slučaju da je niz a[] prazan, prekid će se desiti prilikom izvršavanja testa a[0] < N i vrednost promenljive x će ostati netaknuta.
|
Klin se klinom izbija
U nekim slučajevima ne može da se dokaže da neka naredba neće izazvati prekid (bilo zbog toga što ta naredba zaista izaziva prekid pod nekim okolnostima, ili zato što kompajler nije dovoljno "pametan" da izvede dokaz), a nije moguće ili nije profitabilno da se veštački ubacuju naredbe koje će izazvati prekid umesto nje. U tom slučaju se i dalje mogu vršiti optimizacije koje premeštaju kod preko te naredbe, naravno uz dodatne komplikacije. Čitavo telo metoda koji se optimizuje se obavije try konstrukcijom, a svi prekidi koji nastanu unutar metoda se "hvataju" specijalnim kodom (exception handler) koji je generisao kompajler. U taj kod je ugrađeno znanje o svim optimizacijama koje su izvršene unutar metoda i svim naredbama koje su "preskočene", iako mogu da izazovu prekid. Ovaj specijalni kod zatim ispituje generisani prekid, utvrđuje da li je izazvan od strane naredbe koja je "preskočena" prilikom optimizacije i u tom slučaju izvrši potrebne modifikacije u stanju sistema, dovede program u korektno stanje (ono stanje u kojem bi bio da nije bilo nikakvih optimizacija) i prosledi prekid dalje na obradu od strane korisnika. Tako smo iskoristili sam mehanizam prekida da rešimo problem koji je na prvom mestu i bio izazvan postojanjem tog mehanizma. Klin se klinom izbija...
|