Enn Tõugu  sündinud 20. mail 1935. a. Tallinnas. 1958 lõpetas TPI mehaanikainsenerina masinaehituse tehnoloogia alal ja 1961 Leningradi Polütehnilise Instituudi elektronarvutite erialal, tehnikakandidaat (1965), tehnikadoktor (1973), Eesti Teaduste Akadeemia liige informaatika alal (1985), NSVL riikliku preemia laureaat teaduse ja tehnika alal (1987). Rootsi Kuningliku Tehnikaülikooli  professor  (1992).  IFIP�i tehnilise komitee Arvutiteaduse alused,  IFIP�i Masinprojekteerimise töögrupi WG5.2, Rahvusvahelise Loogilise Programmeerimise Assotsiatsiooni ja IEEE Arvutite Assotsiatsiooni liige, Norra Tehnikaülikooli alaline eksaminaator.
Kahe tütre ja ühe poja isa.
JAVA FENOMEN

Vähem kui kolm aastat tagasi avalikustas Sun Microsystems Java keele ja kuulutas sellel põhineva programmeerimissüsteemi tasuta kasutatavaks. Veel ühe programmeerimiskeele ilmumine lisaks juba olemasolevatele sadadele kasutatavatele ja tuhandetele publitseeritud keeltele ei ole iseenesest mingi tähelepanuväärne sündmus. Viimasel paaril aastakümnel loodud universaalsetest programmeerimiskeeltest on laialt käibel ainult C++ ja teatud määral ka Ada, viimane küll üksnes kaitsetööstuse sfääris ja sedagi tänu USA kaitseministeeriumi väga suurele toetusele. Esialgu ei tõotanud miski populaarsust uuele objektorienteeritud keelele, mille eripäraks oli interpreteeritus ja millel puudusid mitmed C++ võimalused.  Kui me 1995. a. sügisel demonstreerisime Bostonis oma objektorienteeritud keelt NUT, küsis üks programmeerimise gurusidd Cordell Green, kas me Javaga oleme tuttavad, viidates nende keelte sarnasustele. Olin Java nime küll kuulnud, kuid erilist huvi mul ta vastu polnud. Otsustasin siiski temast natuke lugeda. Peagi selgus, et mitmed omadused, mida meie keele juures kritiseeriti, olid Java puhul esile tõstetud kui eelised. Eelkõige on selliseks omaduseks keele interpreteeritus, mis annab paindlikkust, kuid teeb programmide täitmise kahtlemata aeglasemaks, samuti viitade puudumine keele tasemel, täisautomaatne mäluhaldus ja prahikoristus mälus. Ei meeldinud ka Java kohmakas süntaks, mis on küll tuttav C-keele kasutajaile, kuid teeb keele õppimise algajaile ebamugavaks ning põhjustab oma liiasusega näpuvigu programmide kirjutamisel. Kahtlusi tekitas pretensioonikas väide, et see keel koos oma laiendustega pakettide näol katab lähitulevikus suure osa programmeerimisvajadusi. Mõni aasta varem sarnase väitega oma objekt- orienteeritud pakette reklaaminud firma Taligent oli jõudnud selleks ajaks juba saamatust näidata.

Edasine sündmuste käik osutus aga üllatavaks. Sun Microsystems avalikustas Java keele ja HotJava võrgubrauseri 1995. aasta mais. Üsna pea lülitas Netscape oma võrgubrauserisse Javas hõlpsasti kirjutatavate interaktiivsete programmide � applettide käivitamise, mis aitas tunduvalt kaasa Java kiirele levikule. Applettide eripära on see, et nende käivitamiseks piisab viidast appletile sellel leheküljel, mida brauseriga vaadatakse, st nad käivituvad automaatselt brauseriga samal arvutil isegi siis, kui nad algselt paiknevad mujal. Microsoft püüdis algul  Javat ignoreerida. Kuid Java ja Netscape Navigator täiendasid teineteist suurepäraselt ning võitsid kiiresti juurde kasutajaid. Microsoft oli sunnitud varsti oma Explorerisse Java appletid samuti sisse võtma. Java populaarsusest räägib see, et 1997. aasta kevadel oli Java konverentsil San Franciscos 12 000 osavõtjat, samaaegselt lähedal toimunud C++ konverentsil oli aga osavõtjaid umbes kümme korda vähem. Kolme aasta eest Sunis Java kallal töötanud 15 inimese asemel on nüüd seal neid 600, peale selle tuhandeid IBM-s ja sadu Novellis (vt. IEEE Internet Computing 1(5)), Microsoftist rääkimata. Javast on saanud populaarne ja antud hetkel vaieldamatult parim võrguprogrammide kirjutamise vahend mitte ainult interneti, vaid ka intranettide jaoks. Just praegu käib sõda intranettide pärast. Arvutimaailma tugevad, sh. Oracle, Sun, IBM, Netscape, Novell ja hetkel määramatus seisus olev Apple mängivad Java avatud standarditele ja multiplatvorm-keskkonnale ning loodavad sel teel vältida suuremat sõltuvust Microsoft Windows/NT-st. Microsoft püüab aga kahandada Suni mõju Java sisekeele (virtuaalmasina kirjelduse) omapoolse muutmise teel, sobitades seda eelkõige Microsoft Exploreriga. See piiraks tunduvalt Java mobiilsust ühelt poolt ja annaks ilmsed eelised MS tarkvara kasutajatele. Mis veelgi hullem � Microsoft püüab sundida kõiki tema Windows95/NT levitajaid koos Windowsiga ka muudetud Javat töötlevat brauserit levitama. Sun kuulutas 1997. aasta algul välja nn. 100 % puhta Java kontseptsiooni ja püüab kohtu kaudu keelata Java nime kasutamist juhtudel, kui on ilmne, et standardist kinni ei peeta. See on eelkõige muidugi suunatud Microsofti vastu.

