Haskell vs Erlang dla usług sieciowych

30

Chcę rozpocząć eksperymentalny projekt z użyciem funkcjonalnego języka i staram się zdecydować między Erlangiem a Haskellem, i oba mają pewne punkty, które naprawdę lubię.

Podoba mi się silny system pisma Haskell i jego czystość. Mam wrażenie, że dzięki temu łatwiej będzie napisać naprawdę niezawodny kod. I myślę, że moc Haskella znacznie ułatwi to, co chcę zrobić.

Z drugiej strony mam wrażenie, że niektóre frameworki do robienia rzeczy w sieci na Haskell, takie jak Yesod, nie są tak zaawansowane, jak ich części przeciwne Erlang.

Raczej podoba mi się podejście Erlanga do wątków i tolerancji na błędy. Mam wrażenie, że skalowalność Erlanga może być dużym plusem.

Co prowadzi do mojego pytania, jakie są doświadczenia ludzi we wdrażaniu backendów aplikacji internetowych w Haskell i Erlang. Czy są jakieś pakiety dla Haskella, które zawierają niektóre z lekkich wątków i aktorów, które mają w Erlangu?

Zachary K.
źródło
4
Jeśli nie określisz wymagań, nie możesz powiedzieć. Po prostu rzuć monetą lub coś takiego.
Vitor Py
1
Nie mam dowodu na ten wniosek, ale użycie Erlanga na Facebooku wskazuje mi, że jest on zarówno mocny, jak i niezawodny.
Mateusz
1
@Matthew: Facebook używa Erlanga do swojego systemu czatów, prawdopodobnie ze względu na jego masowo równoległe cechy.
Robert Harvey,
3
Tak, użyj Lisssssssp .
Mark C
8
W starym magazynie Commodore 64 mieli artykuł na temat fałszywych języków. Najlepszy był „Lithp”, który był dokładnie jak seplenienie, z tym wyjątkiem, że znak „s” został wykluczony. Zmusiło to wszystkich deweloperów „lithp” do zastąpienia „th” słowem „s”. :)
Berin Loritsch

Odpowiedzi:

17

Mam tylko pytanie, co robi twoja usługa internetowa? Jeśli usługa sieciowa jest naprawdę problemem funkcjonalnym, lepiej dopasuje się Haskell.

Erlang niekoniecznie jest językiem funkcjonalnym. Jest to język proceduralny z bardzo silnym modelem wykonania dla systemów masowo równoległych. Został zaprojektowany z myślą o branży telekomunikacyjnej i na pewno doskonale sprawdzi się w odpowiedzi na żądania usług internetowych.

Zobacz tę stronę *, aby zapoznać się z różnicami między programowaniem proceduralnym a funkcjonalnym. (Z góry przepraszamy za brzydką czerń na błękitnej stronie).

Jeśli twoja usługa internetowa wykonuje wiele reguł dopasowywania wzorców i stosowania reguł, to Haskel jest twoim wyborem. Jeśli chcesz tylko skalowalnej infrastruktury, która nie różni się zbytnio od języków, które prawdopodobnie już znasz, wybierz Erlang.

(* link przez maszynę Wayback. Oryginalny plik został usunięty)

Berin Loritsch
źródło
Będzie to coś, co bardzo przypomina sieć społecznościową. W tym momencie istnieje 90% szansy, że zostanie to zrobione w haskell.
Zachary K
12
Erlang jest językiem funkcjonalnym, a nie językiem proceduralnym. Ma doskonałą obsługę dopasowywania wzorców i unikalne dopasowywanie wzorców na bit, co jest bardzo pomocne podczas wykonywania usług sieciowych.
Jonas
@Berin, jak zawsze jest problem z linkami zewnętrznymi, teraz jest martwy.
thecoshman
@ thecoshman, Moje przeprosiny ... Po 3 latach nie pamiętam nawet zawartości tego, co kiedyś było na stronie.
Berin Loritsch
W ogóle nie martw się: D ¬_¬ nigdy więcej nie pozwól, aby to się powtórzyło. (zanim ludzie
zaczną
11

Pomiędzy tymi dwoma, o których wspominasz, zdecydowanie Haskell jest naukowcem, a Erlang jest wykorzystywany w rzeczywistych projektach o wysokiej skalowalności. Jeśli chodzi o usługi sieciowe, wybrałbym Erlang.

Ale powiedziałbym, że masz trzeci wybór: Scala , język, na który duży wpływ mają zarówno Haskell, jak i Erlang. Służy do budowania usług internetowych na najwyższym poziomie, takich jak Twitter czy Foursquare. Istnieje nawet Lift , platforma internetowa inspirowana Railsami i Django, choć z nieco innym, bardziej funkcjonalnym podejściem. Foursquare używa Lift.

vartec
źródło
2
Zgadzam się z odpowiedzią, z wyjątkiem ostatniego zdania. Winda bardzo różni się od szyn. Szyny są modułowe, winda jest monolityczna. Rails to framework MVC, Lift nie. Szyny są zorientowane obiektowo, Lift jest bardziej funkcjonalny.
dbyrne,
@dbyrne: ok, edytowano
vartec,
3
Problem ze Scalą dla usług sieciowych polega na tym, że najpopularniejsze serwery aplikacji Java skalują się naprawdę źle w porównaniu do serwerów napisanych w Erlang i Haskell.
Jonas,
1
@Jonas: istnieje na przykład vert.x vertx.io
vartec
Lift nie jest już de facto strukturą dla Scali. Teraz jest Play , który jest w pełni MVC i bezstanowy. Zgadzam się z odpowiedzią. Scala to lepszy wybór w prawdziwym świecie. Łatwiej zdobyć programistów Scala niż Erlang i Haskell.
Jus12
7

Zwykle mówię: „ucz się jak najdalej od strefy komfortu, dzięki czemu będziesz lepszym programistą, nawet jeśli nigdy nie będziesz go używać w praktyce”.

W tym przypadku prawdopodobnie oznacza to Haskell; ale Erlang staje się nie tylko prawie społecznie akceptowalny; ale główne punkty (lekkie procesy, przekazywanie wiadomości, ogromna skalowalność) pojawiają się na wielu innych „praktycznych” platformach, więc wyciągnięte wnioski mają duże i natychmiastowe zastosowanie w bardziej „prawdziwej” pracy.

moja rada: jeśli to dla zabawy, zrób Haskell. jeśli to na trening, idź Erlang.

Javier
źródło
jest to projekt typu pracy. Myślę, że prawdopodobnie będzie to Erlang, ale mogę zrobić haskell.
Zachary K