…meie igapäevast IT’d anna meile igapäev…

2007-04-05

Programmeerimiskeeled: Java

Filed under: Infotehnoloogia,Programmeerimine — Sander @ 09:33:55

Ajalugu

Java alustas oma elu Sun Microsystems’is nime all „Oak” (eesti keeles Tamm), saades nime projektijuhi James Goslingi akna all kasvanud puult. Aasta oli 1991.

Gosling soovis luua virtuaalmasina, mis töötaks kõikidel platvormidel, ja selle programmeerimiseks C++’ile sarnaneva keele. Ta soovis pakkuda võimalust Write Once, Run Anywhere – kirjuta vaid korra ja jooksuta kõikidel platvormidel.

Esimene versioon Javast ilmus 1995. aastal. Java sai kiiresti populaarseks eelkõige tänu veebilehitsejates jooksvatele applet’itele – Java appletid pakkusid turvalist võimalust laiendada HTML/WWW võimalusi. Bytecode‘na levitatavad appletid tegid hulgaliselt… küllaltki mõttetuid asju, nagu piltidel veele virvenduse lisamine ja trips-traps-trulli mängimine. Tänapäeval on Java appletite kohtamine väga haruldane, erandiks vaid ehk sellised kohad nagu Firefoxil ID-kaardi kasutamine jms. Java appletite asemel kasutatakse Javascripti (mis oma nimest hoolimata pole üldse Javaga seotud), AJAX’it ja Flashi.

1997. aastal mõtles Sun korra Java standardite väljatöötamisele ja isegi flirtis standardeid kinnitavate organisatsioonidega, nagu ISO ja Ecma. Paljudele pettumuseks tõmbus Sun standardiseerimisest eemale ja Javal on siiani proprietaarne standard, mida aitab koostada Java Community Process.

Detsembris 2006. avaldas Sun suured osa Javast avatud lähtekoodiga projektina (GPL), kuid kogu projekti lähtekoodi siiski ei avalikustatud. Seda lubati teha 2007. esimese veerandi jooksul, kuid aprilliks see ei ole veel toimunud. Kõlakad räägivad, et esinevad probleemid Sun’i „müügimeeste” ja „patsiga poiste” vahel – esimesed soovivad jätta koodi ainult Sun’i valdusesse, teised aga pooldavad avatud lähtekoodi. Ilmselt võib siiski loota avatud lähtekoodiga Javat 2007. aastal või hiljemalt 2008.

Java 6 (õigemini 1.6) ilmus detsembris 2006, Java 7 (koodnimi Dolphin) peaks tulema 2008. aastal.

Tänapäev

Nagu juba mainitud, browser applet‘itena on Java kasutuses minimaalselt, samuti hakkab Java surema desktopi-rakenduste tegemisel – Write Once, Run Anywhere mudel on läbi kukkunud.

Selle põhjusteks on suuresti Java ise. Bytecode-mudel on osutunud lihtsalt liiga aeglaseks ja mäluahneks, seda eriti suuremate rakenduste juures. Javas kirjutatud BitTorrenti-klienti Azureust kasutades on selline mulje, nagu kompileeriks taustal Linuxi kernelit, samas näiteks C++’is kirjutatud µTorrent‘i jooksmist ei pane üldse tähele – ja mälukasutus on Azureusel sageli üle 100MB, samas  µTorrent’it pole ma veel üle 10MB näinud võtvat.

Või näiteks firmas kus ma ise töötan – meie oma fat client, Delphis kirjutatud rakendus on 330 000+ rida koodi, samas käivitub ja töötab see välkkiirelt – aga hiljuti puutusin kokku kahe sakslaste tehtud Javas tehtud fat client‘iga. Need käivituvad ca 30s, hoolimata sellest, et keerukuselt on nad ehk 1/30 meie rakendusest, võtavad 130MB mälu (meil – 60..80MB) ja on nõnda probleemsed, et ajavad mind hulluks. Tõsi küll, viimane on ehk rohkem Saksa programmeerijate probleem, kui Java oma.

