Funkcionális és Párhuzamos Programozási technológiák



Hasonló dokumentumok
ERLANG PROGRAMOK TRANSZFORMÁCI CIÓJA ERLANG

2019, Funkcionális programozás. 2. el adás. MÁRTON Gyöngyvér

KLIENS-SZERVER ALAPÚ ERLANG PROGRAMOK TRANSZFORMÁCIÓJA ERLANG OTP SÉMÁRA

Szkriptnyelvek. 1. UNIX shell

S z á m í t ó g é p e s a l a p i s m e r e t e k

Imperatív programozás

2016, Funkcionális programozás

S z á m í t ó g é p e s a l a p i s m e r e t e k

Operációs Rendszerek II. labor. 2. alkalom

Programok értelmezése

UNIX folyamatok kommunikációja

Funkcionális nyelvek Király, Roland

Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe

Operációs rendszerek. UNIX fájlrendszer

Oktatási segédlet 2014

Szoftvertechnológia alapjai Java előadások

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Funkcionális és logikai programozás. { Márton Gyöngyvér, 2012} { Sapientia, Erdélyi Magyar Tudományegyetem }

Alapok. tisztán funkcionális nyelv, minden függvény (a konstansok is) nincsenek hagyományos változók, az első értékadás után nem módosíthatók

Riak. Pronounced REE-ahk. Elosztott adattároló eszköz. Molnár Péter

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

Feldspar: Nyelv digitális jelfeldolgozáshoz

Cekla. Készítette Doxygen Tue Sep :13:44

Python tanfolyam Python bevezető I. rész

SQLServer. SQLServer konfigurációk

2018, Funkcionális programozás

Programozás II. 2. Dr. Iványi Péter

2019, Funkcionális programozás. 4. el adás. MÁRTON Gyöngyvér

A C programozási nyelv I. Bevezetés

Collections. Összetett adatstruktúrák

Webes alkalmazások fejlesztése 8. előadás. Webszolgáltatások megvalósítása (ASP.NET WebAPI)

9. MPI

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

Rétegezett architektúra HTTP. A hálózatfejlesztés motorját a hálózati alkalmazások képezik. TCP/IP protokoll készlet

Programozás alapjai. 5. előadás

Mintavételes szabályozás mikrovezérlő segítségével

Flash és PHP kommunikáció. Web Konferencia 2007 Ferencz Tamás Jasmin Media Group Kft

Az F# nyelv erőforrásanalízise

A C programozási nyelv I. Bevezetés

Kommunikáció. Távoli eljáráshívás. RPC kommunikáció menete DCE RPC (1) RPC - paraméterátadás. 3. előadás Protokollok. 2. rész

Informatika terméktervezőknek

C programozási nyelv

PHP alapjai, bevezetés. Vincze Dávid Miskolci Egyetem, IIT

SZERVER OLDALI JAVASCRIPT. 3. hét Javascript nyelvi elemek

FUNKCIONÁLIS PROGRAMOZÁS ELŐADÁS JEGYZET

Egészítsük ki a Drupal-t. Drupal modul fejlesztés

Számítógépes Hálózatok GY 4.hét

Bevezetés a párhuzamos programozási koncepciókba

Biztonságos mobilalkalmazás-fejlesztés a gyakorlatban. A CryptTalk fejlesztése során alkalmazott módszerek. Dr. Barabás Péter Arenim Technologies

CREATE TABLE student ( id int NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar(100) NOT NULL, address varchar(100) NOT NULL )

Adatbázis-kezelés ODBC driverrel

Socket programozás Példák

BASH script programozás II. Vezérlési szerkezetek

Occam 1. Készítette: Szabó Éva

FUNKCIONÁLIS PROGRAMOZÁS GYAKORLAT JEGYZET

Web-technológia PHP-vel

AWK programozás, minták, vezérlési szerkezetek

