Web - Amazon

We provide Linux to the World


We support WINRAR [What is this] - [Download .exe file(s) for Windows]

CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
SITEMAP
Audiobooks by Valerio Di Stefano: Single Download - Complete Download [TAR] [WIM] [ZIP] [RAR] - Alphabetical Download  [TAR] [WIM] [ZIP] [RAR] - Download Instructions

Make a donation: IBAN: IT36M0708677020000000008016 - BIC/SWIFT:  ICRAITRRU60 - VALERIO DI STEFANO or
Privacy Policy Cookie Policy Terms and Conditions
Erlang (język programowania) - Wikipedia, wolna encyklopedia

Erlang (język programowania)

Z Wikipedii

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. Został on zaprojektowany przez firmę Ericsson w celu wspomagania oprogramowania rozproszonego, odpornego na błędy, czasu rzeczywistego oraz działającego non-stop. 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).

Tworzenie i zarządzanie procesami w Erlangu jest bardzo proste, w porównaniu do wątków, które są uważane za skomplikowane i są źródłem błędów w większości języków programowania.

Nazwa Erlang została nadana na cześć A. K. Erlanga. Nazwa może być również interpretowana jako ERicsson LANGuage.

Spis treści

[edytuj] Język funkcjonalny

Kod wygląda mniej więcej tak

-module(fact).
-export([fac/1]).

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


Poniżej jest implementacja algorytmu Quicksort

%% 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ęzyk

Główną siłą Erlanga jest wsparcie dla współbieżności. Ma on mały, lecz bardzo potężny zbiór prymitywnych 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).

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] 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, 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 (język programowania) i Java.

[edytuj] 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

[edytuj] Linki zewnętrzne

Our "Network":

Project Gutenberg
https://gutenberg.classicistranieri.com

Encyclopaedia Britannica 1911
https://encyclopaediabritannica.classicistranieri.com

Librivox Audiobooks
https://librivox.classicistranieri.com

Linux Distributions
https://old.classicistranieri.com

Magnatune (MP3 Music)
https://magnatune.classicistranieri.com

Static Wikipedia (June 2008)
https://wikipedia.classicistranieri.com

Static Wikipedia (March 2008)
https://wikipedia2007.classicistranieri.com/mar2008/

Static Wikipedia (2007)
https://wikipedia2007.classicistranieri.com

Static Wikipedia (2006)
https://wikipedia2006.classicistranieri.com

Liber Liber
https://liberliber.classicistranieri.com

ZIM Files for Kiwix
https://zim.classicistranieri.com


Other Websites:

Bach - Goldberg Variations
https://www.goldbergvariations.org

Lazarillo de Tormes
https://www.lazarillodetormes.org

Madame Bovary
https://www.madamebovary.org

Il Fu Mattia Pascal
https://www.mattiapascal.it

The Voice in the Desert
https://www.thevoiceinthedesert.org

Confessione d'un amore fascista
https://www.amorefascista.it

Malinverno
https://www.malinverno.org

Debito formativo
https://www.debitoformativo.it

Adina Spire
https://www.adinaspire.com