Přeskočit na obsah
programování

Programovací jazyk Elm

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:

  1. Nauč se Elm za Y minut - rychlý přehled, dokonce v češtině
  2. Oficiální průvodce jazykem Elm

Další užitečné zdroje:

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í.