Historie a vývoj jazyka Java Luděk Novotný, 2003 /Za několik málo let své existence se programovací jazyk Java dokázal rozšířit na celou řadu elektronických zařízení: počínaje mobilními telefony, stolními počítači, ale nevyhnul se ani serverům s rozsáhlými firemními aplikacemi. Dnes je druhým nejpoužívanějším hned po jazyce C./ *Green Team* Za počátek vzniku Javy můžeme považovat podnět viceprezidenta společnosti Sun Microsystems Billa Joye k vytvoření nového jazyka, který by umožňoval stručný a efektivní zápis programů. V roce 1990 vznikl Green Team vedený Jamesem Goslingem. Tato malá vývojová skupina společnosti Sun si vytyčila za svůj cíl vytvoření systému pro domácí spotřebiče. Po dobu dvou let pracovala odděleně od zbytku světa na něčem, co by mohlo vnést nový život do světa informačních technologií. Spotřební elektronika se vyznačuje podstatně delší životností (ať již morální či funkční) než současný software pro výpočetní techniku. Domácí spotřebiče mají omezenou velikost paměti a pomalé procesory. Cílem bylo vytvořit chytrou spotřební elektroniku, která by mohla být centrálně ovládána a programována dálkovým ovládáním. Za geniální se dá považovat myšlenka, že různá zařízení komunikují v heterogenním prostředí přímo mezi sebou. *Jazyk Oak* Green Team nejprve používal programovací jazyk C++. Ale ani on ani jeho modifikace však nebyly shledány vhodnými. Stejná situace nastala při pokusu o „oživení“ jazyka Pascal, jehož autorem je Niklaus Wirth (USCD Pascal). Nakonec James Gosling navrhl nový jazyk, který pojmenoval Oak (dub) podle stromu, jež rostl před okny jeho kanceláře. Za přímého předchůdce jazyka Oak můžeme považovat C++. Koncová zařízení se osazují různými procesory podle požadovaného výkonu, a proto byl nově navržený jazyk interpretovaný, tj. nezávislý na konkrétním hardware. Požadavky na paměť pro základní interpret jsou 40 kB a pro standardní knihovny s podporou více vláken 175 kB. *Star 7* Po roce výzkumu a vývoje skupina představila Star 7 (*7). Jednalo se o prototyp zařízení, spojující osobní digitální asistent (PDA) a dálkové ovládání. Byl vybaven procesorem RISC, dotykovým displejem a umožňoval práci s aplikacemi v jazyce Oak. V té době trh neměl zájem o PDA (viz neúspěch Apple Newton PDA), proto se zařízení Star 7 nezačalo nikdy hromadně vyrábět. Dalším neúspěšným pokusem o praktické využití vytvořené technologie bylo úsilí o výrobu set-top boxů k televizorům pro společnost Time Warner (roku 1993). Rovněž se nepodařilo uzavřít smlouvu s výrobcem herní konzole 3DO – možná naštěstí, neboť komerční neúspěch 3DO mohl celý projekt definitivně pohřbít. *Internet a applety* Nová technologie byla na světě, ale nedařilo se pro ni nalézt vhodné uplatnění. Do nelehké situace se nakonec vložil Bill Joy, spoluzakladatel společnosti Sun. Výsledkem byl úspěšný plán na její využití na poli Internetu. V té době se Internet stával stále populárnějším a Oak představoval první možnost, jak oživit do té doby statické webové stránky. Malý kód, který se interpretoval prostřednictvím webového prohlížeče na straně klienta, byl nazván applet. Z bezpečnostních důvodů se applety spouštějí v tzv. „sandboxu“. To znamená, že mezi nimi a systémem vzniká bariéra, díky níž nemůžou applety přistupovat k souborovému systému a provádět další, potenciálně nebezpečné činnosti. Prvním programem pro spouštění appletů byl referenční prohlížeč Web Runner. Za zmínku stojí, že byl celý napsán v jazyce Oak. První komerční prohlížeč, který podporoval applety, byl Netscape Navigator. V roce 1995 dominoval 80-ti procentům trhu. Podpora spouštění appletů byla postupně dodána do většiny webových prohlížečů buď přímo, nebo prostřednictvím zásuvných modulů. *Java* V roce 1995 bylo zjištěno, že jeden programovací jazyk s názvem Oak již existuje. Vlivem toho se pro programovací jazyk Oak začal užívat název Java a pro prohlížeč Web Runner název HotJava. Java byla poprvé představena na konferenci SunWorld 1995. Technologie byla licencována společnostem IBM, Microsoft, Symantec, Silicon Graphics, Inprise (Borland), Oracle, Toshiba či Novell. Program v jazyce Java je interpretován prostřednictvím virtuálního počítače (Java Virtual Machine, JVM), díky čemuž je nezávislý na konkrétním hardwaru či operačním systému. Původně se jednalo o čistě interpretovaný jazyk, ale dnes z důvodu rychlosti převažuje JIT kompilace. Nejfrekventovanější části kódu (cykly) jsou za běhu (Just-In-Time) překládány do nativního kódu. Rychlost vykonávaného mezikódu (bytecode) ovšem nemůže dosahovat rychlosti nativního kódu. Roku 1996 byl vydán první Java Developement Kit (JDK 1.0), který obsahovalo vše potřebné pro tvorbu appletů. Dnes je součástí SDK rovněž kompletní zdrojový kód platformy Java. Společnost Sun definuje programovací jazyk Java jako jednoduchý, objektově orientovaný, distribuovaný, robustní, bezpečný, nezávislý na architektuře, portabilní, interpretovaný, vysoce výkonný a vícevláknový. *Specifické rysy jazyka (odlišnosti oproti jazyku C++)* Jedním z cílů bylo snadné naučení a používání jazyku Java. Toho se dosáhlo odstraněním konstrukcí jazyka C++, které se buď téměř nepoužívají, nebo často vedou ke vzniku velkého množství obtížně odhalitelných chyb. K nejvýraznějším odlišnostem oproti C++ patří silná typová kontrola, nemožnost používat ukazatele a odstranění vícenásobné dědičnosti (poslední jmenované ovšem vede k obtížnějšímu řešení některých situací). Na rozdíl od většiny ostatních jazyků není možné používat příkaz goto. Vyskočení z vnořeného cyklu je možné realizovat pomocí příkazu break s návěštím. Veškeré textové řetězce jsou uloženy v kódování Unicode (ISO 10646). Objektový přístup je mnohem čistší než v případě C++ a samozřejmostí je neexistence globálních proměnných a funkcí. O správu paměti se stará JVM. Aplikace žádají JVM o přidělení paměti a její uvolňování se provádí automaticky pomocí garbage collectoru (GC). Výhodou tohoto přístupu je odstranění časté situace, kdy aplikace korektně neuvolňuje alokovanou paměť (vznik tzv. memory leaks). Řízená správa paměti ovšem vyžaduje nutnou režii. Tento problém je dnes již poměrně úspěšně vyřešen (GC běží na pozadí jako samostatné vlákno s nízkou prioritou namísto původního jednorázového spuštění, které mohlo způsobit viditelné „zastavení“ aplikace v nejméně vhodném okamžiku). *JavaScript* Jedním z častých omylů je přirovnávání JavaScriptu k Javě. Ve skutečnosti se jedná o skriptovací jazyk, interpretovaný na straně prohlížeče (pomineme-li, že dříve existovala i verze pro Netscape server). S jazykem Java má shodné pouze základní jazykové konstrukce a podobný název. Oproti Javě nepracuje s instancemi tříd, ale s objektovým modelem dokumentu (DOM), který je v současnosti silně závislý na konkrétním prohlížeči. JavaScript byl standardizován jako ECMA Script. Dnes je běžně používán jako skriptovací jazyk na webových stránkách a v řadě aplikací. *Java ME, SE, EE* Možnosti využití Javy se podstatně rozšířily s příchodem verze jazyka pro stolní počítače (od verze 1.2 označovaná jako J2SE). Zanedlouho se jazyk uchytil i v oblasti firemních serverů (J2EE) k vývoji aplikací, s kterými uživatelé komunikují prostřednictvím webových prohlížečů (servlet, web service). Sun nenechal Javu standardizovat, aby mohl i nadále sám rozšiřovat a řídit její vývoj prostřednictvím nově vzniklé Java Community Process (1998). Společnost Microsoft ovšem také prováděla svá vlastní rozšíření (nekompatibilní s verzí od společnosti Sun). Soudní spory vedly k odejmutí licence a následkem toho Microsoft přestal operační systém vybavovat aktuální verzí Java VM. Na poli webových prohlížečů se za několik let karty obrátily a většinový podíl převzal Internet Explorer společnosti Microsoft. Tyto události do značné míry omezily používání appletů a aplikací v Javě na stolních počítačích. Naproti tomu si na poli serverů dokázala J2EE vybojovat relativně pevnou pozici. Posledním přírůstkem do rodiny je distribuce určená pro mobilní zařízení (J2ME). V podstatě se jazyk konečně začal používat k tomu, k čemu byl původně navržen. Díky J2ME dokáže programátor vytvořit vícevláknovou aplikaci pro mobilní telefon nebo PDA v nesrovnatelně kratším čase než dříve za použití assembleru konkrétního procesoru. J2ME se od J2SE neliší v jazyku, ale v dostupných aplikačních programových rozhraních (API). Například není možná práce s čísly v plovoucí desetinné čárce a s tím související matematické (tj. goniometrické) funkce. Technologie Java se dnes používá v mnoha oblastech - od platebních karet (smart card) až po superpočítače. Dnešní domácí spotřebiče nejsou o moc chytřejší než byly v roce 1991, takže by se dalo říci, že původní výzkumný projekt společnosti Sun neuspěl. Namísto toho byl vytvořen nový objektově orientovaný jazyk pro programování, úzce svázaný s Internetem. *Budoucnost* Java dnes nepředstavuje jen programovací jazyk, ale celou platformu. Její budoucnost závisí jednak na očekávané verzi 1.5, která má do jazyka přinést řadu rozšíření, a také na tom, jak úspěšně se společnosti Microsoft podaří prosadit svoji technologii souhrnně označovanou jako .NET, která je i přes značné technické odlišnosti zaměřena na stejnou cílovou skupinu zákazníků a která může čerpat ze zkušeností získaných za téměř pět let existence Javy. Skutečnost je taková, že společnosti Sun se nyní daří prosazovat na rychle expandujících asijských trzích (Čína). Obě technologie budou pravděpodobně dlouhou dobu koexistovat a o tom, která z nich se nakonec výrazněji prosadí, nebude, jak už tomu bývá, rozhodovat kvalita, ale především marketing. *Použité zdroje:* 1. A Brief History of the Green Project, http://java.sun.com/people/jag/green/ 2. Java technology: An Early History, 1998, http://java.sun.com/features/1998/05/birthday.html 3. History of the World Wide Web, http://ei.cs.vt.edu/~wwwbtb/book/chap1/java_hist.html 4. P.Komisar - Java History, http://www.sentex.net/~pkomisar/Java_History.html 5. Paul J. Perry - Java tvorba dokonalých WWW stránek, Grada Publishing, 1996 6. What is Java technology, 1996, http://java.sun.com/java2/whatis/1996/ 7. Java technology timeline, 2000, http://java.sun.com/features/2000/06/time-line.html