Záhada jménem Groovy
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řejněný v únoru 2013 na serveru drdobbs.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 dlouhodobé potíže s výkonem mu trvale bránily v rozšíření ze specifický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.
Pochybuji, že nějaký úspěšný jazyk měl problematičtější dětství než Groovy. Původně bylo navrženo jako alternativa k jazyku Java - skriptovací jazyk, který by mohl poskytnou sílu JVM se syntaxí vyžadující méně ceremonie. V tomto ohledu následovalo NetRexx, první Java alternativu. Ovšem vyhnuli se rozhodnutí zvolit syntaxi, která bude cizí Java vývojářům. Prvotní návrh z roku 2003 byl dostateč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áplatovat původní úsilí. LaForge byl talentovaným projektový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 frameworkem, 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ůvodního JSR, na základě dvou vlastností: stručnost (aniž by utrpěla čitelnost) a vynikající schopnost pro vývoj domain-specific jazyků. Druhá vlastnost byla zřejmá v mnoha projektech, které dnes táhnout použití Groovy (kromě Grails): Griffon Swing framework, testovací framework easyb (držitel Jolt award) a poslední běsnící živel mezi buildovacími nástroji - Gradle.
Přes všechny přednosti trpělo Groovy několika důležitými nedostatky: za prvé tím nejbolestivě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ý pragmatismus). Jakákoliv nová vlastnost, která v komunitě rozzářila dostatek očí, byla zahrnuta. Takže jazyk, spíš než aby měl jasnou filozofii a dlouhodobý směr, rostl organickým způsobem, jaký bylo obtížné předvídat. Nakonec problém, který podle mě nejvíce zabránil přijetí Groovy, a to omezená dokumentace. 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álních testů svých Java programů. Skriptovací syntaxe byla dobrá pro rychlé zdrátování testů. Omezení výkonu mě v případě pomalu běžících testů nijak neomezovala. A protože moje testy obvykle hodně znovu používali scaffoldovaný kód, byla pro mě dokumentace obrovským problémem. Obě tyto vlastnosti mi připomínaly (předpokládám, že i ostatním), že Groovy je jazyk psaní skriptů a nikoliv tvorbu aplikací.
V roce 2008 byly Groovy a Grails týmy přivedeny do společnosti VMware, což učinilo tento jazyk jedinou Java alternativou podporovanou veřejně vlastněnou firmou. Avšak VMware byl flegmatickým zastánce jazyka, posouval Groovy vpřed pomalu (ačkoliv znatelně posouval ekosystém nástrojů). To dovolilo alternativá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 alternativa, třebaže s největší vývojářskou základnou.
Loni se díky vydání verze 2.0, která řeší výkonnostní problémy, stala výrazně lákavější alternativou. Na základě prototypu od Alexe Tkachmana přidal Groovy tým statické typování. Rovněž značně optimalizovali generování kódu, takže rychlost spuštění je teď srovnatelná s nativně zkompilovaný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řehlídku vede IntelliJ IDEA, ale všechny hlavní Java IDE nyní podporují Groovy)
Bohužel některé historické problémy přetrvávají. Další major release je plánovaný na tento rok, ale detaily jsou útržkovité a stále ještě není k dispozici roadmapa. Stejně tak opravdovým problém nadále zůstává dokumentace. Druhé vydání „Bible“ bylo zahájeno v roce 2009 a je ještě daleko od dokončení. Jeden tutoriál, Programming Groovy, byl aktualizovaný na verzi 2.0. Polooficiální dokumentace obsahuje stránky rozdílné kvality, některé s očividnými chybami.
Groovy má výkonnostní problémy za sebou a nyní je připraveno k rozsáhlému použití. Přináší některé skutečně jedinečné výhody: stručnost, čitelnost, Javě podobnou syntaxi, vynikající technologii pro psaní DSL, ojediněle dobrou podporu unit testování, mocné možnosti metaprogramová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 vlastností vyžaduje značnou dokumentaci, která prostě není dostupná, obzvláště pro pokročilou funkcionalitu, která Groovy přináší mnoho výhod. Když začnete dnes, shledáte, že je snadné se jazyk naučit, ale obtížné ovládnout. Naštěstí toto omezení není nevyléčitelné. Nicméně čas je hlavním konkurentem 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 dokumentaci. Pokud Groovy zareaguje brzy, může získat vedení mezi Java alternativami. Pokud ne, bude se muset smířit s rolí těch nevýznamných.