31
Erlang 1) Er[icsson] lang[uage] 2) [A.K.] Erlang Helmer Aaviksoo Karli Kirsimäe

Erlang 1) Er [icsson] lang [uage] 2) [A.K.] Erlang

  • Upload
    keena

  • View
    63

  • Download
    9

Embed Size (px)

DESCRIPTION

Erlang 1) Er [icsson] lang [uage] 2) [A.K.] Erlang. Helmer Aaviksoo Karli Kirsimäe. Üldine. Loodud 1987 Avatud lähtekood aastast 1998 Versioon 11 Arendajaks Ericsson Litsents: MPL. Üldine [2]. Loodi toetamaks hajusaid, veakindlaid, mitte-rangeid reaalajalisi süsteeme - PowerPoint PPT Presentation

Citation preview

Page 1: Erlang 1)  Er [icsson]  lang [uage] 2) [A.K.]  Erlang

Erlang1) Er[icsson] lang[uage]2) [A.K.] Erlang

Helmer Aaviksoo

Karli Kirsimäe

Page 2: Erlang 1)  Er [icsson]  lang [uage] 2) [A.K.]  Erlang

Üldine

Loodud 1987 Avatud lähtekood aastast 1998 Versioon 11 Arendajaks Ericsson Litsents: MPL

Page 3: Erlang 1)  Er [icsson]  lang [uage] 2) [A.K.]  Erlang

Üldine [2]

Loodi toetamaks hajusaid, veakindlaid, mitte-rangeid reaalajalisi süsteeme

Ericsson kasutab Erlangi enda telekommunikatsiooni toodetele tarkvara loomiseks

Erlangi õpetatakse üle 80-s ülikoolis üle maailma

Page 4: Erlang 1)  Er [icsson]  lang [uage] 2) [A.K.]  Erlang

Üldine [3]

Funktsionaalne lõimesid toetav keel Dünaamiline ja tugev tüübikontroll Automatiseeritud mäluhaldus Range väärtustamine Ühekordne omistamine Interpreteeritav Kasutab virtuaalmasinat Toetab koodi muutmist töösolevas süsteemis

Page 5: Erlang 1)  Er [icsson]  lang [uage] 2) [A.K.]  Erlang

Üldine [4]

C, C++ & Java liidesed Erinevad disainimallid HTTP server SNMP agent Andmebaasi mootor Eclipse plugin

Page 6: Erlang 1)  Er [icsson]  lang [uage] 2) [A.K.]  Erlang

Ajalugu

1982-1985 Eksperimendid erinevates keeltes 1985-1986 Lisp, Prolog, Parlog – ei toeta

lõimesid või back-trackingut 1987 Erlangi sünd 1988 Erlangi kasutamise algus 1992 Esimesed kaks Erlangi tooteprojekti 1993 Toodete müük. Ericsson alustab

implementatsioonide haldamist ja toe pakkumist

Page 7: Erlang 1)  Er [icsson]  lang [uage] 2) [A.K.]  Erlang

Interpretaator

Deklaratsiooni lõpus “.” Ridade eraldamine “,” Funktsioonide väljakutsumiseks “:” Tõstutundlik (Test != TesT) > (42 + 77) * 66 / 3.

2618.00 > Test = 3.

3

Page 8: Erlang 1)  Er [icsson]  lang [uage] 2) [A.K.]  Erlang

Moodulid

Moodul (summa.erl)-module(summa).

-export([sum/2]).

% arvutab argumentide summa

sum(X, Y) -> X + Y.

> c(summa). {ok, summa}

> summa:sum(5,4). 9

Page 9: Erlang 1)  Er [icsson]  lang [uage] 2) [A.K.]  Erlang

Muutujad

Algab suure algustähega .. või alakriipsuga A..Z a..z 0..9 _ @ Näited

Nimi _nimi Eesnimi@Perenimi_123 _

Page 10: Erlang 1)  Er [icsson]  lang [uage] 2) [A.K.]  Erlang

Andmetüübid

Täisarvud Piiratud täpsusega ujukomaarvud (5 kohta) Sõned Aatomid Korteezid Kirjed Listid Anonüümsed funktsioonid (fun’id)

Page 11: Erlang 1)  Er [icsson]  lang [uage] 2) [A.K.]  Erlang

Täis- & ujukomaarvud

