Erlang

Erlang ma wiele właściwości, które na ogół utożsamiane są bardziej z systemem operacyjnym, niż z językiem programowania.

Język współbieżny

Jedną z takich cech jest współbieżność. Implementacja współbieżnych procesów jest niezależna od systemu operacyjnego i nie używa specyficznych dla danego środowiska mechanizmów jak na przykład wątki. Tworzenie i zarządzanie erlangowymi procesami jest zadaniem trywialnym, podczas gdy programowanie wątków w innych językach bywa skomplikowane i nierzadko jest źródłem różnego rodzaju błędów. Erlangowe procesy są dużo lżejsze od systemowych, dzięki czemu operacje tworzenia, niszczenia i przełączania są relatywnie tanie obliczeniowo i pamięciowo. Procesy nie dzielą między sobą pamięci, a jedyną formą wymiany danych jest przesyłanie komunikatów.

W pojedynczym erlangowym systemie możliwe jest utworzenie nawet milionów procesów bez znaczącego obniżenia wydajności. W Computer Language Shootout w konkursie na przesyłanie wiadomości pomiędzy tysiącami wątkow (thread-ring) rozwiązanie napisane w Erlangu zajmuje pierwsze miejsce pod względem wydajności oraz objętości kodu.

System rozproszony

W język wbudowany jest mechanizm rozproszenia. Zakładając, że mamy kilka maszyn połączonych lokalną siecią, możliwe jest uruchomienie erlangowych węzłów na każdej z nich. Węzły tworzą klaster, w obrębie którego komunikacja międzyprocesowa odbywa się za kulisami i nie wymaga od programisty żadnych specjalnych zabiegów. Nie ma różnicy w przesyłaniu wiadomości w obrębie jednej maszyny czy jednego klastra.

Odporność na błędy

W Erlangu obsługa błędów odbywa się na ogół przez nadzór jednych procesów nad innymi. Zamiast próbować przewidzieć wszystkie możliwe błędy, jakie mogłyby wystąpić, co wiąże się z programowaniem w stylu defensywnym, dopuszcza się do krachu procesu, a następnie jego nadzorca podejmuje stosowną akcję – np. restart. Takie podejście do programowania zwiększa niezawodność i czyni kod mniej skomplikowanym. Ponadto nadzorca i nadzorowany nie muszą znajdować się na tej samej fizycznie maszynie, dzięki czemu stosunkowo łatwo daje się programować systemy wysokiej dostępności, w których poszczególne funkcje wykonywane są przez sprawne w danym momencie węzły.

Wysoka dostępność

Maszyna wirtualna pozwala na wymianę kodu w czasie pracy systemu. Ma to o tyle znaczenie, że systemy (zwłaszcza wysokiej dostępności) mogą być aktualizowane bez ich zatrzymywania. Ponadto garbage collection odbywa się z użyciem technik inkrementacyjnych, co pozwala na pisanie systemów typu soft-real-time.

Obsługa systemów wieloprocesorowych

Od wersji R11 środowisko Erlanga potrafi automatycznie wykorzystać potencjał ukryty w procesorach wielordzeniowych (multi-core) oraz systemach wieloprocesorowych (SMP). Wcześniej aby wykorzystać taki system należało uruchomić kilka kopii maszyny wirtualnej, co niestety pociągało zwiększenie zużycia pamięci, oraz zwiększało niepotrzebnie koszta przesyłania wiadomości pomiędzy procesami na jednym komputerze.

Jest o tyle ciekawe, że Erlang nie powstał z myślą o systemach wieloprocesorowych, jednak ponieważ większość aplikacji w Erlangu tworzy bardzo dużo niezależnych procesów, a nowa wersja maszyny wirtualnej korzysta z wielu procesorów, korzysta i cała aplikacja i to bez najmniejszej zmiany kodu źródłowego (ani nawet jej wyłączania?).

Zastosowania

W bardziej znanych aplikacji napisanych w erlangu należy wspomnieć serwer Jabbera ejabberd, który jest uznawany za bardzo stabilny i wysoko skalowalny, serwer stron WWW YAWS który w wielu testach generowania stron dynamicznych przegania Apacha oraz rozprowadzana razem z Erlangiem rozproszona, transakcyjna baza danych Mnesia. Istnieje również wiele innych aplikacji zarówno serwerowych, jak również klienckich (np. systemy GUI, czy modeler Wings 3D). Przykłady te pokazują, że Erlang nie jest kolejnym niszowym i eksperymentalnym językiem tylko bardzo sprawdzoną i stabilną platformą do rozwoju oprogramowania. O rosnącej popularności języka Erlang świadczy najlepiej przyjęcie pod skrzydła fundacji Apache projektu bazy danych CouchDB.

 
cotozajezyk.txt · ostatnio zmienione: 2009/11/07 13:41 (edycja zewnętrzna)
 
Wszystkie treści w tym wiki, którym nie przyporządkowano licencji, podlegają licencji:CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki