|
||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||
Erlang – język programowania ogólnego przeznaczenia oraz system do zastosowań współbieżnych. Jest językiem funkcyjnym, z gorliwą ewaluacją, pojedynczym przypisywaniem oraz dynamicznym typowaniem. Maszyna wirtualna Erlanga wykorzystuje własną implementację procesów, niezależną od procesów i wątków systemu operacyjnego. Czas tworzenia i niszczenia procesów w Erlangu jest bardzo krótkipotrzebne źródło w porównaniu z procesami bądź wątkami systemu operacyjnego, procesy te nie współdzielą między sobą danych, komunikują się wyłącznie przesyłając sobie komunikaty. Erlang został zaprojektowany w firmie Ericsson do tworzenia odpornego, współbieżnego oprogramowania czasu rzeczywistego, działającego non-stop, głównie na potrzeby urządzeń telekomunikacyjnychpotrzebne źródło. Umożliwia wymianę kodu (ang. hot swapping) bez zatrzymywania systemu. Erlang był własnościowym językiem programowania używanym przez Ericssona, jednak w roku 1998 kod źródłowy został otwarty. Implementacja Ericssona bazują na interpretacji kodu bajtowego, ale również zawiera kompilator nazywany HiPE (High Performance Erlang). Nazwa Erlang została nadana na cześć A. K. Erlanga, choć często bywa również interpretowana jako ERicsson LANGuage.
edytuj Język funkcjonalnyKod wygląda mniej więcej tak -module(fact). -export([fac/1]). fac(0) -> 1; fac(N) when N > 0 -> N * fac(N-1).
%% quicksort:qsort(List)
%% Sort a list of items
-module(quicksort).
-export([qsort/1]).
qsort([]) -> [];
qsort([Pivot|Rest]) ->
qsort([ X || X <- Rest, X < Pivot]) ++ [Pivot] ++ qsort([ Y || Y <- Rest, Y >= Pivot]).
Powyższy przykład wywołuje rekursywnie funkcje qsort dopóki nie ma już więcej elementów do posortowania. Wyrażenie [ X || X <- Rest, X < Pivot] można przeczytać jako "Dla wszystkich X należących do Rest, takich że X jest mniejsze od Pivot", co bardzo upraszcza obsługę list. edytuj Współbieżny i rozproszony językGłówną siłą Erlanga jest wsparcie dla współbieżności. Ma on mały, lecz bardzo potężny zbiór niskopoziomowych funkcji do tworzenia procesów i komunikacji między nimi. Procesy są podstawowymi elementami w strukturze aplikacji napisanych w Erlangu. Należy zaznaczyć iż Erlang nie używa, ani procesów systemu operacyjnego, ani wątków. Procesy Erlanga są lekkimi wątkami podobnymi do "zielonych wątków" w Javie. W wyniku tego procesy Erlanga są bardzo lekkie (ok. 300 bajtów na jeden wątek, a ich tworzenie jest szybkie) i można utworzyć ich bardzo dużo bez zmniejszania wydajności (przeprowadzano testy wydajnościowe z 20 milionami procesów)potrzebne źródło. Komunikacja pomiędzy procesami w Erlangu odbywa się poprzez asynchroniczne kanały (procesy nie współdzielą żadnych zmiennych) - system wymiany wiadomości: każdy proces w Erlangu ma skrzynkę (ang. mailbox) w której są przechowywane wiadomości wysłane przez inne procesy dopóki nie zostaną odczytane. Proces Erlanga następnie używa instrukcji receive do pobrania wiadomości. Odbieranie wiadomości odbywa się przez mechanizm dopasowania wzorca. Po odczytaniu wiadomości proces Erlanga wraca do wykonywania. Dowolna struktura Erlangu może zostać użyta jako wiadomość, co uwzględnia prymitywy (liczby całkowite, zmiennoprzecinkowe, znaki, atomy), n-tki uporządkowane (ang. tuples), listy, a nawet funkcje. Przykładowy kod:
Pid = spawn(Mod, Func, Args) % uruchamia funkcje Func jako nowy proces
Pid = spawn(Node, Mod, Func, Args) % uruchamia funkcje Func na zdalnym węźle Node
Pid ! a_message % wysyła wiadomość do procesu (asynchronicznie)
receive % odbiera wiadomość wysłaną do tego procesu
a_message -> do_something;
{data, Data_content} -> do_something_else(); % To jest 2-ka składają się z atomu i pewnych danych
{hello, Text} -> io:format("Got hello message: ~s", [Text]);
{goodbye, Text} -> io:format("Got goodbye message: ~s", [Text])
end.
W Erlangu jest wbudowane wsparcie dla procesów rozproszonych. Proces może zostać utworzony na zdalnym węźle, a komunikacja z nim jest przezroczysta (tzn. komunikację z zdalnym procesem przeprowadza się w dokładnie takim sam sposób jak z procesem lokalnym). Współbieżność wspiera obsługę błędów w Erlangu. Kiedy proces się zepsuje, wychodzi i wysyła wiadomość do procesu kontrolnego który może podjąć odpowiednią akcje. Ten sposób obsługi błędów może zwiększyć łatwość obsługi oraz redukować złożoność kodu. edytuj DystrybucjaErlang został upubliczniony wraz z kodem źródłowym przez firmę Ericsson, aby zapewnić jego niezależność od pojedynczej firmy i zwiększyć popularność języka. Język jest rozprowadzany razem z bibliotekami (m.in. , implementacją CORBA, SNMP, HTTP, FTP, TCP/IP, IIOP) oraz rozproszoną bazą danych czasu rzeczywistego (Mnesia) całość jest znana jako Open Telecom Platform (OTP), ponieważ jest najczęściej wykorzystywana w zastosowaniach telekomunikacyjnych. Ericsson i kilka innych firm oferują komercyjną pomoc dla Erlanga. Ważnym elementem OTP są gotowe wzorce projektowe (tzw. zachowania - behaviors), do tworzenia aplikacji, systemów nadzoru procesów, czy serwerów i mechanizmów przetwarzania zdarzeń. Po uwolnieniu źródeł w 1998 , jest on używany przez kilka ogólnoświatowych firm, w tym takie jak Nortel, T-Mobile i Telia. Mimo to, język nie stał się jeszcze szeroko znanym i używanym językiem programowania. Na rok 2006, Erlang jest w aktywnym rozwoju z regularnymi wydaniami. Jest dostępny dla systemów Unix oraz Microsoft Windows. Dostępny jest również interfejs niskopoziomowy dla języków C i Java. edytuj Zobacz też
edytuj Linki zewnętrzne
|
||||||||||||||||||||||||||||||||||||||
| All Right Reserved © 2007, Designed by Stylish Blog. |