1 / 31

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

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

keena
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Üldine • Loodud 1987 • Avatud lähtekood aastast 1998 • Versioon 11 • Arendajaks Ericsson • Litsents: MPL

  3. Ü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

  4. Ü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

  5. Üldine [4] • C, C++ & Java liidesed • Erinevad disainimallid • HTTP server • SNMP agent • Andmebaasi mootor • Eclipse plugin

  6. 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

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

  8. 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

  9. Muutujad • Algab suure algustähega • .. või alakriipsuga • A..Z a..z 0..9 _ @ • Näited • Nimi • _nimi • Eesnimi@Perenimi_123 • _

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

  11. 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

  12. 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

  13. 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}}}

  14. 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}

  15. 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”}

  16. 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]

  17. 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, $.].

  18. Sõned [2] • Näited • > Test = “testfail.html”. • “testfail.html” • > lists:subtract(Test, “xafile”). • “tst.html”. • > lists:suffix(".txt", Test). • false • > “abc” ++ “cde”. • “abccde”

  19. 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

  20. 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

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

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

  23. Tingimusdirektiivid • If if X >= Y, X > 0 -> X; Y < X, Y > 0 -> Y; true -> X+Y end • Case case X of 1 when Y >= 0 -> true; 2 -> true; _ -> false end

  24. 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.

  25. 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

  26. Lõimed • PID • Sõnumid • Aegumine • Registreeritud protsessid • Klient/server mudel

  27. 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)

  28. Lõimed [3] 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]). -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).

  29. 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

  30. Küsimused?

  31. Täname kuulamast!

More Related