Poświęciłem czas na naukę programowania funkcjonalnego i doszedłem do części, w której chcę zacząć pisać projekt zamiast po prostu zajmować się samouczkami / przykładami.
Podczas moich badań odkryłem, że Erlang wydaje się być dość potężny, jeśli chodzi o pisanie współbieżnego oprogramowania (co jest moim celem), ale zasoby i narzędzia do programowania nie są tak dojrzałe jak produkty programistyczne Microsoft.
F # może działać na Linuksie (Mono), aby spełnić to wymaganie, ale rozglądając się po Internecie, nie mogę znaleźć żadnych porównań F # z Erlangiem. W tej chwili skłaniam się ku Erlangowi tylko dlatego, że wydaje się, że ma najwięcej prasy, ale jestem ciekawy, czy naprawdę istnieje jakakolwiek różnica w wydajności między tymi dwoma systemami.
Ponieważ jestem przyzwyczajony do programowania w .NET, prawdopodobnie mogę zacząć z F # dużo szybciej niż Erlang, ale nie mogę znaleźć żadnego zasobu, który mógłby mnie przekonać, że F # jest tak samo skalowalny jak Erlang.
Najbardziej interesuje mnie symulacja, która będzie wypuszczać wiele szybko przetwarzanych wiadomości do trwałych węzłów.
Jeśli nie wykonałem dobrej pracy z tym, o co próbuję zapytać, poproś o dalszą weryfikację.
Odpowiedzi:
Co rozumiesz przez „realny”? „Mając najwięcej prasy” niekoniecznie jest najlepszym sposobem na wybór języka.
Twierdzeniem Erlanga do sławy jest jego zdolność do masowej równoległości. Dlatego jest powszechnie stosowany w przełącznikach telefonów Ericsson. Erlang działa w czasie rzeczywistym, dzięki czemu możesz zapewnić pewne gwarancje wydajności.
F # korzysta z możliwości optymalizacji jittera .NET. Ponadto sam język ma być wysoce funkcjonalnym językiem funkcjonalnym (jest odmianą OCaml, szeroko stosowaną w branży finansowej ze względu na szybkość).
Ostatecznie, o ile nie planujesz obsługiwać milionów małych agentów w tym samym czasie (do czego jest zoptymalizowany Erlang), F # powinno być odpowiednie.
Ta strona wyjaśnia odpowiednie przypadki użycia Erlang.
źródło
Na ten temat można sformułować niewiele obiektywnych stwierdzeń, ponieważ wydajność tych dwóch języków jest silnie uzależniona od stylu aplikacji i programowania.
Jedyną radą, jaką mogę udzielić, jest to, że F # ma przewagę wydajności nad systemem typu statycznego, a CLR wykonuje dobrą robotę, wykorzystując to w celu poprawy wydajności. F # ma asynchronicznych agentów i przekazywanie komunikatów, ale nie został zoptymalizowany, a kod synchroniczny jest często ponad 10 razy szybszy.
Erlang jest dynamicznie typowany, co stawia go w znacznej niekorzystnej sytuacji pod względem wydajności (spodziewaj się dużo więcej boksu), ale został zbudowany od podstaw, aby obsługiwać szybkie przekazywanie wiadomości między agentami asynchronicznymi, więc może być znacznie szybszy niż równoważny F # . Nie mam jednak żadnych wyników testów porównawczych: to tylko moje oczekiwania.
Nawiasem mówiąc, zarówno Erlang, jak i F # są stosunkowo małymi językami z małymi społecznościami, a ze względu na różne rynki docelowe ludzie znający oba są rzadkie. Jedyną osobą, o której mogę pomyśleć, która prawie się kwalifikuje, jest Jesper Louis Andersen, ale nie jestem pewien, ile F # zrobił.
źródło
Powinieneś przeczytać ten post Joe Armstronga: http://erlang.org/pipermail/erlang-questions/2012-Feb February/ 064277.html
Krótko mówiąc, Erlang nie został zaprojektowany tak, aby był szybki! W wielu przypadkach jest dość szybki, ale ma to drugorzędne znaczenie w kwestiach takich jak odporność na uszkodzenia i stabilność.
Prawda jest taka, że zarówno Erlang, jak i F # są fajnymi językami i chociaż rzuciłem okiem na F #, napisałem książkę o Erlang: Tworzenie aplikacji internetowych z Erlangiem i mogę powiedzieć, że jest to fajny język do pracy.
Chciałbym również zauważyć, że wydaje się, że w funkcjonalnych książkach językowych pojawi się rozkwit w ciągu najbliższych 6-9 miesięcy. Znam co najmniej 4 na Erlangu (w tym mój), jeden na Haskell, a także tytuły na OCaml, Clojure i F #.
źródło