21. prosince 2007

Skriptovací jazyky v Javě - co s nimi?

Tento článek jsem nezačal psát jako jiné články s tím, že bych rád něco sdělil, ale spíše, že bych se rád něco dozvěděl. Před chvílí jsem dočetl článek o skriptovacích jazycích v Javě a pořád si nějak nemohu správně odpovědět na otázku - K čemu mi jsou v Javě ty skriptovací jazyky vlastně dobrý?

Musím se přiznat, že obecně skriptovací jazyky neovládám a spíše jen pasivně sleduji dění okolo, něco hodně málo jsem napsal v Groovy. Když si čtu články o skriptovacích jazycích v Javě, tak se často objevují tyto výhody vzájemného propojení:

  • skriptovací jazyky jsou jednodušší, lehčí, názornější, intuitivnější. To je z velké části dáno tím, že se jedná většinou o jazyky dynamické a slabě typované (obecně řečeno, protože např. Python je typově silný jazyk).

  • Java nabízí celou řadu věcí, které nejsou dostupné v samostatných skriptovacích jazycích, např. transakční management nebo vzdálená volání. Kromě toho lze pomocí Javy využít obrovské množství knihoven třetích stran, které lze ve skriptech využít.

  • výběr skriptovacích jazyků pro Javu je dneska opravdu veliký

  • díky spojení s Javou se neztrácejí hlavní přednosti Javy - možnost vytváření velkých, robustních a škálovatelných aplikací.


Kromě výhod to má samozřejmě i nějaké nevýhody:
  • často se uvádí slabší výkonnost skriptovacího enginu s JVM oproti nativnímu enginu samotnému. Je to dáno tím, že je potřeba provádět řadu kontrol a konverzí mezi oběma světy. Toto např. neplatí úplně pro Groovy, což je jen taková jiná Java.

  • skripty napsané s pomocí JVM samozřejmě pak nelze spouštět v nativním enginu

  • někdy jsou světy Javy a skriptovacího jazyka natolik rozdílné, že to nelze v některých jazycích vůbec implementovat nebo za cenu ne úplně ideálního kódu. Myslím například anotace v Javě.

  • větší nároky spojené s údržbou aplikací. Dříve stačilo umět jen Javu, ale teď k tomu potřebuji znát ještě minimálně další jazyk.

  • podpora přímo na úrovni JVM od verze 6 - JSR 223


Takže k čemu já to jen využiji? I když si dokážu představit, že určité části aplikace napíši rychleji např. pomocí Groovy, tak jsem asi moc konzervativní, ale mě to zase taková výhoda nepřijde. Já mám svoji Javu rád :), takže si všechno napíšu v ní. Když to nebudu brát jen z mého osobního pohledu, tak přeci jen otázka údržby aplikace je hodně významná a s použitím více jazyků a technologií se tento problém stává těžší a komplikovanější (a tedy nákladnější). A když už budu psát část aplikace pomocí skriptovacích jazyků, tak proč už to pak nenapíšu celé jen pomocí skriptovacího jazyka?

Často se uvádí jako vhodné využití prototypování aplikací. Zde si to dovedu celkem představit jako přínosné, ale moje zkušenost mi říká, že spousta takto vytvořených prototypů se použije pro následný vývoj celé aplikace. Raději bych to tedy od začátku psal pořádně v Javě.

Můj osobní stav je nyní takový, že pořád moc nevím, kde a jak bych mohl efektivně využít skriptovací jazyky z pohledu vývoje v Javě. Budu moc rád, když přispějete formou diskuse a vysvětlíte mi, že se v určitých ohledech pletu nebo jsem jen špatně resp. málo informovaný.

7 komentářů:

Roman Pichlík řekl(a)...

Dobry point, nesedel jsi s nama nahodou v pondeli po JUGu?

http://www.sweb.cz/pichlik/archive/2007_12_16_archive.html#8694126777410811077

Petr Jůza řekl(a)...

Asi tam nějaký přenos myšlenek byl, protože jsem na JUGu v pondělí byl :).

Přidám jen krátkou reakci na tvůj článek: plně souhlasím s tím, že bych raději Javu (jako jazyk) nechal v takovém stavu jakém je a spíše se snažil zlepšit JVM a věci okolo (přesně jak píšeš v tvém článku Neměňte jazyk, změňte infrastrukturu).

Jinak se mi celkem zamlouvá tvoje myšlenka, kdy se vytvoří jádro v Javě a zbytek bude doděláno pomocí skriptovacích jazyků. Tento přístup mi dává smysl.

Moc ale nesouhlasím s tvou otázkou "jak drahé je najmout si člověka, který ovládá J2EE Javu a někoho kdo zvládne například JavaScript?" Ty to stavíš do polohy buď Java nebo Javascript, ale já si myslím, že je to spíše v poloze Java vs. Java + Javascript.

Roman Pichlík řekl(a)...

Myslel jsem potom v hospode ;-). Tam jsme to probirali u stolu asi v deseti lidech.

Moc ale nesouhlasím s tvou otázkou "jak drahé je najmout si člověka, který ovládá J2EE Javu a někoho kdo zvládne například JavaScript?" Ty to stavíš do polohy buď Java nebo Javascript, ale já si myslím, že je to spíše v poloze Java vs. Java + Javascript.

To je mozna jenom spatna interpretace, ja to vidim uplne stejne: Java + skriptovaci jazyk.

jira řekl(a)...

Proč se tolik obáváte změn jazyka? Ja tomu pořád nerozumím. Přeci, kdyby titíž lidé co v devadesátých letech minulého století Javu porodili dostali za úkol vymyslet Javu dnes, určitě by ji udělali jinou.

Docela by mě zajímalo co se nelíbí zrovna jim...

Petr Jůza řekl(a)...

Já nejsem nějaký velký bojovník proti novým věcem v Javě, ale byl bych raději, kdyby Java zůstala taková jaká je.
Jak se říká, v jednoduchosti je síla. Čím více vychytávek Java bude mít, tím méně to bude přehledné (čitelné), tím hůře se to bude používat.
Také mám pocit, že se Java snaží stát nesmrtelnou. Ať se nám to líbí nebo ne, Java má své nejlepší roky za sebou a lepší už to nikdy nebude.

jira řekl(a)...

No v jednoduchosti je síla. Ale je otázka, zda má být jednoduchý jazyk a nebo programy v něm napsané :-)

benzin řekl(a)...

No ja osobne si myslim, ze treba Groovy je hodne super, kdyz se pouzije v java aplikace pres Spring. Je to skriptik, da se to deplodnout bez nutnosti reloudnuti cele aplikace. Je tim mozne dosahnout daleko rozsahlejsiho nastaveni aplikace.

Je to taky vhodne pro programovani ruznych modulu. Samozrejme pro mne idelani by byla inerpretovana java, neco jako JSP, ale tak aby se to dalo napsat rovnou jako javi soubory. A kdyz mas modul odladeny tak ho proste presoupnes do kompilovane casti.