12 -12 2#01011. % kümnendsüsteemi 11 16#FF. % 16-süsteemi 255 $ . % tühiku ASCII väärtus 1.2 6.023e+23

Page 12: Erlang 1)  Er [icsson]  lang [uage] 2) [A.K.]  Erlang

Aatomid

Väärtuseta andmetüüp, väikese algustähega või ühekordsete ülakomade vahel

Näide (aatom.erl)-module(aatom).-export([convert/2]).convert(M, inch) -> M / 2.54;convert(M, centimeter) -> M * 2.54.

> aatom:convert(3, ‘inch’). 1.18110

> aatom:convert(aatom:convert(3, inch), centimeter). 3.00000

Page 13: Erlang 1)  Er [icsson]  lang [uage] 2) [A.K.]  Erlang

Korteezid

Võimalus andmete grupeerimiseks Ümbritsetud loogeliste sulgudega Sügavus ega laius ei ole piiratud Näide:

> {inch, 3}. {inch, 3}

> {3, {inch, 4}, {3, {1, 2, 3}}}. {3,{inch,4},{3,{1,2,3}}}

Page 14: Erlang 1)  Er [icsson]  lang [uage] 2) [A.K.]  Erlang

Korteezid [2] Näide (korteez.erl)

-module(korteez).-export([convert_length/1]).convert_length({inch, X}) -> {centimeter, X * 2.54};

convert_length({centimeter, X}) -> {inch, X / 2.54}.

> korteez:convert_length({centimeter, 5}). {inch,1.96850}

> element(1, {2, 3}). 2

> setelement(1, {2, 3}, 4). {4, 3}

> erlang:append_element({1, 2}, 3). {1, 2, 3}

Page 15: Erlang 1)  Er [icsson]  lang [uage] 2) [A.K.]  Erlang

Kirjed

Sarnaneb korteezidele, aga elemendid saab kätte aatomi, mitte indeksi järgi

Deklareerimine%moodulis

-record(person, {name = "", phone = [], address})

%emulaatoris

> rd(person, {name = "", phone = [], address}).

Initsialiseerimine> P1 = #person{name=“Mari”, phone=[1,2,3], _ = undefined}.

> P1#person.name

> P2 = P1#person{name=“Jyri”, address=“Tartu”}

Page 16: Erlang 1)  Er [icsson]  lang [uage] 2) [A.K.]  Erlang

Listid

Ümbritsetud kandiliste sulgudega Lihtne viis listi elementide jagamiseks Näited

A = [1, 2, 3, 4, 5]. [B | C] = [1, 2, 3]. % B=1, C=[2, 3] [D, E | F] = [1, 2, 3, 4]. % D=1, E=2, F=[3,4] G = [0 | A]. % G=[0,1,2,3,4,5] H = A ++ B % H=[1,2,3,4,5,1] I = H -- [1,1,2] % I=[3,4,5]

Page 17: Erlang 1)  Er [icsson]  lang [uage] 2) [A.K.]  Erlang

Sõned Täisarvude listid (ASCII koodid) Defineerimine

A = “Hello World.”. B = [72,101,108,108,111,32,119,111,114,108,100,46]. C = [$H, $e, $l, $l, $o, $ , $w, $o, $r, $l, $d, $.].

Page 18: Erlang 1)  Er [icsson]  lang [uage] 2) [A.K.]  Erlang

Sõned [2]

Näited > Test = “testfail.html”.

“testfail.html” > lists:subtract(Test, “xafile”).

“tst.html”. > lists:suffix(".txt", Test).

false > “abc” ++ “cde”.

“abccde”

Page 19: Erlang 1)  Er [icsson]  lang [uage] 2) [A.K.]  Erlang

Fun’id

Anonüümsed funktsioonid Algavad klausliga fun(?), lõpevad end’iga fun ja end vahel on tavaline funktsiooni deklaratsioon Näited

> Fun1 = fun() -> 10 end. > Fun2 = fun (X,Y) when X>Y -> X; (X,Y) -> Y end. > Fun1().

10 > Fun2(Fun2(3,2),4).

4

Page 20: Erlang 1)  Er [icsson]  lang [uage] 2) [A.K.]  Erlang

Fun’id [2]

Funktsioonidele saab fun’e parameetritena anda ja funktsioonid saavad fun’e tagastada.