Huvitav on ka Java varasem tekkelugu, mis pole kaugeltki sirgjooneline. 1991. aastal loodi Suni juures sõltumatu uurimisgrupp nimega Green olmeelektroonika sellise programmeerimiskeele väljatöötamiseks, mis võimaldaks programmeerida erineva riistvara baasil loodavaid pisikesi �tarku karbikesi� mitmesuguste riistade juhtimiseks. Keele esialgne nimi oli Oak, kuid see nimi osutus keele avalikustamisel sobimatuks, sest oli juba teiste poolt kasutusel, ja keele uueks nimeks sai Java. Varsti selgus ka, et olmetehnika programmeerimistehnoloogiale ei ole veel küllalt laia turgu. 1993. aastal tekkis tollel grupil, mis kandis siis juba nime FirstPerson, huvi videoformaatide dekodeerimise ja võrgubrauseri Mosaic 1.0 vastu. Eesmärk oli ilmne � digitaalselt kodeeritud video dekodeerimine selle koduseks tarbimiseks interaktiivse TV kaudu. 1994. aasta alguseks selgus aga, et Sun ei suuda võistelda tellimusvideo (video-on-demand) alal, kus palju tugevamaks tegijaks on Silicon Graphics oma hea graafikaprotsessoriga. Samal ajal arenesid kiiresti edasi nii võrgubrauserid kui ka andmeesitus võrgus, muu hulgas HTML keel infoesituseks. Java autorite oluliseks õnnestumiseks tuleb lugeda nende õigeaegset tähelepanu internetile. Töö Java kallal jätkus, ja juba 1994. aasta lõpuks oli selge, et Java võib osutuda programmeerimiskeeleks, mille abil on võimalik hõlpsalt programmeerida interneti kasutamist. Nii tutvustaski Sun 1995. aasta mais Java programmeerimiskeelt ja HotJava võrgubrauserit näitusel �SunWorld �95�. Tuule tiibadesse sai Java siis, kui Netscape oma populaarse Navigatori varustas Java keskkonnaga. Tuletagem seejuures meelde, et Netscape�i enda edu algus kuulub samuti aastasse 1995.

Milles seisneb tehniliselt Java edu saladus? Arvatavasti suurel määral hea juhuse tõttu (tuletagem meelde mitmeid ootamatuid pöördeid Java töögrupi varases tegevuses) said autorid hea projekteerimiskogemuse võrguarvutuseks vajalikes valdkondades ning neil õnnestus välja valida ja kokku sobitada arvutivõrkude programmeerimiseks sobivad paradigmad. Esimese tutvuse Javaga teeb arvatavasti enamik kasutajaid tänu applettidele. On ju huvitav teha programme, mida kasutavad/käivitavad otsekohe kõik, kes teatud www lehekülge vaatavad. Kahtlemata on applettide idee originaalne, kuid enamik Java põhikontseptsioone ei ole tänapäeva arvutimaailmas uudiseks. Need on: objektorienteeritus, paralleelsed protsessid objekti piirides, täitmise käigus tekkivate vigade töötlemise mehhanism, ohutuse tagamise vahendid, teekide hierarhiline struktuur pakettide kujul, virtuaalmasina kasutamine interpreteerimisel, korralikult väljatöötatud programmeerijaliides (API) standardpakettide näol ning kogu tarbijatarkvara sõltumatus riistvarast. Java puhul on need kontseptsioonid omavahel hästi kokku sobitatud.

Vaatame mõningaid Java omadusi pisut lähemalt. Java interpretaator, nn Java virtuaalmasin JVM, on kirjeldatud väga täpselt. See on operandide teegiga töötav lihtne ühebaidiliste käsukoodidega protsessor, mille käsud sobivad just Java keeles kirjutatud programmide täitmiseks. Keele enda operatsioonisemantika on hõlpsalt kirjeldatav JVM terminites. Koos JVMga realiseeritakse sellesse keelde ka kompilaator ja programmeerijaliides � hulk klasse (tööks graafika, failide ja internetiga jne), mis kokku moodustavad Java programmeerimissüsteemi JDK. Et virtuaalmasin ja ülalnimetatud klassid realiseeritakse igal platvormil täpselt kirjeldusele vastavalt, saab Java programmi kasutada mistahes arvutil, millel on JDK.

