Abych se udržel ve cviku a potrápil mozek, rád se učím nové programovací jazyky. V práci většinu kódu píšu v Go a v Pythonu. Většina projektů je spíš “server-side”, ale říkal jsem si, že by bylo zajímavé se přiučit něco použitelného na front-endu jako náhrada za JavaScript a TypeScript.
Co je Elm?
Elm je silně typovaný, čistě funkcionální DSL (domain-specific language) pro tvorbu webových aplikací běžících v prohlížeči. Překladač tedy z elm programu vytvoří javascript pro prohlížeč. Oficiální verze pro server a nodeJS neexistuje.
Syntaxe vychází z Haskellu, tedy jazyků rodiny ML. Nenabízí však zdaleka vše co Haskell a lze říci, že jde o poměrně malý jazyk z pohledu syntaxe.
Jazyk nabízí vlastnosti známé i z jiných funkcionalních jazyků: čisté funkce, spravované side efekty, imutabilní hodnoty, algebraické datové typy, pattern matching s kontrolami, currying funkcí…
Proč Elm?
- Jednoduchost a rychlé učení: Elm je navržen s ohledem na spokojenost vývojářů a je extrémně snadné se ho naučit. Pro programátora je to na dva večery se naučit základ syntaxe.
- DSL - Elm je jak jazyk, tak i framework (TEA architektura), což znamená, že nemusíte vybírat a integrovat mnoho různých knihoven jako v JavaScriptu. Obsahuje vše potřebné pro správu balíčků, aktualizace virtuálního DOM, správu stavu a silné typování.
- Spolehlivý kompilátor: Kompilátor Elmu je známý pro své užitečné a srozumitelné chybové zprávy. Opravdu patří mezi nejlepší co jsem viděl.
- Skoro bez běhových výjimek: díky “omezením” funkcionální jazyka, schopnostem kompilátoru, architektuře aplikací je výsledkem aplikace skoro bez běhových chyb a výjimek. Ze stejných důvodů je i snadný a bezpečný refaktoring.
Proč Elm ne?
- Směrování vývoje: Sice se objevily informace, že autor jazyka, Evan Czaplicki, chystá i server side verzi Elmu, ale moc informací zatím veřejných není. Část komunity přešla k fork projektu s názvem Gren a tím se komunita trochu roztříštila.
- Méně knihoven: Menší komunita a menší počet knihoven.
- Hroší interoperabilita: Elm se hůře napojuje na existující JavaScript kód.
- AI vibecoding: Tím, že je méně repositářů, umí AI Elm méně, než třeba JS nebo Python. Na druhou stranu, pokud ji dáte dokumentaci, která je kvalitní, tak to docela funguje.
7 let bez aktualizace kompilátoru?
Vývoj jazyka jde dost proti proudu - stabilní jazyk a co nejmíň změn. Ačkoli poslední velká aktualizace kompilátoru byla v roce 2019, jazyk je obecně považován za dostatečně stabilní a zralý pro většinu tradičních single-page aplikací. Komunita je aktivní, nové balíčky vznikají, ale do jazyka a std. knihoven se nešahá. Ty jo, jaká příjemná změna oproti věčně měnícímu se stacku v JS! Tam po půl roce, pokud chci zaktualizovat node, framework x, knihovny y, tak většinou skončím rozbitým projektem.
Jak se naučit Elm?
Cestu jsem zvolil poměrně přímočaře:
- Nauč se Elm za Y minut - rychlý přehled, dokonce v češtině
- Oficiální průvodce jazykem Elm
Další užitečné zdroje:
- Elm in Action by Richard Feldman - prý asi nejlepší kniha o Elmu, mám v plánu si přečíst. Feldmanovi přednášky na Youtube jsou super.
- Elm track na Exercism - známá platforma pro učení programování zdarma formou menších cvičení.
Menší projekt na vyzkoušení
Ale nejlepší je samozřejmě se učit prostřednictvím nějakého menšího projektu. Já jsem zvolil předělání klasické MS-DOS hry Vlak ze začátku 90. let. Kód asi nezveřejním, ale výsledek si můžete zahrát zde: https://martinjanda.com/games/vlak/
Stojí Elm za pozornost?
Tím, že jde o relativně malý jazyk, architektura TEA je pevně daná a výsledkem je SPA do prohlížeče, přijde mi to jak dobrý vstupní bod do světa funkcionálního programování.