Elm, Elmish vs. Redux rubrika: Programování: JavaScript

7 xxar3s
položil/-a 21.4.2019
 
upravil/-a 21.4.2019

Pracujem ako react developer (v JS a TS) ale pretože môj najobľúbeneší jazyk je F# a pri vlastných projektoch ho často používam, pozrel som sa čo nového sa deje vo svete Fable. Pre tých čo nevedia Fable je kompilátor z F# do javascriptu. A jeho vývojári mu pripravili celý funkcionálny ekosystém. A k tomu prepísali do JS aj mnohé .NET knižnice a štandartné knižnice jazyka F#. A nakoľko F# si zakladá na strong typingu podobne ako typescript, dajú sa aj typové definície z typescriptu skonvertovať do F#.

Programovanie SPA pre F# je postavené na Reacte, ale je inšpirované Elmom. Modul sa volá Elmish. Je to síce podobná architektúra, ale mne už na prvý pohľad príde byť elmish intuitívnejší a zrozumitelnejší ako Redux https://fable.io/repl/ Proste vo funkcionálnom jazyku sa človek s týmto prístupom cíti ako ryba vo vode. Okrem toho v Elmish sa nepoužíva JSX zápis ale sa kód zapisuje priamo v F# čo ďaľšia výhoda aj kôli typovej kontrole atď.

Zaujímalo by ma teda v

  1. čom vidíte najvačšie rozdiely, výhody a nevýhody elmu (resp elmishu) oproti Reduxu?
  2. A v čom je podľa Vás elm lepší / horší jazyk ako F#?
odkaz
8 Občan
odpověděl/-a 27.4.2019

To je míchání dost různých věcí dohromady. Redux je nějaká knihovna pro stav aplikace, případně to můžeme nazvat i paternem-architekturou. Kdežto F# je plnohodnotný jazyk. A tím se dostávám k tomu, co mě na Elmu nejvíce fascinuje, že to je třetí věc a to úzce specializovaný jazyk a nástroj pouze na tvorbu webových aplikací a z tého specializace vychází perfektní ergonomie při práci. Elegatnost Elmu při tvorbě webových aplikací je mnohem více cítit, pokud si člověk na vlastní prsty zkusí příbuzné Elmu, ovšem plnohodnotné jazyky jako např. Purescript či Haskell.

Komentáře

  • Taco : Můžeš být konkrétnější? 27.4.2019
  • Honza Břešťan : Souhlas. Nemam zkusenosti s Reduxem, ale v porovnani Elm vs. F# je hodne znat, ze Elm ma jazykove prostredky jen na to, na co potrebuje - pure funkce, transformace dat, tagged unions pro snadnou praci s updaty, izolovane efekty. Naproti tomu F# ma skoro vsechnu syntaxi OCamlu, k tomu vlastni vynalezy (computation expressions, type providers) a navic musi plne zvladat interop s .NET svetem, takze s sebou tahne syntaxi pro praci s .NET dedicnosti, native interop a interop s C# features jako "ref returns" a podobne, ktere v kontextu MVU vubec nedavaji smysl. Na druhou stranu se to da brat i jako vyhoda. Zatimco Elm je jen pro frontend, F# (ASP.NET Core + Fable + Fable.Elmish) pokryje celou aplikaci, takze dovoli i castecny code reuse mezi frontendem a zbytkem aplikace a pritom muze pouzit vsechno, co na serveru nabizi .NET ekosystem. 28.4.2019
  • Taco : @Honza Břečťan: díky! 28.4.2019
  • Občan : Hlavní rozdíl je podle mě úplně někde jinde. Všechny univerzální jazyky jsou v jiné úrovni abstrakce. Pokud se chci specializovat na konkrétní doménu a být pracovně efektivní tak logicky musím použít doménové knihovny jako například Fable.Elmish. Což dá nějakou práci, než mohu začít vyjadřovat v kódu myšlenky, které se týkají konkrétní domény. Kdežto Elm je naprosto specializovaný jazyk, který v sobě tento boilerplate zapouzdřuje. V základu to je compiler jako pattern nad Haskellem. Vyšší úroveň abstrakce. Pokud bychom chtěli porovnávat s F#, tak potřebujeme specializovaný jazyk postavený nad F# a ne "pouhou" knihovnu. Nebo snad můžeme porovnávat Bash OCamlem? (Záměrně jsem použil pro porovnání Bash, jelikož stejně jako Elm má spojitost s algebrou.) 7.5.2019

Pro zobrazení všech 3 odpovědí se prosím přihlaste:

Rychlé přihlášení přes sociální sítě:

Nebo se přihlaste jménem a heslem:

Zadejte prosím svou e-mailovou adresu.
Zadejte své heslo.