Kto się zmierzy z Erlangiem? :)
Opublikowane przez Jarosław Zabiełło
Erlang, to język programowania stworzony pierwotnie przez, i na użytek, firmy telekomunikacyjnej Ericson do tworzenia wysokowydajnych, odpornych na błędy, aplikacji czasu rzeczywistego. Warto wiedzieć, że ogólne wymagania dla software w telekomunikacji są poza zasięgiem większości “klasycznych” aplikacji pisanych w C++ czy Javie. Dopuszczalna ilość przestojów aplikacji erlangowych jest rzędu kilku minut na rok. W Erlangu napisano bardzo wydajny serwer HTTP (YAWS), Jabbera/XMPP (Ejabberd), a nawet bazę danych czasu rzeczywistego (Mnesia). Istnieje także EarlyWeb framework do budowania aplikacji webowych za pomocą Erlanga.
Znane (m.in. w książek o Ruby i Rails) wydawnictwo Pragmatic Bookshelf wydało książkę o Erlangu Programming Erlang: Software for a Concurrent World. Stabilność i wydajność YAWS (napisanego w całości w Erlangu serwera HTTP) ośmiesza słynnego Apache’a. Podczas gdy Apache poddał się przy 4 tys. równoległych połączeń, YAWS bez żadnego wysiłku obsługiwał ich ponad 80 tysięcy. W sumie to nie była może tylko wina Apache ale także i Linuksa, który po prostu słabiej wypada na tle lekkich procesów Erlanga (Erlang nie używa systemowych wątków ani procesów).
Zaimplementowany w Erlangu serwer wymiany wiadomości za pomocą protokołów Jabber i XMPP ma również świetną wydajność (2 tys. pojedyńczych wiadomości / sekundę dla procesora 1.5 GHz). Bez problemu obsługuje nawet 7 tys. równoległych użytkowników. Uchodzi za najbardziej wypasiony i stabilny serwer XMPP (vide PDF) Wykorzystuje Mnesię, która nawiasem mówiąc, stosuje zupełnie inne podejście od relacyjnych baz danych.
Debugowanie i wyszukiwanie błędów w Erlangu jest bardzo łatwe, gdyż nie istnieje tam typowe pojęcie zmiennej. I jeśli jakiś stan jest utrwalony w danym miejscu to jest to tylko jedno takie miejsce w całym kodzie. Poniższy film pokazuje przykładowe wyłapanie i naprawa błędu na żywym systemie.
Twórca Erlanga w Krakowie
W najbliższych dniach w Krakowie odbędzie się Studencki Festiwal Informatyczny i tam będzie można posłuchać za darmo i na żywo Joe Amstronga, czołowego twórcę i propagatora języka Erlang. Joe jest też autorem książki Programming Erlang: Software for a Concurrent World.