Kasutades kihilist tarkvaraarhitektuuri, mis on end hästi õigustanud võrguprotokollide puhul, on Java  programmeerijaliides disainitud selliselt, et ka algaja programmikirjutaja saab koostada sisukaid programme. Objektorienteeritus aitab sellele omakorda kaasa. Näiteks tööks internetiga peab teadma ainult URLi, s.o. andmete abstraktse võrguaadressi mõistet, mida Javas esitab väga paindlik klass. Soovides koostada keerukamaid programme, näiteks servereid, peab programmeerija tutvuma juba olemasoleva tarkvara sügavama kihiga. Ka seal leiab ta palju kasulikke kasutamisvalmis klasse. Esimesel pilgul võib tunduda, et Java kui interpreteeritud keel ei sobigi serverite programmeerimiseks. See pole õnneks tõsi � ta ei sobi ainult siis, kui iga teenus vajab mahukat protsessoritööd. Tänu Java virtuaalmasina arhitektuurile on võimalik käsujadade kiire tekitamine ja vahetus arvutuste käigus. Sellised nn. kerged käsujadad võimaldavad kiiret protsessi konteksti vahetust. Tänu sellele tagab Java kõrge tootlikkuse ebaregulaarsete paralleelsete protsesside korral, mis on määrav serveri programmeerimisel. Taoline olukord on üldiselt tüüpiline kiirete paralleelsete protokollide rakendamisel. Loomulikult on keeles olemas ka lihtsad protsesside loomise ja sünkroniseerimise vahendid.

Et arvutivõrgus töötades ei saa tulemuslikkuses kindel olla (side võib olla korrast ära jpm), on Javas arvutuskäigu kontrollimise vahendid trü- ja catch-laused, mille kasutamine on paljudes kohtades juba süntaktiliselt kohustuslik. Neist esimene piiritleb programmiosa, mille täitmist kontrollitakse, ja teine määrab, mida kontrollitakse ning kuidas erakorralistes olukordades toimitakse. Sellega tagatakse programmide hea töökindlus. Javas korralikult kirjutatud programm ei lõpeta iialgi veaga. Ta võib küll jätta midagi tegemata, kuid teatab sel  juhul takistusest käivitajale. Selliselt on koostatud kõik Java programmeerimissüsteemi kuuluvad klassid.

Suurt tähelepanu pööratakse Javas ohutusele, st programmi kasutava süsteemi kaitsele, mis on hädavajalik, sest võrgu kaudu võivad süsteemi sisse tungida seda kahjustavad programmid, näiteks viirused. Kõige rangemalt kontrollitakse applette, sest need on üldjuhul teistelt arvutitelt tulevad tundmatute autorite koostatud programmid. Näiteks ei lubata tundmatul appletil kasutada faile, mis paiknevad mujal kui ta koduarvutil. Samuti ei pääse appletid ligi süsteemi ja kasutaja kohta käivale infole, välja arvatud IP aadress. Kontrolli teostatakse mitmel tasemel. Kõige põhjalikum kontroll toimub iga tundmatu klassi laadimisel. Siis kontrollitakse nii klassifaili üldist struktuuri kui ka iga meetodi programmi. Ka täitmise käigus kontrollib virtuaalmasin programmi käitumist. Vaatamata kõigile senistele meetmetele, on häkkeritel ikka ja jälle õnnestunud leida auke kaitsesüsteemis, ja Sun Microsystems on korduvalt olnud sunnnitud tarkvaras kiireid parandusi tegema.

Üldise hea disaini taustal torkavad silma ka mõned Java keele konarused, mis head üldmuljet siiski eriti ei riku, nagu näiteks see, et massiivi ja stringi pikkuse avaldised näevad välja erinevalt � vastavalt s.length ja s.length(). Tüütavaks võib osutuda süntaktiline liiasus, näiteks nõue kirjutada public static void main(String args[ ]), kus tegelikult piisab, kui kirjutada main(args[ ]), sest nii meetodi modifikaatorid kui ka tüüp on sel juhul juba üheselt määratud.

Keele elujõulisuseks on oluline ka pidev pakettide arendamine, eriti aga uute võrgutööks vajalike klasside lisamine. Seni on Sunil see õnnestunud olemasolevaid klasse peaaegu muutmata. Ainus suurem muudatus toimus üleminekul programmeerimissüsteemi (JDK) versioonilt 1.0 versioonile 1.1. Java levikule aitab tunduvalt kaasa ka hea dokumentatsioon ja rikkalik kirjandus. Praktiliselt kogu vajaliku info saab tasuta kätte ka interneti kaudu, võib alustada väga üldisest aadressist www.javasoft.com.

Java on sisse toonud uue tarkvaratehnika, mille võib lühidalt kokku võtta järgmiselt: programmeeri korra, täida programmi korduvalt millal ja kus tahes. Kuigi korduvkasutus on alati olnud tarkvaratehnika üks suuri eesmärke, on Java esimene selline keel, mis võimaldab suuri programme täita platvormist sõltumatult, tagades seega programmide korraliku disaini korral nende tõelise korduvkasutuse.

Enn Tõugu
Rootsi Kuninglik Tehnikaülikool