Již dávno jsem si zamiloval Groovy. Přemýšlel jsem, proč není tak skvělý jazyk rozšířenější. Odpověď mi dal článek The Groovy Conundrum (zveřej­něný v únoru 2013 na serveru drdobb­s.com), který napsal Andrew Binstock. S jeho laskavým svolením jsem text přeložil do češtiny (autorská práva, copyright, drží drdobbs.com; samotný překlad uvolňuji pod licencí Creative Commons by-nc-sa).

Groovy je jeden z nejzajímavějších jazyků běžící na JVM, ale jeho dlouho­dobé potíže s výkonem mu trvale bránily v rozšíření ze speci­fic­kých případů použití. Nicméně díky řadě vylepšení to vypadá, že by se jazyk mohl dostat do hlavního proudu. To je ona záhada.

Pochy­buji, že nějaký úspěšný jazyk měl proble­ma­tič­tější dětství než Groovy. Původně bylo navrženo jako alter­na­tiva k jazyku Java - skrip­to­vací jazyk, který by mohl poskytnou sílu JVM se syntaxí vyžadující méně ceremo­nie. V tomto ohledu násle­do­valo NetRexx, první Java alter­na­tivu. Ovšem vyhnuli se rozhod­nutí zvolit syntaxi, která bude cizí Java vývojářům. Prvotní návrh z roku 2003 byl dosta­tečný k tomu, aby byl vydán JSR. O chvíli později ho jeho vlastní zastánci opustili a projekt vypadal, že skomírá. Potom přispěchal jeden francouzský vývojář, Guillaume LaForge, a začal zápla­tovat původní úsilí. LaForge byl talen­to­vaným projek­tovým manažerem a časem přesvědčil komunitu, že je potřeba posunout jazyk vpřed.

Groovy byla dána šance příchodem Grails, webovým framewor­kem, který zdůrazňuje nové možnosti jazyka, aby dodal přístup konvence před konfigurací à la Rails pro JVM. V roce 2007 dosáhlo Groovy verze 1.0. Jazyk byl přijat, navzdory útokům od obou vedoucích původ­ního JSR, na základě dvou vlast­ností: struč­nost (aniž by utrpěla čitel­nost) a vynikající schop­nost pro vývoj domain-s­pe­cific jazyků. Druhá vlast­nost byla zřejmá v mnoha projek­tech, které dnes táhnout použití Groovy (kromě Grails): Griffon Swing framework, testo­vací framework easyb (držitel Jolt award) a poslední běsnící živel mezi buildo­vacími nástroji - Gradle.

Přes všechny přednosti trpělo Groovy několika důležitými nedostatky: za prvé tím nejbo­les­tivějším byl výkon. Bylo to pomalé, dokonce i na dynamický jazyk. Za druhé Groovy nemělo žádnou skutečnou filozofii návrhu (až na rozsáhlý pragma­tis­mus). Jakákoliv nová vlast­nost, která v komunitě rozzářila dostatek očí, byla zahrnuta. Takže jazyk, spíš než aby měl jasnou filozofii a dlouho­dobý směr, rostl organickým způso­bem, jaký bylo obtížné předvídat. Nakonec problém, který podle mě nejvíce zabránil přijetí Groovy, a to omezená dokumen­tace. Byla pouze jedna „Bible“ a dva tutoriály, které omílají základy (Programming Groovy a Groovy Recipes).

Navzdory těmto omezením jsem celkem používal Groovy na psaní UAT a funkcionál­ních testů svých Java programů. Skrip­to­vací syntaxe byla dobrá pro rychlé zdrátování testů. Omezení výkonu mě v případě pomalu běžících testů nijak neome­zo­vala. A protože moje testy obvykle hodně znovu používali scaffol­do­vaný kód, byla pro mě dokumen­tace obrov­ským problémem. Obě tyto vlast­nosti mi připomínaly (před­pok­ládám, že i ostat­ním), že Groovy je jazyk psaní skriptů a nikoliv tvorbu aplikací.

V roce 2008 byly Groovy a Grails týmy přive­deny do společ­nosti VMware, což učinilo tento jazyk jedinou Java alter­na­tivou podpo­ro­vanou veřejně vlast­něnou firmou. Avšak VMware byl flegma­tickým zastánce jazyka, posouval Groovy vpřed pomalu (ačkoliv znatelně posouval ekosystém nástrojů). To dovolilo alter­na­tivám jako Scala, JRuby a Clojure chopit se otěží. Tak se Groovy propadlo z prvních příček tam, kde je dnes, tedy pouze další Java alter­na­tiva, třebaže s největší vývojářskou základnou.

Loni se díky vydání verze 2.0, která řeší výkon­nostní problémy, stala výrazně lákavější alter­na­ti­vou. Na základě proto­typu od Alexe Tkachmana přidal Groovy tým statické typování. Rovněž značně optima­li­zo­vali generování kódu, takže rychlost spuštění je teď srovna­telná s nativně zkompi­lo­vaným Java kódem. Právě vydaná verze 2.1 vylepšuje některé dřívější výhody. Jazyk je náhle mnohem zajímavější a slibnější než býval. Navíc se v uplynulých letech vzrostla podpora v IDE a dalších nástrojích na celkem slušnou úroveň. (přeh­lídku vede IntelliJ IDEA, ale všechny hlavní Java IDE nyní podpo­rují Groovy)

Bohužel některé historické problémy přetr­vávají. Další major release je pláno­vaný na tento rok, ale detaily jsou útržko­vité a stále ještě není k dispo­zici roadmapa. Stejně tak oprav­dovým problém nadále zůstává dokumen­tace. Druhé vydání „Bible“ bylo zahájeno v roce 2009 a je ještě daleko od dokonč­ení. Jeden tutoriál, Programming Groovy, byl aktua­li­zo­vaný na verzi 2.0. Poloo­fi­ciální dokumentace obsahuje stránky rozdílné kvality, některé s očivid­nými chybami.

Groovy má výkon­nostní problémy za sebou a nyní je připra­veno k rozsáh­lému použití. Přináší některé skutečně jedinečné výhody: struč­nost, čitel­nost, Javě podobnou syntaxi, vynikající techno­logii pro psaní DSL, ojediněle dobrou podporu unit testování, mocné možnosti metap­rog­ra­mování, vynikající framework pro concurrency a nakonec dynamické a statické typování (můžete si vybrat). Přidává aktivní komunitu a vysoce kvalitní nástroje. Máte tak jazyk určený být hlavním hráčem. To je ta záhada.

Nekonečná škála vlast­ností vyžaduje značnou dokumen­taci, která prostě není dostupná, obzvláště pro pokroč­ilou funkcio­na­litu, která Groovy přináší mnoho výhod. Když začnete dnes, shledáte, že je snadné se jazyk naučit, ale obtížné ovlád­nout. Naštěstí toto omezení není nevyléč­i­telné. Nicméně čas je hlavním konku­rentem v získávání myslí a srdcí Java vývojářů. Scala má za sebou malou, plně soustředěnou, firmu, která vydává produkt často a generuje obsáhlou dokumen­taci. Pokud Groovy zarea­guje brzy, může získat vedení mezi Java alter­na­ti­vami. Pokud ne, bude se muset smířit s rolí těch nevýznamných.