5. Základní principy
• Funkcionální jazyk - žádná podpora
OOP
• Procesy místo objektů
• Posílání zpráv místo threadů a sdílení
paměti
• Pattern matching místo přiřazování
• Podpora pro distribuované
programování
• Lehce exotická syntaxe
Sunday, February 22, 2009
6. Úvod do syntaxe
• Proměnné začinají velkým písmenem, lze přiřadit
pouze 1x
• Poslední výsledek je výstupem funkce
• Čárka odděluje výrazy a argumenty
• Středník odděluje klauzule (v rámcí jedné funkce)
• Tečka ukončuje funkci
-module(my_math).
-export([factorial/1]).
factorial(1) -> 1;
factorial(N) -> N * factorial(N - 1).
Sunday, February 22, 2009
7. Datové typy
• Integer - libovolná velikost
• Float (64 bit)
• Atom - podobné jako symboly v Ruby
• true, false, ok, error
• Tuple - soubor prvků, pevná velikost
• {1, 2, three, {3, 1}}
• List - soubor prvků, proměnná velikost
• [1,2,3,4,5,[a,b,c]]
Sunday, February 22, 2009
8. Co chybí?
• String - pouze jako list integerů.
• Res = lists:append([quot;Hello, quot;, quot;Erlangquot;, quot;!quot;]).
%%% Hello, Erlang!
• Boolean - lze nahradit použitím atomů
• if
A == true -> ok;
A == false -> not_ok
end.
• Hash - lze použít list tuplů
• Hash = [{key1, value1}, {key2, value2}].
{value,{_,Value}} = lists:keysearch(key1,1,Hash).
Sunday, February 22, 2009
9. Distributed Erlang
• Systém se skládá z nodů
• každý node má své jméno
• procesy beží na nodech, každý má své PID
• předávání správ mezi procesy je transparentní
(nemusíme znát příslušný node)
• spojení mezi nody je automaticky udržované a
tranzitivní (A -> B, B -> C => A -> C)
• komunikace povolena mezi nody se stejným cookie
• každý node má seznam všech ostatních nodes().
Sunday, February 22, 2009
10. Jak to rozjet?
echo quot;TWRKJYJEQZGEBRITIFLSquot; > ~/.erlang.cookie
erl -sname node1
erl -sname node2
erl -sname node3
(node1@localhost)> net_adm:ping(node2@localhost)
(node2@localhost)> net_adm:ping(node3@localhost)
(node3@localhost)> nodes().
[node1@localhost, node2@localhost]
Sunday, February 22, 2009
11. Co s tím? DPMAP!
• Distribuovaný Paralelní MAP
• paralelní výpočet hodnot funkce pro sadu
parametrů probíhající na několika počítačích
současně
• Oproti DRuby automatická správa nodů
• není potřeba vědět nic o IP adresách a portech
• přidávání dalších nodů je triviální
Sunday, February 22, 2009
12. Jak to funguje?
• 80 řádek kódu:
• zjisti seznam nodů, nastartuj na nich worker procesy
• procházej sekvenci parametrů a rozděluj na workery
• toto se děje zasíláním zpráv worker procesům pode PID
• počkej na odpovědi
• ukonči procesy
• vypiš výsledek
Sunday, February 22, 2009