Osztályok. construct () destruct() $b=new Book(); $b=null; unset ($b); book.php: <?php class Book { private $isbn; public $title;

Ismerkedés a Python programnyelvvel. és annak micropython változatával

Magic xpi 4.0 vadonatúj Architektúrája Gigaspaces alapokon

2019, Funkcionális programozás. 5. el adás. MÁRTON Gyöngyvér

Programozási nyelvek (ADA)

1. Gyakorlat: Telepítés: Windows Server 2008 R2 Enterprise, Core, Windows 7

Apple Swift kurzus 3. gyakorlat

file./script.sh > Bourne-Again shell script text executable << tartalmat néz >>

Hálózati architektúrák és Protokollok GI Kocsis Gergely

Smalltalk 2. Készítette: Szabó Éva

Máté: Assembly programozás

Imperatív programozás

Eseményvezérelt alkalmazások fejlesztése II 12. előadás. Objektumrelációs adatkezelés (ADO.NET) Giachetta Roberto

2018, Funkcionális programozás

3. Gyakorlat Ismerkedés a Java nyelvvel

WEBFEJLESZTÉS 2. ADATBÁZIS-KEZELÉS, OSZTÁLYOK

Programozás C és C++ -ban

A Python programozási nyelv

2018, Funkcionális programozás

Programozási nyelvek JAVA EA+GY 1. gyakolat

chmod umask chown, chgrp

7. Laboratóriumi gyakorlat: Vezérlési szerkezetek II.

Komputeralgebra Rendszerek

PHP II. WEB technológiák. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) PHP II / 19

Számítógépes Hálózatok. 4. gyakorlat

SQLServer. Probléma megoldás

MDAC - Microsoft Data Access Components

C# gyorstalpaló. Készítette: Major Péter

A függvény kód szekvenciáját kapcsos zárójelek közt definiáljuk, a { } -ek közti részt a Bash héj kód blokknak (code block) nevezi.

3D-s technológiák a játékfejlesztésben UDK bevezetés

LabVIEW Academy. 6. óra state machine

Memóriagazdálkodás. Kódgenerálás. Kódoptimalizálás

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java

S04-2 Elosztott alkalmazások készítése

Stateless Session Bean

Tematika. MongoDB koncepció JSON Schemaless logika Replicaset képzés Sharding Aggregate framework

Kivételek kezelése (exception handling) Hibakezelés old style. Kivételkezelés

Bevezetés a programozásba Előadás: A const

Bánsághi Anna

Weblog elemzés Hadoopon 1/39

SQL*Plus. Felhasználók: SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) "közönséges" felhasználók

Számítógépes Hálózatok. 3. gyakorlat

Web-fejlesztés NGM_IN002_1

Átírás:

Funkcionális és Párhuzamos Programozási technológiák 2011/2012 tavaszi félév

Funkcionális programok Típus-, osztály- és függvénydeklaráció Kezdeti kifejezés Végrehajtás Matematikai modell Lambda kalkulus Turing teljes

Jellemzők Hivatkozási helyfüggetlenség (Szigorú/statikus típusosság) Magasabbrendű függvények (Curry módszer részleges függvényalkalmazás) Függvény alkalmazás önmagukra (Lusta)/mohó kiértékelés Zermelo-Frankel halmazkifejezések Argumentumok mintaillesztés (Margószabály) IO modell

Történet 1982-1987 útkeresés 1988-1990 tapasztalat, prototípus telekommunikációs szoftverek 1993 elosztott programozás / Első könyv (The BOOK) 1996 OTP R1 1998 nyilvános 2005 R11 multicore

Erlang Tulajdonságok Deklaratív Funkcionális, magas absztrakció, olvasható Dinamikusan típusos Beépített párhuzamosság átlátszó, explicit párh., LWP Valós-idejű alkalmazások Robosztus supervison trees Elosztott átlátszó, explicit, hálózati Integrálhatóság, nyíltság port -ok Portolhatóság Unix, Win.,..., heterogén hálózat SMP támogatás multicore Hot code loading

Erlang Ericsson Language Erlang, Agner Krarup (1878-1929) dán matematikus Erlang formula erlang forgalom intenzitása

Mikor? Komplex, leállási idő nélküli, skálázható, karbantartható, elosztott Gyors és hatékony fejlesztés Nagy hibatűrő (szoftver, hardver) rendszerek Hot-code loading