Näide:-module(funmod).-export([funIn/1, funOut/0]).

funIn(X)-> X(5).funOut() -> fun(X) -> X*3 end.

> funmod:funIn(fun(X) -> X*2 end). 10

> FunOut = funmod:funOut(). > FunOut(5).

15

Page 21: Erlang 1)  Er [icsson]  lang [uage] 2) [A.K.]  Erlang

Operaatorid

+, -, *, /, div, rem and, or, xor, not, orelse, andalso band, bor, bxor, bnot, bsl, bsr ==, /=, =:=, =/=, =<, >=, <, >

Page 22: Erlang 1)  Er [icsson]  lang [uage] 2) [A.K.]  Erlang

Operaatorite prioriteedid

: # Unaarne +-, bnot, not /, *, div, rem, band, and +, -, bor, bxor, bsl, bsr, or, xor ++, -- ==, /=, =<, >=, >, <, =:=, =/= andalso orelse = catch

Page 23: Erlang 1)  Er [icsson]  lang [uage] 2) [A.K.]  Erlang

Tingimusdirektiivid

Ifif

X >= Y, X > 0 -> X;

Y < X, Y > 0 -> Y;

true -> X+Y

end

Casecase X of

1 when Y >= 0 -> true;

2 -> true;

_ -> false

end

Page 24: Erlang 1)  Er [icsson]  lang [uage] 2) [A.K.]  Erlang

Try & catch

Vigade püüdmiseks Kolme tüüpi erindeid

throw – kasutaja defineeritud error – käitusaegsed exit – protsessi lõpetamine

Süntaks:try

file:open(X)catch

error:Reason ->{‘EXIT’, {Reason,erlang:get_stacktrace()}}

after io:format("Done with this function!")

end.

Page 25: Erlang 1)  Er [icsson]  lang [uage] 2) [A.K.]  Erlang

Rekursioon

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

fact(X) when X < 0 ->io:format("Finding factorial error - negative number: ~w~n", [X]);

fact(0) -> 1;fact(1) -> 1;fact(X) -> X*fact(X-1).

Näide > faktoriaal:fact(-5).

Finding factorial error - negative number: -5

Page 26: Erlang 1)  Er [icsson]  lang [uage] 2) [A.K.]  Erlang

Lõimed

PID Sõnumid Aegumine Registreeritud protsessid Klient/server mudel

Page 27: Erlang 1)  Er [icsson]  lang [uage] 2) [A.K.]  Erlang

Lõimed [2]

spawn(moodul, funktsioon, argumendid) Tekitab uue protsessi, tagastab identifikaatori

self() Tagastab protsessi ID

PID ! Message Saadab protsessile PID sõnumi Message

receive ... end. sleep(ms), suspend(), alarm(ms, Action)

Page 28: Erlang 1)  Er [icsson]  lang [uage] 2) [A.K.]  Erlang

Lõimed [3]

-module(pingpong).-export([start/1, ping/2, pong/0]).

ping(0, Pong_PID) -> Pong_PID ! finished, io:format("Ping finished~n", []);

ping(N, Pong_PID) -> timer:sleep(1000), Pong_PID ! {ping, self()}, receive pong -> io:format("Ping received

pong~n", []) end, ping(N - 1, Pong_PID).

pong() -> receive finished -> io:format("Pong

finished~n", []); {ping, Ping_PID} -> io:format("Pong received

ping~n", []), timer:sleep(1000), Ping_PID ! pong, pong() end.

start(X) -> Pong_PID = spawn(pingpong, pong,

[]), spawn(pingpong, ping, [X,

Pong_PID]).

Page 29: Erlang 1)  Er [icsson]  lang [uage] 2) [A.K.]  Erlang

Viited

Erlang http://www.erlang.org

Erlang programming language @ TechTarget http://whatis.techtarget.com/definition/0,,sid9_gci212072,00.html

Concurrency in Erlang http://pragdave.pragprog.com/pragdave/2007/04/adding_concurre.html

An Introduction to Erlang http

://www.it.uu.se/edu/course/homepage/projektDV/ht06/07-erlang-intro.pdf

Page 30: Erlang 1)  Er [icsson]  lang [uage] 2) [A.K.]  Erlang

Küsimused?

Page 31: Erlang 1)  Er [icsson]  lang [uage] 2) [A.K.]  Erlang

Täname kuulamast!