Język programowania Erlang



Podobne dokumenty
Język programowania Erlang

Paradygmaty programowania

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Czym jest Java? Rozumiana jako środowisko do uruchamiania programów Platforma software owa

Programowanie współbieżne i rozproszone

SYSTEMY OPERACYJNE: STRUKTURY I FUNKCJE (opracowano na podstawie skryptu PP: Królikowski Z., Sajkowski M. 1992: Użytkowanie systemu operacyjnego UNIX)

Podstawy programowania skrót z wykładów:

76.Struktura oprogramowania rozproszonego.

Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek].

REKURENCJA W JĘZYKU HASKELL. Autor: Walczak Michał

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Programowanie w języku C++ Grażyna Koba

Mechanizmy pracy równoległej. Jarosław Kuchta

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

ξ II.UWr Erlang - wprowadzenie Marek Materzok 29 października 2007

Programowanie równoległe i rozproszone. Praca zbiorowa pod redakcją Andrzeja Karbowskiego i Ewy Niewiadomskiej-Szynkiewicz

1 Podstawy c++ w pigułce.

Wstęp do programowania. Wykład 1

Programowanie w języku Python. Grażyna Koba

Wprowadzenie. Organizacja pracy i środowisko programistyczne. Mirosław Ochodek

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach?

Erlang! Politechnika Poznańska. Łukasz Cieśnik, (Politechnika Poznańska) Erlang!

Składnia funkcji i Rekurencja w języku Haskell

1 Podstawy c++ w pigułce.

Wprowadzenie. Dariusz Wawrzyniak 1

4. Funkcje. Przykłady

Integracja komunikatora opartego o protokół XMPP z dużym portalem internetowym

INFORMATYKA, TECHNOLOGIA INFORMACYJNA ORAZ INFORMATYKA W LOGISTYCE

1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.

Algorytm. a programowanie -

Blockly Kodowanie pomoc.

Bash - wprowadzenie. Bash - wprowadzenie 1/39

Zakres tematyczny dotyczący kursu PHP i MySQL - Podstawy pracy z dynamicznymi stronami internetowymi

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

Oracle PL/SQL. Paweł Rajba.

Python wprowadzenie. Warszawa, 24 marca PROGRAMOWANIE I SZKOLENIA

Pierwsze kroki. Algorytmy, niektóre zasady programowania, kompilacja, pierwszy program i jego struktura

Java EE produkcja oprogramowania

Tworzenie i obsługa wirtualnego laboratorium komputerowego

Języki programowania C i C++ Wykład: Typy zmiennych c.d. Operatory Funkcje. dr Artur Bartoszewski - Języki C i C++, sem.

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Przykład 1: Funkcja jest obiektem, przypisanie funkcji o nazwie function() do zmiennej o nazwie funkcja1

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.

Informacja o języku. Osadzanie skryptów. Instrukcje, komentarze, zmienne, typy, stałe. Operatory. Struktury kontrolne. Tablice.

Prof. Danuta Makowiec Instytut Fizyki Teoretycznej i Astrofizyki pok. 353, tel danuta.makowiec at gmail.com

Podstawy programowania. Wprowadzenie

Oczywiście plik musi mieć rozszerzenie *.php

Programowanie obiektowe

Dokumentacja wstępna TIN. Rozproszone repozytorium oparte o WebDAV

Wstęp do Programowania, laboratorium 02

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Programowanie Komponentowe WebAPI

I. KARTA PRZEDMIOTU CEL PRZEDMIOTU WYMAGANIA WSTĘPNE W ZAKRESIE WIEDZY, UMIEJĘTNOŚCI I INNYCH KOMPETENCJI EFEKTY KSZTAŁCENIA

5. Model komunikujących się procesów, komunikaty

Typy, klasy typów, składnie w funkcji

Wykład 8: klasy cz. 4

Nazwa Wydziału Nazwa jednostki prowadzącej moduł Nazwa modułu kształcenia Kod modułu Język kształcenia Efekty kształcenia dla modułu kształcenia

Powtórka algorytmów. Wprowadzenie do języka Java.

Programowanie w Turbo Pascal

Dokumentacja aplikacji Szachy online

Wstęp do. Erlanga. Mateusz Lenik

Języki programowania deklaratywnego