Kik? Ericsson telekommunikáció (pl. AXD301 ATM switch), szimuláció, tesztelés, 3G, GPRS Amazon Simple DB adatbázis Yahoo könyvjező Facebook chat server T-Mobile SMS gateway Motorola hívás feldolgozás MochiWeb http szerver CouchDb dokumentum adatbázis szerver (multicore, multiserver clusters) YAWS Yet Another Web Server Wings3D 3D-s modellező

Erlang shell erl (erl -noshell) 1 + 2. "alma". q(). init:stop(). BREAK menu: Ctrl-C / Ctrl-Break User Switch Command: Ctrl-G

Hasznos shell parancsok help() / h() i() memory() c(modname) ls() / ls(dir) b() f() vagy f(x) e(number) vagy e(-1) v() modulenév:függvény(params) m(modname) vagy modulnév:module_info() pwd() / cd(path)

Típusok Termek Numbers (Integer, Float) Binaries/Bitstrings Atoms Tuples Lists (Strings) Unique identifiers: pids, ports, references Funs

Számok Integer 10, 2#10101, 36#PQ3, $w Floats 0.01, 17.2, 11.12E-10 Aritmetika: +, -, *, /, div, rem math -> sqrt N bsl K, N bsr K band, bor, bxor, bnot

Binaries & Bitstrings Binary: byte-ok sorozata Bitsrting: bit-ek sorozata <<>>, << 0,1,2,3>> << "hello", 0, "almafa">>

Atom String constant Atom lower + letter + digit + @ +. + _ An atom %% Boolean true, false ok & undefined Max 255 hosszú, Max 1048576 db.

Tuple Rögzített hosszú rendezett n-es Tuple {...} {alma, korte, {1,2}, "almafa"} {} Tagged tuple: {int, 42}, {pos, 23, 43} element(n Tuple)

List Változó hosszú adatszerkezet List [...], String "..." [], "", [1,23, \{alma, 2\}, [egy, [ketto]]] [1 []], [1 [2]], [1,2,3 [4,5]] [1,2] ++ [3,4,5] [97,98,99,100] == "hello" == [$a, $b, $c, $d]??? [0 v(num)]??? Proper & improper lists

Unique identifiers and Funs Pid < 0.4.2> Port #Port<0.472> Reference #Ref<0.0.0.42> Fun #Fun<...>

Termek Integer 10 (számrendszer, karakter) Floats 17.2, 11.12E-10 Binaries and Bitstrings Atom lower + letter + digit + @ +. + _ %% Boolean true, false Tuple {...} List [...], String "..." Egyedi azonosítók: pid, port, reference Fun

Összehasonlítás number < atom < fun < port < pid < tuple < list < binary < > =< >= /= == =:= =/=

Emacs példa (add-to-list exec-path "/path_to_erlang/bin") (add-to-list load-path "/path_to_erlang/lib/tools-2.6.5/emacs") (require erlang-start)

Modulok.erl kiterjesztés -module(név). formokból állnak.

Függvények ModName:FunName/Arity name(arg11,..., Arg1N) [when Guard1] -> ExprList1; name(arg21,..., Arg2N) [when Guard2] -> ExprList2;... name(argm1,..., ArgMN) [when GuardM]-> ExprListM. Exprlist ::= Expr1, Expr2,... ExprK. modname:funname(par1,..., Parn) funname(par1,..., Parn)

Egyszerű függvények fact(0) -> 1; fact(n) when N>0 -> N * fact(n-1). fib(1) -> 1; fib(2) -> 1; fib(n) when N>2 -> fib(n-1)+fib(n-2).

További elemek Attribútumok module, export, import, include, compile, behaviour, user_defined Makrók Rekordok Header fájlok Comment - %

Fordítás és betöltés c(modname) l(modname) code:get_path() erlc

BIF-s erlang modulban vannak amit nem vagy csak nehezen lehetne megvalósítani a rendszer viselkedését változtatja stb... hd/1, tl/1, length/1, size/1, element/2, setelement/2, list_to_tuple/1,...

Dokumentáció és könyvtári modulok array, lists, dict, string, queue erlang io file, filename random, math Lásd: http://www.erlang.org/doc/man/

Változók Nagy betűvel vagy aláhúzással kezdődik Nem változik Nem kell definiálni Érték szerint paraméterátadás Fűggvény - lokális változó??? Globális???