Ärge tulge rääkima JIT‘ist, see aitas Java kiirust tõsta vaid veidikene…

Samuti on probleeme programmide välimusega – kui sa teed programmi ainult Swingi kasutades, siis erineb see operatsioonisüsteemi muust välimusest. Tuleb lisaks kasutada AWT‘i või (Swingi asemel) SWT‘d, mis suudab sarnast välimust tagada… Üldse on desktopi-Java programm nagu sibul – framework frameworki otsas, ilma nõela pistmata.

Kuidagi ei saa mainimata jätta .NET Pet Shop programmi. Sun tegi Java Pet Store, näidisprogrammi, mis pidi näitama Java mugavust ja suurt kiirust (nn best practice). Microsoft aga vaatas seda programmi ja otsustas teha sama asja .NET’is, nimetades seda .NET Pet Shop’iks (graafik on siit).

.NET versioon oli vähem kui ¼ koodiridadest ja kümme (!) korda kiirem. Kommentaarid on ilmselt liigsed…

Kus on aga Java tugev ja mis ilmselt on tema tulevik – serverirakendused. Java Server Pages, JBoss, Java Servlets, Oracle SOA ja IBM’i rakendused – need on asjad, kus Java on tugev ja tegija.

Samuti on Javast saanud keel, milles õpetatakse uusi programmeerijaid – see on Sun’i poolt teadlikult toetatud strateegia, mis on osaliselt Java suure populaarsuse taga.