Słowem wstępu. Część rodziny języków XSL. Standard: W3C XSLT razem XPath 1.0 XSLT Trwają prace nad XSLT 3.0

Pascal - wprowadzenie

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 1. Karol Tarnowski A-1 p.

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki

Zapisywanie algorytmów w języku programowania

Programowanie obiektowe - 1.

Bloki anonimowe w PL/SQL

Klasa 2 INFORMATYKA. dla szkół ponadgimnazjalnych zakres rozszerzony. Założone osiągnięcia ucznia wymagania edukacyjne na. poszczególne oceny

Sortowanie - wybrane algorytmy

Język programowania DELPHI / Andrzej Marciniak. Poznań, Spis treści

Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane

Podstawy i języki programowania

ECDL Podstawy programowania Sylabus - wersja 1.0

Wprowadzenie do programowania

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

INFRA. System Connector. Opis systemu

1 Wprowadzenie do algorytmiki

Akademia Techniczno-Humanistyczna w Bielsku-Białej

XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Programowanie obiektowe zastosowanie języka Java SE

Wybrane działy Informatyki Stosowanej

3. Podaj elementy składowe jakie powinna uwzględniać definicja informatyki.

2 Przygotował: mgr inż. Maciej Lasota

Podstawy programowania. Wykład 6 Wskaźniki. Krzysztof Banaś Podstawy programowania 1

Bazy danych 2. Wykład 1

Programowanie funkcyjne wprowadzenie Specyfikacje formalne i programy funkcyjne

Relacyjne, a obiektowe bazy danych. Bazy rozproszone

TOPIT Załącznik nr 3 Programowanie aplikacji internetowych

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44

Podyplomowe Studium Informatyki w Bizniesie Wydział Matematyki i Informatyki, Uniwersytet Łódzki specjalność: Tworzenie aplikacji w środowisku Oracle

Wstęp do programowania 2

Rok akademicki: 2012/2013 Kod: JFM s Punkty ECTS: 3. Poziom studiów: Studia I stopnia Forma i tryb studiów: Stacjonarne

Transkrypt:

Piotr Pałach Język programowania Erlang 1. Informacje podstawowe 1.1. Opis języka Erlang został stworzony w laboratorium firmy Ericsson i jest z powodzeniem stosowany w projektach wymagających wysokiej skalowalności i odporności na awarie. Jest to język funkcyjny, dynamiczny, o ścisłym typowaniu, w którym główny nacisk położono na współbieżność oraz możliwości przetwarzania rozproszonego. Erlang był własnościowym językiem programowania używanym przez Ericssona, jednak od roku 1998 kiedy kod źródłowy został otwarty, zyskuje z dnia na dzień na popularności. Z powodzeniem używany jest w komercyjnych produktach na całym świecie, które wykraczają niejednokrotnie poza jego telekomunikacyjne korzenie. 1.2. Nazwa Nazwa Erlang została nadana na cześć pierwszego naukowca w dziedzinie telekomunikacji: Agnera Krarupa Erlanga (1878-1929), matematyka dunskego, pioniera teorii ruchu telekomunikacyjnego oraz teorii kolejek. Czasami nazwa języka bywa interpretowana jako Ericsson LANGuage. 2. Cechy Erlanga. 2.1. Współbieżność Jedna z głównych zalet Erlanga. Procesy są podstawowymi elementami w strukturze aplikacji napisanych w Erlangu. 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 bardzo proste, podczas gdy w innych językach współbieżność dostarcza wielu problemów oraz jest źródłem nie małej ilości różnego rodzaju błędów. Erlangowe procesy są dużo lżejsze od systemowych(ok. 300 bajtów na jeden proces), dzięki czemu operacje tworzenia i niszczenia procesów są relatywnie tanie obliczeniowo i pamięciowo. 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