Pattern Matching Esetszétválasztás Változó érték kötés Adatszerkezetek felbontása X = 2 {A, A, X } = {1, 1, 3} [Head Tail] = [1, 2, 3]

Listák http://www.erlang.org/doc/man/ - - és ++ length/1, tl/1, hd/1 lists: {max/1, sum/1, nth/2, last/1, reverse/1, member/2, delete/2, sort/1, usort/1, zip/2, split/2} proplists litsagenerátorok: [hogyan? honnan?, milyen?] [ elemek generátor1,..., filter1,...] generátor: Var <- List filter: logikai értékű

Listák Gyorsrendezés (QuickSort) quicksort([x X <- List, X =< Y]) ++ [Y] ++ quicksort([x X <- List, X > Y])

Rekurzió direct recursion: sum tail-recursion: sum_acc

Feltételes vezérlés case Expr of Pattern1 [when Guard1] -> ExprList1;... PatternN [when GuardN] -> ExprListN end. if Guard1 -> ExprList1;... GuardK -> ExprListK end. változó láthatóság true és _

Őrfeltételek, és ; kötött változó literál összehasonlítás aritmetikai művelet logikai operátor típus vizsgálat guard built in functions (free of side effects)

Függvény kifejezések fun (Patterns1) [when Guard1] -> ExprList1;... (PatternsN) [when GuardN] -> ExprListN end fun ModName:FunName/Arity

Feladatok Listagenerátor, map, filter, zip, flatten, függvény kifejezés segítségével: egy listában lévő számok osztói (map + fun + listgen) szám és osztói párok (zip) listában lévő számok közöl a primeket (filter + fun)

Dinamikus konstrukciók apply/2 apply(funexpr, [Params]) apply/3 apply(modname, FunName, [Params]) Fun(Params) Mod:Fun(Params)

Futásidejű hibák function_clause case_clause if_clause badmatch badarg undef badarith

Hibakezelés try ExprList of Pattern1 [when Guard1] -> ExprList1;... PatternN [when GuardN] -> ExprListN catch Class1:ExcPattern1 [when ExcGuard1] -> ExcExprList1;... ClassK:ExcPatternK [when ExcGuardK] -> ExcExprListK after... end Classes: error, throw, exit catch Expr

Rekordok -record(name, {field1 [= default1],..., fieldn [= defaultn]}). RecordExpr#name.field RecordExpr#name{..., fieldi = NewValue,...} Mintaillesztés rekordokra rr/1, rd/2, rl/1, rf/1 BIF: record_info/2 (size, fields), is_record/2

Makrók -define(name, Replacement)?Name -define(name(var1,..., VarN), Replacement)?Name(Var1,..., VarN)??Var?MODULE,?MODULE_STRING,?FILE,?LINE -include( valami.hrl )

Hibajavítás és makrók -undef(flag). -ifdef(flag). -ifndef(flag). -else. -endif. c(module, [{d, debug}]), c(module, [{u, debug}])

Lusta lista next(seq)-> fun()-> [Seq next(seq + 1)] end. SeqFun0 = next(0). [Seq1 SeqFun1] = SeqFun0()....

Bitstring and binary << Segment1,..., SegmentN>> Segment: Data, Data:Sizerrr, Data:TypeSpecifier, Data:Size/TypeSpec TypeSpec: {integer, float, binary, bytes, bitstrings, bits,} {utf8, utf16, utf32} {signed, unsigned} {big, little, native} pattern matching: <<Var1:4/bits, Remaining>> << <<X:3>> X <- [1, 2, 3, 4, 5, 6, 7]>> << <<X:8>> <<X:3>> <= <<41, 203, 23:5>> >> [ X <<X:3>> <= <<41, 203, 23:5>> ] [ <<X>> <<X:3>> <= <<41, 203, 23:5>> ]

Input and Output io module get_line("> ") get_chars("> ", 2) read("ok, then»") Erlang term write/1 format(formatstring, [Values])

Formázás c ASCII kód karakterként f float hat decimális pontossággal e float lebegő pontosan hat decimális pontossággal w Erlang term standard szintaxissal p Erlang term pretty print -elve B a számokat 10-es számrendszerben írja ki W és P a beágyazott szerkezetekhez mélységi korlát