“Erlang is a language used by people in-the-know (just like Ruby was a few years ago).” :) Jeden z języków w których programuję z przyjemnością. Wypada wspomnieć że Erlang jest językiem deklaratywnym.
PS Ericsson, software’u
Ericsson stosuje Erlang w switchach ATMowych i serwerze aplikacyjnym używanym w IMSsie. Większość jego platform używa innych rozwiązań: *Platforma “Cello” na bazie której zaimplementowana jest pakietowa transmisja danych (GPRS,EDGE,UMTS) zbudowana jest w C++ (elementy sieciowe GGSN, SGSN, RNC). *platforma AXE (sieci stacjonarne, domena komutacji łączy w GSM i UMTS) zbudowana jest na bazie jezyka Plex (to taki wielowątkowy BASIC wymyślony w latach 70tych). Na tych platformach też musi byc zachowana reguła “6 minut w ciągu roku może nie działać” – to wymagania klientów, których obchodzi niezawodność, a nie język użyty do budowy systemu.
Ale generalnie Erlang wydaje się interesujący – tzn. sam go nie znam, powtarzam opinie tych którzy z nim pracują.
Dla tych co chcieliby się zmierzyć z Erlangiem za pomocą swojego ulubionego języka, małe wyzwanie :)
“ośmiesza słynnego Apache’a.” Mozliwosci Apache’a sa jednak duzo wieksze niz YAWS. Taki light http serwer tez jest wydajniejszy od Apache’a. Apache daje duze mozliwosci co za tym idzie mniejsza wydajnosc. Jak ktos potrzebuje prostego ale wydajnego serwera www to pewnie YAWS bylby dobry. Ciekawe bybylo zastapienie mongrela YAWSem, ciekawe czy da sie to jakos prosto zrobic :)
Zastąpienie Mongrela YAWS’em jest kompletnie bez sensu. YAWS przecież nie przetwarza kodu Rubiego. Jeśli już, to można się zastanowić nad postawien z przodu YAWS w miejsce Apache, Lighttpd czy Nginx (które jednak muszą mieć ustawione proxy na Mongrela, Webricka czy Thin, serwera która zajmie się parsowanie kodu Railsów czy Merba). Tak swoją drogą jestem ciekaw jak by wyglądało starcie YAWS vs. Nginx.
No tak, YAWS przetwarza kod erlanga. Stawianie go zamiast apacha to duzo juz chyba by nie dalo. Mongrel jest wolny i to jego trzeba zastapic czyms lepszym. Zeby mozna jakis modul do YAWSa napisac obslugujacy kod rubiego to mysle ze bylby to kolejny killerapp dla RoR. Pobawilem sie troche erlangiem i widze, ze to fajny jezyk, skladnia w porownaniu z pieknem rubiego jest moze troche denerwujaca, ale wydajnosc tego jezyka jest narawde imponujaca. Postaram sie zrobic jakis test i wkleje wyniki :)
Zrobilem maly test wydajnosciowy: ruby 1.9: real 0m18.517s user 0m17.529s erlang: real 0m5.501s user 0m4.152s
Oto oba programy: Ruby def fac(n) if n == 0 1 else n * fac(n-1) end end
2000.times do |m| fac(m) end
Erlang: -module(speedtest). -export([start/0]).
fac(0) -> 1; fac(N) -> N*fac(N-1).
petla(0) -> 1; petla(M) -> X = fac(M), petla(M-1).
start() -> X = petla(2000), io:format(“~w ~n”,[X]).
Wiem, ze test jest zbyt prosty zeby porownywac jezyki i zeby mozna o nim dyskutowac to trzeba by go powtorzyc z 1000 razy ale na szybko daje odpowiedz co jest szybsze w tym konkretnym przypadku :)
Wybaczcie rozjechalo kod:
Nie da się ukryć, że Erlang jest fajny, podobnie jak inne języki funkcyjne, ale mimo to wątpię w to, by stał sie Next Big Language. Błyszczy w pewnych zastosowaniach, ale wcale nie wiadomo, czy byłby taki super w innych (podobnie jak np. OCaml, który też jest poważnie niedocenianym językiem, no i jest całkiem szybki). Tak czy siak warto poczytać, odświeżam sobie ostatnio wiedzę o różnych niszowych językach, których jedynym powodem na niszowość wydaje się to, że Microsoft / Sun ich nie wspierają, lub że są za mało podobne do C++ – Scala, Lua, TCL, Scheme…
Interesujące spojrzenie na Erlanga z perspektywy guru od CORBY: link
A ja szukam jezyka cos ala VHDL ale na pc, tzn. zeby caly kod mogl sie wykonywac rownolegle a tylko niektore bloki by mozna oznaczyc jako sekwencyjne.
Spotkałem się z opiniami, że język ten w niedalekej przyszłości może być używany w app. biznesowych, np. do zasilania danymi app. we flex i spotkałem nawet określenie NEXT JAVA ;) To tak jakby ktoś chciał kolarzówką na rajd Paryż-Dakar pojechać, prawda? ;)
Z Erlangiem mozna sie tez zmierzyc na konferencji Erlang Factory, ktora bedzie miala miejsce w Londynie.
Erlang University: 22.-24. czerwiec 2009 Erlang Factory (konferencja): 25.-26.czerwiec 2009
Jest to najwieksza konferencja poswiecona Erlangowi! Do tej pory mamy potwierdzonych 35. prelegentow z czterech kontynentow. Bedzie mozna wysluchac wykladu i poznac m.in. Joe Armstrong i Bjarne Dacker (ojcowie Erlanga), Simon Peyton-Jones (Microsoft), Mark Imbriaco (37signals), Kenneth Lundin (Ericsson). Zapraszamy takze do udzialu w poprzedzajacych konferencje 3.dniowych szkoleniach (przy zapisie do konca tego weekendu £50 znizki). Wiecej o konferencji, programie, wykladowcach i zapisach mozna dowiedziec sie wchodzac na strone: www.erlang-factory.com
Do zobaczenia na Erlang Factory!