2. Cechy Erlanga. 2 względem wydajności oraz objętości kodu. Komunikacja pomiędzy procesami w Erlangu(z racji tego, że procesy nie dzielą między sobą wspólnej pamięci) odbywa się poprzez przesyłanie asynchronicznych komunikatów. Z każdym procesem powiązana jest kolejka FI- FO, służąca do odbioru komunikatów. Proces odbiorczy decyduje o tym, czy dany komunikat przetworzyć, czy nie. Wszystko to jest Każdy proces ma swoją skrzynkę (ang. mailbox), w postaci kolejki, w której są przechowywane wiadomości wysłane przez inne procesy dopóki nie zostaną odczytane. Odbieranie wiadomości odbywa się przez mechanizm dopasowania wzorca. Po odczytaniu wiadomości proces Erlanga wraca do wykonywania. Do utworzenia wiadomości może zostać użyta dowolna struktura danych(liczby całkowite, zmiennoprzecinkowe, znaki, atomy), a nawet funkcje. 2.2. Rozproszoność W język wbudowany jest mechanizm rozproszenia. Można tworzyć procesy z dowolnego węzła na dowolnym węźle. 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). 2.3. Obsługa błędów Obsługa błędów odbywa się na ogół przez nadzór jednych procesów nad innymi. Kiedy proces się zepsuje, wychodzi i wysyła wiadomość do procesu kontrolnego, który może podjąć odpowiednią akcje - np. restart bądź zakończyć zepsuty proces i uruchomić następny. Takie podejście do programowania zwiększa niezawodność i czyni kod mniej skomplikowanym. Ponadto proces kontrolny i proces 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. 2.4. Gorąca wymiana kodu(hot code upgrade) Wiele systemów nie może być zatrzymana w celach wymiany oprogramowania. W Erlangu można wymieniać kod w uruchomionym systemie(w systemie koegzystują przez chwile oba kody), a tym samym instalować poprawki błędów oraz uaktualnienia bez zatrzymywania działania systemu. 2.5. Obsługa systemów wieloprocesorowych Od wersji R11 środowisko Erlanga potrafi automatycznie wykorzystać potencjał ukryty w procesorach wielordzeniowych (multi-core) oraz systemach wieloprocesorowych. 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 koszty przesyłania wiadomości pomiędzy procesami na jednym komputerze. W większości przypadków kod, napisany dla jednego procesora, bez problemu wykorzysta możliwości takiej architektury, i to bez żadnych zmian w programie.

3. Zastosowania języka Erlang 3 3. Zastosowania języka Erlang Najpopularniejsze aplikacje, które zostały napisane w erlangu to: Mnesia, rozproszona, odporna na błędy baza danych czasu rzeczywistego, rozprowadzana wraz z Erlangiem ejabberd, serwer Jabber napisany w Erlangu, który jest uznawany za bardzo stabilny i wysoko skalowalny Yet another web server, Yaws, wysoko wydajny serwer stron Web który w wielu testach generowania stron dynamicznych przegania Apacha Tsung, wysoko wydajne narzędzie diagnostyczne do przeprowadzania testów wydajności oraz wiele innych aplikacji zarówno klienckich jak i również serwerowych Zastosowania języka erlang pokazują, że ten język nie jest kolejnym mało znaczącym językiem programistycznym, którego ktoś wymyślił z powodu dużo wolnego czasu, ale bardzo dobrze sprawdzoną i stabilną platformą do rozwoju oprogramowania. Obecnie Erlang używany jest przez kilka ogólnoświatowych firm telekomunikacyjnych takich jak: Nortel, T-Mobile i Telia. 4. Typy danych Erlang jest językiem z dynamicznym typowaniem oraz statycznym pojedynczym przypisaniem. Oznacza to, iż nie określamy jawnie typu zmiennej, jednak wartość zmienne musimy już jawnie określić. Ponadto w przeciwieństwie do wielu języków jak np. C++, czy Java raz przypisana wartość do zmiennej nie może zostać później zmieniona. Nową zmienną tworzy się poprzez jej pierwsze użycie, kiedy zostaje przypisana jej wartość. W praktyce oznacza to: X= 3 Kiedy ten kod zostanie wykonany, Erlang za pomocą operatora = porównuje lewą stronę z prawą stroną i próbuje znaleźć zwór. Jeśli znajdzie że lewa strona równania nie została jeszcze utworzona, a prawa strona jest wartością, tworzy zmienną i przypisuje mu wartość. Jeżeli teraz chcielibyśmy przypisać inną wartość do zmiennej x zostanie wyrzucony błąd. X= 10 To samo ograniczenie wpływa na instrukcję popularną w C++ i Javie X+= 5 Wyróżniamy podstawowe typy danych 4.1. Liczba (całkowita lub zmiennoprzecinkowa) Liczby w Erlangu są konstruowane jak w wielu innych językach, przy pomocy cyfr. Liczby całkowite mają nieograniczony zakres(jedyne ograniczenie - wielkość pamięci). Przykład:

4. Typy danych 4 1-15 123.1233 4.2. Atom Atom jest to literał, którego nazwa zaczyna się z małej litery. Jeżeli atom zaczyna się z dużej litery, lub zawiera spacje musi być ujęty w pojedynczy apostrof. Przykład: pierwszy drugi_atom Trzeci atom 4.3. Tuple Tuple składa się ze stałej liczby elementów otoczonych parą nawiasów klamrowych ({ i }). Element tupla może się składać z liczby, bądź cyfry. Dowolny elementy tupla może być łatwo dostępny, szczególnie przy użyciu wzorców. Tuple możemy manipulować za pomocą funkcji BIF - Build In Function(funkcje które zostały wbudowane w wirtualną maszynę Erlang). Przykład: 1> T1 = {piotr,23,{luty,29}}. {piotr,23,{luty,29}} 2> element(1,t1}. piotr 3> element(3,t1). {luty,29} 4> T2 = setelement(2,t1,25). {piotr,25,{luty,29}} 5> tuple size(t1). 3 6> tuple size({}. 0 7> {Imie,Lata,Data_urodz} = T1. {piotr,23,{luty,29}} 8> Imie. piotr 4.4. Lista Lista w przeciwieństwie do tupla może zawierać zmienną liczbę elementów oddzielonych przecinkami, które otoczone są parą kwadratowych nawiasów [ i ]. Ciąg znaków otoczonych cudzysłowem również jest listą, a jej elementami są litery (które są liczbami 32-bitowymi). Możemy utworzyć listę z

4. Typy danych 5 elementami różnych typów, ze względu na to że Erlang jest językiem dynamicznym, w którym występuje nieścisłe typowanie. Dostęp do elementów listy jest realizowany przy pomocy dostępu do głowy listy (head), oraz ogona (tail). Głowa listy zawiera pierwszy element, natomiast ogon pozostałą część listy(podobieństwo do listy Prologowskiej). Składnia języka ułatwia operacje na listach, a biblioteka standardowa STDLIB zawiera wiele pomocnych funkcji do obsługi list. Przykład: 1> L1 = [b,1,{d,2 }]. [b,1,{d,2 }]. 2> [H T] = L1. [b,1,{d,2 }]. 3> H. b 4> T. [1,{d,2 }]. 5> L2 = [d T]. [d,b,1,{d,2 }]. 6> length(l1). 3 7> length([]). 0 Listy umożliwiają różnego rodzaju filtoranie danych. 1> L = [1,2,3,4,5]. [1,2,3,4,5] 2> [E +1 E <- L]. [2,3,4,5,6] 3> [E E <- L, E < 3]. [1,2] 4> [E + 1000 E <- L, E =/= 1, E < 3 orelse E > 4]. [1002,1005] 6> [E + 1 E <- [1,"Kitten","Batman",5], is_integer(e) ]. [2,6] 7> [ A {A,B} <- [{a,b},{c,d},1,tomato,{e,f}] ]. [a,c,e] Trzy pierwsze operacje na listach sprowadzają się do wykonania akcji dla każdego E w liście L gdzie warunek jest spełniony. Ostatnie dwie instrukcje pokazuja że filtrowanie danych na liście, może być wykonywane dla różnych typów elementów. 4.5. Inne typy fun() - jest to obiekt funkcyjny, umożliwia stworzenie funkcji anonimowej która będzie w sobie zawierała odwołanie do prawdziwej funkcji 1> Fun1 = fun (X) -> X+1 end. #Fun<erl eval.6.39074546>

5. Kilka prostych przykładów 6 2> Fun1(3). 4 pid procesu - potrzebny do przekazywania komunikatów, albo sprawdzania stanu procesu port -służy do komunikacji przy pomocy komunikatów ale z elementami poza językiem Erlang, np. programem C, potokiem UNIX, czy socketem TCP rekord - tuple o specjalnej konstrukcji boolean - wartość logiczna true lub false 5. Kilka prostych przykładów 5.1. Silnia Wzór na silnię przedstawia się następująco n! = 1, if n = 0, n! = n * (n - 1)!, if n > 0 Zapis silni w erlangu jest bardzo zwięzły : silnia(0) -> 1; silnia(n) -> silnia(n-1) * N. 5.1.1. Forma Klauzulowa W erlangu do zapisu wyrażenia warunkowego wykorzystano tak zwaną formę klauzulową. Składa się ona z pewnej liczby klauzul opisujących przypadki związane z wyznaczaniem wartości funkcji: funkcja(argumenty1) -> ciało1; % klauzula1 funkcja(argumenty2) -> ciało2; % klauzula2... funkcja(argumentyn) -> ciałon. % klauzulan Poszczególne klauzule pisane są jedna pod drugą, rozdzielone są znakiem średnika a ostatnia zakończona jest kropką. Kiedy funkcja o takiej postaci jest wykonywana wybierana jest jedna klauzula, pierwsza z góry, która spełnia warunek. Wybór następuje na podstawie związanych z nimi warunków. Liczy się przy tym kolejność definicji klauzul. W naszym programie mamy tylko dwie przypadki (N>0and N=0). Jeśli argumentem wywołania funkcji będzie 0 zostanie ono dopasowane do argumentu pierwszej klauzuli i zwrócona zostanie wartość 1. W przeciwnym przypadku zadziała klauzula 5.1.2. Dopasowanie do wzorca Podstawowym sposobem dostarczania warunków jest mechanizm dopasowywania do wzorca. Dopasowanie do wzorca polega na sprawdzeniu czy oba typy argumentów do siebie pasują. W rozważanym przypadku, liczby pasują gdy są sobie równe, zmienne zaś pasują do każdej liczby przejmując jednocześnie jej wartość. Wartościowanie logiczne dopasowania jest istotną różnicą

5. Kilka prostych przykładów 7 pomiędzy opisywanym a standardowym, imperatywnym przypadkiem gdzie następuje tylko przypisanie do zmiennych. W przypadku silni jeśli argumentem wywołania funkcji będzie 0 zostanie ono dopasowane do argumentu formalnego pierwszej klauzuli i zwrócona zostanie wartość 1. W przeciwnym przypadku zadziała klauzula 2. 5.1.3. Definicja modułu prostefunk oraz funkcji silnia Wszystkie funkcje w Erlangu powinny być definiowane w modułach. Moduł prostefunk.erl zawiera zdefiniowaną silnię wraz z odpowiednimi nagłówkami -module(prostefunk). -export([silnia/1]). silnia(0) -> 1; silnia(n) when N>0 -> silnia(n-1) * N. Znaczenie Insrukcji: -module(prostefunk) - nazwa modułu zgodną z nazwą pliku -export([silnia/1]) - nazwa funkcji, oraz liczba argumentów(funkcja silnia posiada jeden argument) 5.1.4. Kompilacja I uruchomienie funkcji silnia 1> c(prostefunk). {ok,prostefunk} 2> prostefunk:silnia(25). 15511210043330985984000000 5.2. Algorytm Quicksort 5.2.1. Defnicja funkcji Quicksort -module(prostefunk). -export([quicksort /1]). quicksort ([]) -> []; quicksort([pivot T]) -> quicksort ([X X <- T, X < Pivot]) ++ [Pivot] ++ quicksort ([X X <- T, X >= Pivot]). Powyższa definicja funkcji Quicksort wywołuje rekurencyjnie funkcje quicksort dopóki wszystkie elementy nie zostały posortowane. Wyrażenie [X X - T, X Pivot] oznacza: dla każdego X który należy do ogona listy, który nie zawiera już pierwszego elementu, i takich X które są mniejsze od elementu Pivot(element podziału, środkowego) wykonaj rekurencyjnie sortowanie tego zbioru. Operator ++ ma za zadanie połączyć powstałą po sortowaniu listę

5. Kilka prostych przykładów 8 5.2.2. Kompilacja I uruchomienie funkcji quicksort 1> prostefunk:quicksort([1,4,6,8,2]). [1,2,4,6,8] 2> prostefunk:quicksort([1,4,6,a,g,8,2]). [1,2,4,6,8,2,g] {ok,prostefunk} 5.3. Prosty proces wypisujący wiadomość którą otrzymał 5.3.1. Kilka słów o procesach Większość równocześnie działających funkcji w Erlangu tworzy się bardzo prosto za pomocą funkcji: spawn(module,fun,args) spawn(fun() -> loop() end) która zwraca identyfikator procesu, używany do komunikacji z nowo utworzonym procesem. Wyrażenie Pid! Wiad wysyła wiadomość do konkretnego procesu za pomocą identyfikatora procesu - Pid. Wiadomość jest odbierana używając konstrukcji receive... end, która rozpoznaje rodzaj wiadomości otrzymanej za pomocą klazul które zostały zadeklarowane. 5.3.2. Definicja funkcji start() -> spawn(fun() -> loop() end). loop() -> receive {kwadrat, X}-> io:format("~nnapisales ~p wart=~p ~n",[kwadrat,x*x]), loop(); {szescian, X}-> io:format("~nnapisales ~p wart=~p ~n",[szescian,x*x*x]), loop(); Any -> io:format("~ndostalem wiadomosc: ~p~n",[any]), loop() end. Przykład pokazuje funkcję servera który wykonuje akcję(wypisuje komunikat i liczy wartość w zależności od rodzaju przesłanej wiadomości za pomocą omawianej wcześniej techniki dopasowania wzorca. Funkcja start() tworzy nowy proces dla funkcji loop(). Funkcja loop() nasłuchuje kanał(czeka) na wiadomość, w zależności jaki format wiadomości 5.3.3. Uruchomienie procesu i wysłanie wiadomości 1> Pid = prostefunk:start(). <0.240.0> 2> Pid! {kwadrat,10}.

5. Kilka prostych przykładów 9 {kwadrat,10} Napisales kwadrat wart=100 3> Pid! {szescian,5}. {szescian,5} Napisales szescian wart=125 4> Pid!{"nic nie warta wiadomosc"}. {"nic nie warta wiadomosc"} Dostalem wiadomosc: {"nic nie warta wiadomosc"} Uruchamiając funkję start pobieramy Pid(identyfikator tego procesu). Teraz możemy już wysyłać wiadomości do servera za pomocą składni Pid! wiadomość. Jeżeli nasza wiadomosc zawierała: nazwe kwadrat, i wartośc, to server dopasuje ją do pierwszej możliwości(kwadrat), pomnoży naszą wartość i wyśle odpowiedz. 5.4. Gorąca wymiana kodu 5.4.1. Kilka słów o programie Program pokazuje możliwość podmiany kodu programu bez zatrzymywania systemu. Język erlang przechowuje w pamięci dwie wersje kodu danej aplikacji. Wersja która ma aktualniejszą datę, jest uruchamiana. 5.4.2. Kod programu -module(wymianakodu). -export([start/0,server/0,client/2]). start( ) -> Pid = spawn(wymianakodu, server, []), spawn(wymianakodu, client, [0,Pid]). server( ) -> receive Msg -> io:format( przed otrzymano: ~p~n, [Msg]), wymianakodu:server( ) end. client(n, Pid) -> Pid! N, client(n+1, Pid). Za pomocą funkcji start tworzymy proces funkcji server oraz funkcji client która jako argument dostaje Pid procesu servera. Funkcja klient przesyła wiadomość do servera, server wyświetla ją na ekran. 5.4.3. Wyniki uruchomienia programu 1> c(wymianakodu). {ok,wymianakodu} 2> wymianakodu:start(). 3> przed otrzymano: 0

6. Wykaz źródeł 10 4> przed otrzymano: 1 5> przed otrzymano: 2 6> c(wymianakodu). 7> po otrzymano: 3 8> po otrzymano: 4 Kompilujemy program i uruchamiamy za pomocą funkcji start(). Server wyświetla text wiadomości na podstawie starego kodu. Po edycji(zmianie w tekście wyświetlanym przez serwer słowa przed na po i skompilowaniu ponownie kodu maszyna wirtualna erlanga automatycznie przeładuje przy następnym wywołaniu funkcji server nowy kod. 5.5. Większy przykład - program czat Program chat wypisujuje informacje przesłane przez jednego użytkownika każdemu użytkownikowi który aktualnie znajduje się w pokoju, także informacja o dołączeniu nowego użytkownika do pokoju jest wysyłana każdemu obecnemu użytkownikowi pokoju. 6. Wykaz źródeł http://erlang.org/ Strona domowa języka Erlang http://erlang.org/doc/pdf/ Pełna Documentacja http://erlang.org/white_paper.html Wprowadzenie do Erlanga z przykładami http://www.erlang.pl/doku.php Główna polska strona języka Erlang