File-kezelés file - open, close, read, write, list dirs filename - file nevek kezelése (platformfüggetlen) filelib - kiterjesztés a file modulhoz io - megnyitott fájlok tartalmának kezelése, formázott szöveg illesztése a fájlba {ok, Dev} = file:open(file, [Mode]), file:close(dev) Mode: read, write, append, exclusive, binary, etc.

File-kezelés (folyt.) Erlang termek beolvasása: file:consult("file"). io:read(dev, Promt) io:read(dev, Prompt, StartLine) Sorok beolvasása io:get_line(dev, Prompt) io:fread(filedescr, Prompt, FormatString) ~d, ~u, ~-, ~f, ~#, ~s, ~a, ~c, ~l, whitespaces, ~~ Beolvasása binary-be: file:read_file("file") io:pread(dev, Start, LenB), file:close(dev)

File-kezelés (folyt.) Erlang termek írása: io:format(dev, FormatString, DataList) ~n, ~s, ~p, ~w, whitespaces ~10.2s Byteok írása egy fájlba file:write(dev, Bytes) file:write_file(filename, Bytes) létre is hozza, ha kell file:pwrite(dev, [{Loc, Bytes}]), file:pwrite(dev, Loc, Bytes) Loc: bof, eof, cur

Alapfogalmak Process aktor aki a saját feladatát végrehajta: saját kód, saját térben nem osztanak meg semmit saját állapot üzenetek másolásával kommunikálhatnak

Alapfogalmak Kommunikációs modellek Shared memory + lock Software transactional memory (STM) Futures and Promises Message passing: szinkron, aszinkron

Alapfogalmak Ping-pong run() -> Pid = spawn(fun ping/0), Pid! self(), receive pong -> ok end. ping() -> receive From -> From! pong end.