8 kommentaari »

  1. Oeh, oleks see viimane ots nüüd nii… MS-i Pet Shop on oma tehniliselt arhitektuurilt masendav käkk. MS kirjutas Pet Shopi ainult sellel eesmärgil, et see oleks Java omast oluliselt kiirem. Tehnilist väärtust MS-i tehtul praktiliselt pole. Ja mis kõige masendavam – seda läbu pakutakse ASP.NET saidis (loodan, et enam ei pakuta) kui näitlikku õppematerjali.

    kommentaar kirjutas Gunnar — 2007-04-05 @ 13:30:47 | Vasta

  2. Paraku on mul ka tunne, et mida Java versioon edasi, seda nõudlikumaks see riistvara suhtes muutub. Kuigi Sun ise väidab, et pidevalt käivad pingutused selle suunas, et Java muutuks aina kiiremaks.
    Kõige tihedamini vast kasutan Java põhistest rakendustest Zend IDE-d ning parematel hetkedel õgib see elajas isegi kuni 500MB mälu. Samas mõned tipptasemel IDE-d (kirjutatud mõnes teises keeles), saavad isegi kümneid kordi vähema mäluga hakkama.
    Ise on piisavalt Java-s programeeritud, kuigi ennast mingiks professionaaliks Java vallas ei pea. OO mudel on tõesti vaieldamatult parim ning tänu sellele sobib bäga hästi programeerimise õpetamiseks (eriti OOP-i põhitõdede õpetamiseks).
    Java on/oli edukas, kuna ta oli üks esimesi omasuguste seas…
    Maitse asi ning ei hakka teiste inimeste maitsele vastu vaidelema. Kui meeldib, siis meeldib ning kui ei meelid siis lihtsal ei meeldi ja on vastukarva…

    kommentaar kirjutas Sakuza — 2007-04-05 @ 13:35:14 | Vasta

  3. @Gunnar: nüüd on MS Pet Shop teinud läbi korraliku uuenduskuuri – väljas on nii 3 kui ja 4.

    Milles aga see “masendav käkk” olemine seisneb?

    kommentaar kirjutas dukelupus — 2007-04-05 @ 14:04:20 | Vasta

  4. Siiski, mõned jaavas tehtud asjad on *väga* mugavad ja *väga* asjalikud. Nt andmeanalüüsiks kasutatav business object (andmeait + brauser + java seal sees)

    Millisekundeid ja mb mälukasutust ei mõõda. Kas see ongi oluline kui kui su arvutis on täna win ja homme win vista?

    kommentaar kirjutas toivo — 2007-04-05 @ 14:09:54 | Vasta

  5. Eks see java ole jah tsipa teistsugune (mõtlen siinkohal seda aeglust ja mäluahnust), kuid tavaliselt on need näited ja võrdlused vägagi tingivad, müstilised ja suuresti ülepaisutatud. Kasvõi antud teoses äratoodud torrenti kliendid. Ma isiklikult ei ole µTorrent’iga tuttav, küll aga Azureus’iga ja siinkohal küsiks, et kas µTorrent’il on sama funktsionaalsus kui Az’il ? Kas ta on sama arhitektuuriga ? jne jne …
    Üldjuhul tuuakse näited, mis on klassist win vs linux: linux kiirem ja väiksem ja tarbib vähem mälu…
    Jaaah… samas dos 4 on väiksem ja kiirem kui linux… kuid kas tegelt on võrdlus õige ?

    Noh ja lõpuks veel java kiiruse kohta selline asi:
    A: Java on ju sitaks aeglane
    B: Ja sina kirjutad siis assembleris jah ?

    kommentaar kirjutas KT — 2007-04-09 @ 16:37:47 | Vasta

  6. Azureuse üks häda ongi see, et asi on lihtsalt bloated. µTorrentil on samaväärne funktsionaalsus, exe suuruseks on aga 173 KB (v1.6)

    Eks neid Java benchmarke on olnud küllalt, kus tõestatakse “näe, tsükli ühest miljardini teeb vaid 5% aeglasemalt kui C”, aga kahjuks need ei ole adekvaatsed võrdlused. Tavalise for (i=0; i <= nnn; i++) {} tsükli teeb ka JavaScript ülikiiresti, aga vahe tuleb sisse päriselus olevates olukordades – failide avamine-sulgemine-manipuleerimine, keerukam stringitöötlus, massiivide käsitlemine jms

    kommentaar kirjutas dukelupus — 2007-04-09 @ 17:40:32 | Vasta

  7. Ma benchidest ei räägigi, tavaliselt on kas üks või teine pool lihtsalt ülioptimiseeritud. Ning tõsi ta ka on, et C on raualähedane, mis tähendab, et toda annab ikka kõvasti rohkem optimiseerida kui javat.

    Mitte, et ma väidaks, et java > ülejäänud (eks ma “tsipa” bias’ed olen, aga see selleks :P ) lihtsalt tavaliselt kiirusevahede juttu lugedes jääb mulje nagu ajaühikuks oleks minutid.

    Eks see Az ole bloated jah, aga see jällegi ei ole otseselt java süü, et seal pool miljonit ebavajalikku funktsionaalsust on :P

    kommentaar kirjutas KT — 2007-04-10 @ 16:44:14 | Vasta

  8. Java üks eelis .net’i ees on ilmselgelt ka platformisõltumatus. Mis koodiridade vähesusse/rohkusse puutub, siis minu meelest pole see mingi näitaja – kõrgtaseme keele puhul on olulisem loetavus. Kui kõik funktsioonide väljakutsed jõuga näiteks ühele reale suruda, siis tulemuseks on lühike, ent raskesti loetav kood.

    “Ning tõsi ta ka on, et C on raualähedane, mis tähendab, et toda annab ikka kõvasti rohkem optimiseerida kui javat.”
    Mis tähendab raualähedane?:P
    JavaVM on ka “raualähedane”:)
    Muideks, VM annab sellise kavala asja nagu Runtime Optimization, mis võimaldab Javal omakorda niimõneski asjas “otse rauas jooksvast” koodist tunduvalt kiirem olla. Üldjuhul C rokib ikka täiega.

    kommentaar kirjutas urmas — 2007-07-16 @ 14:39:29 | Vasta


RSS feed for comments on this post. TrackBack URI

Lisa kommentaar

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Muuda )

Twitter picture

You are commenting using your Twitter account. Log Out / Muuda )

Facebook photo

You are commenting using your Facebook account. Log Out / Muuda )

Google+ photo

You are commenting using your Google+ account. Log Out / Muuda )

Connecting to %s

Blog at WordPress.com.