it-swarm-eu.dev

Haskell vs Erlang pro webové služby

Těším se na zahájení experimentálního projektu s použitím funkčního jazyka a snažím se rozhodnout mezi Erlangem a Haskellem a oba mají některé body, které se mi opravdu líbí.

Mám rád Haskellův silný typ systému a čistoty. Mám pocit, že to usnadní psaní opravdu spolehlivého kódu. A myslím si, že síla Haskellu usnadní některé z toho, co chci dělat.

Co se týče mínus, mám pocit, že některé Rámce pro vytváření webových věcí na Haskellu, jako je Yesod, nejsou tak pokročilé jako jejich Erlangovy protějšky.

Spíše se mi líbí přístup Erlang k vláknům ak toleranci chyb. Mám pocit, že škálovatelnost Erlang by mohla být velkým plusem.

Což vede k mé otázce, jaké zkušenosti mají lidé s implementací backend webových aplikací v Haskell i Erlang. Existují balíčky pro Haskell, které poskytují některé z lehkých vláken a herců, které má člověk v Erlangu?

29
Zachary K

Jedinou otázkou, kterou mám, je to, co dělá vaše webová služba? Pokud je webová služba skutečně funkčním problémem, bude se Haskell lépe hodit.

Erlang nemusí být nutně funkční jazyk. Je to procedurální jazyk s velmi silným prováděcím modelem pro masivně paralelní systémy. Byl navržen pro telekomunikační průmysl a určitě by se skvěle hodil pro řešení požadavků na webové služby.

Pro přehled rozdílů mezi procedurálním a funkčním programováním viz tato stránka *. (Omlouvám se předem za ošklivou černou na azurové stránce).

Pokud vaše webová služba dělá spravedlivé množství vzorů a použití pravidel, pak Haskell je vaše volba. Pokud chcete pouze škálovatelnou infrastrukturu, která se příliš neliší od jazyků, které již pravděpodobně znáte, zvolte Erlang.

(* odkaz přes stroj Wayback. Původní soubor byl odstraněn)

19
Berin Loritsch

Mezi těmi, které zmiňujete, je určitě Haskell akademický, zatímco Erlang je používán v real-life high-škálovatelnost projektech. Takže ze dvou pro webové služby bych si vybral Erlang.

Ale řekl bych, že máte třetí možnost: Scala , jazyk, který je silně ovlivněn jak Haskellem, tak Erlangem. Používá se k vytváření špičkových webových služeb, jako jsou Twitter nebo Foursquare. Existuje dokonce Lift , webový rámec inspirovaný Rails a Django), i když s trochu odlišnější a funkčnější přístup. Foursquare používá Lift.

10
vartec

Obvykle říkám: "Učte se věci co nejdéle od vaší zóny pohodlí, bude z vás lepší programátor, i když je nikdy nepoužíváte v praxi".

V tomto případě by to pravděpodobně mohlo znamenat Haskella; ale Erlang se nejen stává téměř společensky přijatelným; ale hlavní body (lehké procesy, předávání zpráv, obrovská škálovatelnost) přicházejí na mnoha jiných „praktických“ platformách, takže získané zkušenosti mají velkou a okamžitou použitelnost na „skutečnější“ práci.

moje rada: pokud je to pro zábavu, udělej Haskell. pokud jde o výcvik, jděte Erlang.

6
Javier

Haskell (GHC) má přímou podporu zelených vláken (Erlangovy „procesy“). Například forkIO vytvoří nové zelené vlákno a vrátí jeho ID vlákna.

forkIO :: IO () -> IO ThreadId

mechanismus předávání zpráv je implementován balíčkem distribuovaný proces , ale není příliš dobře udržován.
Mechanismus sdílení dat Haskell se liší od Erlang. Haskell zahrnuje myšlenku proměnlivých globálních států a přidal abstrakce, aby bylo bezpečné použití. Příkladem toho je TVar ( [~ # ~] t [~ # ~] ransactioal Var iable), který umožňuje složitelné atomové transakce .
Haskell má také některé velmi vysoké knihovny webových služeb, které využívají svůj expresivní typový systém (závislé typy), například sluha. To vám umožní určit vaše REST API) pomocí DSL na úrovni typu, které lze použít v době kompilace pro zajištění bezpečnosti typu.

Upravit:
zřejmě distribuované-uzavření také implementuje serializaci uzavření pomocí staticptr

1
Poscat

Můžete také zvážit Rust .

  • Není to čistě funkční, ale podporuje polofunkční styl
    • Uzávěry
    • Immutovatelnost ve výchozím nastavení
    • Má silný, bezpečný makro systém, který vám umožní psát makra (nebo použít existující komunitně vytvořená) pro psaní kódu ve více funkčním stylu
  • Má knihovny/rámce pro každou úroveň abstrakce
  • Má silný důraz na efektivní zabezpečení paměti
  • Má silný typ systému
  • Díky tomu jsou všechny druhy souběžnosti opravdu snadné (pokud splníte všechny bezpečnostní požadavky)
  • Má velkou aktivní komunitu
  • Je to open-source (stejně jako ostatní, které jste zmínili)
  • atd.
0
Solomon Ucko