Processzek spawn/3, spawn_link/3, etc. Pid = spawn(milyenmod, MilyenFv, [MilyenArg]) Pid! Msg Pid! {msg, "Uzenem, hogy itt a veg } processes/1 self/0, pid/3 i/1, flush/0

Alapfogalmak Process link és hibakezelés link/1, spawn_link/3 exit signal ha a terminál a process normal vagy non-normal process flag(trap_exit, true) { EXIT, Pid, Reason} üzenet érkezik unlink/1 exit(reason), exit(pid, Reason) normal, kill, other supervision

Üzenet fogadás receive Pattern1 [when Guard1] -> ExprList1;... PatternN [when GuardN] -> ExprListN end

Regisztrálás register(alias, Pid) register(alma, Pid) alma! {msg, "Uzenem, hogy itt a veg } unregister(alias) registered() whereis(alias) regs()

Timeout receive Pattern1 [when Guard1] -> ExprList1;... PatternN [when GuardN] -> ExprListN after MiliSecond -> ExprListN end infinity

Elosztott Erlang node-ok Indítás: erl -name korte@host -sname korte -setcookie alma node(), nodes() Uzenetküldés: {Name, Node}! {msg, "Uzenem, hogy itt a veg } Kapcsolat: net_adm:ping(node), monitor_node(node, true) ps ax grep -i epmd "Magic Cookie": get_cookie(), set_cookie(node(), "alma") Remote shell: Ctrl-G, r, c

További érdekességek pman:start() alarm, sleep, flush Ring timer:tc(mod, Fun, Args) skeleton start -> initialise -> receive-eval-loop -> (stop) -> terminate Kliens-szerver: chat program és finomításai

Software Upgrade Újrafordítás után a futó alkalmazás kódjának frissítése Tárolt régi változatok, amíg valaki használja Modulminősítővel ellátott hivatkozások code:load_file(module) Code Server code:purge(module) code:soft_purge(module) code:get_path() code:add_path*(path)

Erlang Term Storage ETS %% Az osztott memória egy formája Nagy méretű adatok tárolása és elérése kulcsok alapján Konstans elérési idő Nem KV Database, nincs tranzakciókezelés TableId = ets:new(tablename, [Options]) Options: named_table, set, bag, ordered_set, duplicate_bag, private, protected, public, keypos, Key, (read)write_concurrency ets:delete(tableid) ets:insert(tableid, Key, Value) ets:lookup(tableid, Key) ets:delete(tableid, Key)

Erlang Term Storage ETS ets:first(tableid), ets:next(tableid), $end_of_table ets:match(tableid, Pattern) $1, $0 ets:match_object(tableid, Pattern) ets:delete_object(tableid, Pattern) ets:select(tableid, MatchSpec)

OTP Application & Libraries, pl: Alap (stdlib, kernel, runtime systems) Adatbázis (Mnesia, ODBC) Interfész és kommunikáció (Java/C interface, SSH, SSL, XML parsing, Inets) Különböző alkalmazások (Pman, TV, Debugger, Edoc, Syntax tools, Dialyzer) System design principles

Bevezetés Erlang Nyelvi elemek Konkurens Erlang Erlang GenericOTP Servers behaviours Supervisors NIF Web-servers Adatbáziso OTP behaviours Tervminták formalizálás ( Design Pattern ) Folyamatok hasonló stuktúrával és életciklussal rendelkeznek (start, receive-send, terminate (crash)) Általános és specifikus részek Callback module server generic behaviour module

Bevezetés Erlang Nyelvi elemek Konkurens Erlang Erlang GenericOTP Servers behaviours Supervisors NIF Web-servers Adatbáziso Példa Kliens-szerver Általános Specifikus Szerver spawn Szerver inicializálás LoopData tárolása LoopData Kérés küldés a szervernek Kliensek kérése Válasz küldés a kliensnek Kliensek kérdéseinek kezelése Válasz fogadás a szervertől Szerver válaszainak tartalma Szerver leállítás Végső helyreállítás, megtisztítás

Bevezetés Erlang Nyelvi elemek Konkurens Erlang Erlang GenericOTP Servers behaviours Supervisors NIF Web-servers Adatbáziso OTP behaviours Generic Servers Generic Finite State Machine Generic Event Handler/Manager Supervisors Applications

Bevezetés Erlang Nyelvi elemek Konkurens Erlang Erlang GenericOTP Servers behaviours Supervisors NIF Web-servers Adatbáziso Pro és kontra Mellette Kevesebb megírandó forráskód Kevesebb bug Tesztelt alap Beépített funkcionalitások (log, trace, statistics) Könnyű új funkcionalitást felvenni Közös progmaozási stílus Komponens alapú terminológia Ellene Meg kell ismerni Teljesítménybeli hatás

Bevezetés Erlang Nyelvi elemek Konkurens Erlang Erlang GenericOTP Servers behaviours Supervisors NIF Web-servers Adatbáziso Generic Servers Kliens-szerver gen_server.erl tartalmazza az általános részt call back modult írunk a specifikus rész implementálására -behaviour(gen_server).

Bevezetés Erlang Nyelvi elemek Konkurens Erlang Erlang GenericOTP Servers behaviours Supervisors NIF Web-servers Adatbáziso Starting a Server gen_server:start_link(srvname, CBModName, Args, Opts) gen_server:start(srvname, CBModName, Args, Opts) gen_server:start_link(cbmodname, Args, Opts) gen_server:start(cbmodname, Args, Opts) {local, Name}, {global, Name} CBModName:init(Args) -> ok, LoopData

Bevezetés Erlang Nyelvi elemek Konkurens Erlang Erlang GenericOTP Servers behaviours Supervisors NIF Web-servers Adatbáziso Passing Messages gen_server:call(name, Message) gen_server:call(name, Message, Timeout) gen_server:cast(name, Message) gen_server:cast(name, Message, Timeout) Name, {global, Name} szinkron visszatérési érték Reply aszinkron nincs handle_call/cast??? handle_call(message, From, LoopData) ->... {reply, Reply, NewLoopData}. handle_cast(message, LoopData) ->... {noreply, NewLoopData}.

Bevezetés Erlang Nyelvi elemek Konkurens Erlang Erlang GenericOTP Servers behaviours Supervisors NIF Web-servers Adatbáziso Stopping the Server handle_call(message, From, LoopData) ->... {stop, Reason, Reply, NewLoopData}. handle_cast(message, LoopData) ->... {stop, Reason, NewLoopData}. handle_call/cast hívással Reason: normal (ritkán más egyébb) CBModName:terminate(Reason, LoopData)

Bevezetés Erlang Nyelvi elemek Konkurens Erlang Erlang GenericOTP Servers behaviours Supervisors NIF Web-servers Adatbáziso -behaviour(gen_server) handle_info(msg, LoopData)... code_change/1

Bevezetés Erlang Nyelvi elemek Konkurens Erlang Erlang GenericOTP Servers behaviours Supervisors NIF Web-servers Adatbáziso Supervisors supervisor:start_link(srvname, CBModName, Args) supervisor:start(srvname, CBModName, Args) supervisor:start_link(cbmodname, Args) supervisor:start(cbmodname, Args) CBModName:init(Args) Returns: {ok, {SupSpec, ChildSpecList}} SupSpec: {RestartStrategy, AllowedRestarts, MaxSec} RestartStrategy: one_for_one, one_for_all, rest_for_one

Bevezetés Erlang Nyelvi elemek Konkurens Erlang Erlang GenericOTP Servers behaviours Supervisors NIF Web-servers Adatbáziso Supervisors: ChildSpecList {ok, {SupSpec, ChildSpecList}} ChildSpec: {Id, {Mod, Fun, Args}, Restart, Shutdown, Type, ModList} {Mod, Fun, Args} -> start_link Restart: transient, temporary, permanent Shutdown: millisec, infinity, brutal_kill Type: worker, supervisor check_childspecs/1

Bevezetés Erlang Nyelvi elemek Konkurens Erlang Erlang GenericOTP Servers behaviours Supervisors NIF Web-servers Adatbáziso Supervisors: Dynamic children supervisor:start_child/2 supervisor:terminate_child/2 supervisor:restart_child/2 supervisor:delete_child/2

Bevezetés Erlang Nyelvi elemek Konkurens Erlang Erlang GenericOTP Servers behaviours Supervisors NIF Web-servers Adatbáziso Applications app_name.app application:start(appname) Application Monitor

Bevezetés Erlang Nyelvi elemek Konkurens Erlang Erlang GenericOTP Servers behaviours Supervisors NIF Web-servers Adatbáziso NIF Native Implemented Function Függvények C-ben (C++) implementálva so, dll-re fordítva be kell tölteni az Erlang VM-be gcc -o nif.so -fpic -shared nif.c -I /usr/local/lib/erlang/usr/include/ -on_load(fun/arity) ErlNifFunc: {ErlFunName, Arity, CFunName}

Bevezetés Erlang Nyelvi elemek Konkurens Erlang Erlang GenericOTP Servers behaviours Supervisors NIF Web-servers Adatbáziso Web-servers Inets Lightweight HTTP server built into Erlang Yaws (Yet Another Web Server) HTTP server developed by Claes "Klacke" Wikstrom Mochiweb HTTP server developed by Bob Ippolito/MochiMedia Webmachine HTTP resource server developed by Basho Technologies (runs on Mochiweb under the hood

Bevezetés Erlang Nyelvi elemek Konkurens Erlang Erlang GenericOTP Servers behaviours Supervisors NIF Web-servers Adatbáziso Database support Mnesia Tokio Cabinet, Kyoto Cabinet CauchDB MongoDB Hibari ODBC-vel MySQL

Bevezetés Erlang Nyelvi elemek Konkurens Erlang Erlang GenericOTP Servers behaviours Supervisors NIF Web-servers Adatbáziso Port Kommunikáció a külvilággal Külvilág : egy OS process-ben futó külső program Üzenet fogadás/küldés: standard input/output Byte-orientált kommunikáció open_port(portname, PortSettings) {spawn, Command}, {packet, N} {Pid, command, Data} adatküldés a portnak {Pid, close}, {Pid, {connect, NewPid}} {Port, {data, Data}} üzenet a Porttól {Port, closed}, {Port, connected}, { EXIT, Port, Reason} BIF: port_command/2, port_close/1, port_connect/2, ports/0, port_info/2

Bevezetés Erlang Nyelvi elemek Konkurens Erlang Erlang GenericOTP Servers behaviours Supervisors NIF Web-servers Adatbáziso Kapcsolat más nyelvekkel ErlInterface jinterface (Jungerl) OTP.NET