definição e significado de Erlang_(język_programowania) | sensagent.com


   Publicitade D▼


 » 
alemão búlgaro chinês croata dinamarquês eslovaco esloveno espanhol estoniano farsi finlandês francês grego hebraico hindi holandês húngaro indonésio inglês islandês italiano japonês korean letão língua árabe lituano malgaxe norueguês polonês português romeno russo sérvio sueco tailandês tcheco turco vietnamês
alemão búlgaro chinês croata dinamarquês eslovaco esloveno espanhol estoniano farsi finlandês francês grego hebraico hindi holandês húngaro indonésio inglês islandês italiano japonês korean letão língua árabe lituano malgaxe norueguês polonês português romeno russo sérvio sueco tailandês tcheco turco vietnamês

Definição e significado de Erlang_(język_programowania)

Definição

definição - Wikipedia

   Publicidade ▼

Wikipedia

Erlang (język programowania)

Z Wikipedia

Skocz do: nawigacji, szukaj

Erlangję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ótki[potrzebne ź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ń telekomunikacyjnych[potrzebne ź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 bazuje 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.

Spis treści

Funkcyjność

Silnię można zaimplementować w następujący sposób:

<source lang="erlang">-module(fact).-export([fac/1]).

fac(0) -> 1;fac(N) when N > 0 -> N * fac(N-1).</source>

Poniżej jest implementacja algorytmu Quicksort

<source lang="erlang">%% 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]).

</source>

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.

Współbieżny i rozproszony język

Głó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 w Erlangu może zostać użyta jako wiadomość - prymitywy (liczby całkowite, zmiennoprzecinkowe, znaki, atomy), n-tki uporządkowane (ang. tuples), listy, a nawet funkcje.

Przykładowy kod:

<source lang="erlang">

Pid = spawn(Mod, Func, Args)       % uruchamia funkcje Func jako nowy procesPid = spawn(Node, Mod, Func, Args) % uruchamia funkcje Func na zdalnym węźle NodePid ! 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.

</source>

Prosty serwer można zaimplementować na bazie prostej pętli:

<source lang="erlang">-export([start/1, loop/1, net_state/2, get_state/1]).

start(S) ->

 Pid = spawn(mymodule, loop, [S]). % uruchom proces serwera

% kod wykonywany po stronie serwera

loop(State) ->

 receive   {mymodule, get_state, Pid, Ref} -> Pid ! {mymodule, state, Ref, State}, loop(State);   {mymodule, new_state, Pid, Ref, State2} -> Pid ! {mymodule, ok, Ref}, loop(State2);   upgrade -> mymodule:loop(State);   M -> io:format("Unknown message ~p, client error?~n", [M]), loop(State)   after 1000 -> io:format("Nic sie nie dzieje~n"), loop(State) end.

% Kod wykonywany po stronie klienta

new_state(Pid, X) ->

 Ref = make_ref(), % stworzy unikalna wartosc, aby nie pomylic sie przy odbiorze Pid ! {mymodule, new_state, self(), make_ref(), X},  % wyslij wiadomosc rec1(Ref). % zacznij odbierac, potencjalnie usuwajac stare (po timeoutach) wiadomosci

rec1(Ref) ->

 receive   {mymodule, ok, Ref, OldState} -> ok  % czekaj na dokladnie nasza wiadomosc, jesli jej nie ma, to:   {mymodule, ok, OtherRef, _OldState} -> rec1(Ref); % usun stare wiadomosci z kolejki, jesli ich nie ma, to:   after 1000 -> throw (timeout) % w przypadku timeoutu, zglos wyjatek end.

...</source>(make_ref/0 zwraca unikalną, dzięki temu, nawet przy przekroczeniu czasu oczekiwania i przyjściu starej wiadomości, selektywny recieve nie pomyli nowej odpowiedzi ze starą)

W większości wypadków korzysta się z wytycznych projektowych OTP, wśród których istnieje zachowanie (behaviour) gen_server, ułatwiające pisanie wydajnych i bezpiecznych serwerów.

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ę ze zdalnym procesem odbywa się w dokładnie taki 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 naprawy błędów ułatwia obsługę i redukuje złożoność kodu.

Dystrybucja

Erlang 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, m.in. takich jak Nortel, T-Mobile i Telia. Mimo to, język nie stał się jeszcze szeroko znanym i używanym językiem programowania. Mimo, to jest aktywnie rozwijany i używany z powodzeniem w zastosowaniach do których został zaprojektowany, przez choćby takie firmy jak Nokia, Kreditor, process one, tail-f, Yahoo, Facebook, BBC.

Erlang jest aktywnie rozwijany z regularnymi wydaniami. Najnowsze wydanie (R13B) dostępne od kwietnia? 2009 poza poprawkami przynosi duży przyrost wydajności na architekturach wielordzeniowych. Jest dostępny dla systemów Unix oraz Microsoft Windows.

Dostępny jest również interfejs niskopoziomowy dla języków C i Java. Istnieją również biblioteki ułatwiające obsługę protokołu i wartości erlangowych z poziomu C czy Pythona.

Corocznie odbywa się kilka konferencji poświęconych Erlangowi: Erlang Factory w San Franciso i Londynie, Erlang eXchange w Londynie, Erlang/OTP User Conference w Sztokholmie, ACM SIGPLAN Erlang Workshop w Edynburgu.

Zobacz też

  • Erlang/OTP, dystrybucja języka wraz z bibliotekami
  • Mnesia, rozproszona, odporna na błędy baza danych czasu rzeczywistego
  • ejabberd, serwer XMPP/Jabber napisany w Erlangu
  • Wings 3D, modeler 3d napisany w Erlangu
  • Yet another web server, Yaws, wysoko wydajny serwer Web napisany w Erlangu
  • Tsung, wysoko wydajne narzędzie diagnostyczne do przeprowadzania testów wydajności
  • Erlang Web, framework do pisania aplikacji WWW
  • CouchDB, rozproszona baza danych operta na dokumenty
  • Delicious
  • Nokia Disco, system MapReduce w Erlangu i Pythonie
  • Facebook, system rozmów napisany w Erlangu
  • GitHub, egitd, serwer systemu kontroli wersji GIT

Linki zewnętrzne

 

todas as traduções do Erlang_(język_programowania)


Conteùdo de sensagent

  • definição
  • sinónimos
  • antónimos
  • enciclopédia

 

4539 visitantes em linha

calculado em 0,047s