De presentatie wordt gedownload. Even geduld aub

De presentatie wordt gedownload. Even geduld aub

Deel I: Functionele Programmeertalen Hoofdstuk 5: Implementatie- technieken.

Verwante presentaties


Presentatie over: "Deel I: Functionele Programmeertalen Hoofdstuk 5: Implementatie- technieken."— Transcript van de presentatie:

1 Deel I: Functionele Programmeertalen Hoofdstuk 5: Implementatie- technieken

2 Voorstelling abstract concreet Constante N25 Operator B+ + Veranderlijke Vv v Applicatie @ @ f x Abstractie v M f x v M Constructor : x y :

3 Syntaxisboom @ @ 5 @ + 5 x @ @ x *x ( x.x*x)(5+5)

4 Ingeblikte voorstelling

5 Oningeblikte voorstelling

6 Lazy uitvoering qTwee voorwaarden 4Argumenten van functies worden slechts geëvalueerd op het ogenblik dat men de waarde werkelijk nodig heeft (soms ook call by need genoemd) 4Argumenten van functies mogen ten hoogste eenmaal geëvalueerd worden

7 Lazy uitvoering qStrikte talen: ML en Hope qLazy talen: SASL, KRC, LML, Miranda, Orwell, Ponder, Haskell en Hugs

8 Zwakke hoofdnormaalvorm is, met F een veranderlijke, een gegevensobject, een ingebouwde functie, ofwel een -abstractie en zodanig dat FE 1 … E m geen  -redex is voor m  n Een -expressie is in zwakke hoofdnormaalvorm als en slechts als ze van de vorm

9 Zwakke hoofdnormaalvorm qGegevensobject: constante of constructor qGevolg: ZHN  : geen kopredices  Voorbeelden: v, 19,  3, y. x  3

10 Overzicht -expressie reductie van kopredices normale reductieorde zwakke hoofdnormaalvorm normaalvorm

11 Voorbeeld

12 Voorbeeld: normale reductievolgorde

13 Voorbeeld: reductie van kopredices

14 Kopredices @ MnMn @ MM1M1 @ M2M2 @ M3M3

15 Vier gevallen  M is een gegevensobject (constante, CONS-cel, enz) n  0: ZHN n  0: fatale fout  M is een ingebouwde functie met k argumenten k  n : ZHN k  n : kopredex  MM 1 … M k

16 Vier gevallen  M is een -abstractie n  0: kopredex  MM 1 n  0: ZHN  M is een veranderlijke n  0: ZHN n  0: fatale fout

17 Ruggengraadstapel

18 Kopredices @ MnMn @ MM1M1 @ M2M2 @ M3M3...

19 Reductie qArgumenten niet substitueren, maar verwijzingen gebruiken qApplicatieknopen worden vervangen door hun waarde

20 Graafreductie @ @ 5 @ + 5 x @ @ x *x ( x.x*x)(5+5)

21 Graafreductie @ @ 5 @ + 5 x @ @ x *x (5+5)*(5+5) @ *

22 Graafreductie @ 10 5 @ + 5 x @ @ x *x 10*10 @ *

23 Graafreductie 100 10 5 @ + 5 x @ @ x *x @ *

24 Het overschrijven van de redex

25 @ x ( x.x)(fa) x @ fa @ fa @ @ fa 

26 De SECD-machine qS: de evaluatiestapel, gebruikt om de tijdelijke resultaten van het evaluatieproces bij te houden qE: de omgeving die de waarden van de veranderlijken bijhoudt qC: controlestapel met de continuaties qD: de dump die gebruikt wordt om gegevens te bewaren tijdens de oproep van een andere functie De virtuele machine met vier stapels,

27 qeen graaf qG-programma qexpressiestapel qeen controlestapel De G-machine Vier gegevensstructuren

28 Voorbeeld PUSH 1 ; dupliceer f MKAP ; maak f x PUSH 1 ; dupliceer f MKAP ; maak f (f x) SLIDE 1 ; gooi argument f weg

29 Voorbeeld f x f fx f f(fx)

30 68030 Code move.l (4,a6),-(a6) ; dupliceer f move.l (4,a6),-(a5) ; x move.l (a6)+,-(a5) ; f move.l AP,-(a5) ; typekenteken move.l a5,(a6) ; overschrijf "x" move.l (4,a6),-(a6) ; dupliceer f move.l (4,a6),-(a5) ; f x move.l (a6)+,-(a5) ; f move.l AP,-(a5) ; typekenteken move.l a5,(a6) ; overschrijf "f x" move.l (a6)+,(a6) ; overschrijf "f"

31 Voorbeeld

32 Optimale code move.l (a6)+,-(a5) ; x, en gooi "x" weg move.l (a6),-(a5) ; f move.l AP,-(a5) ; typekenteken move.l a5,-(a5) ; f x move.l (a6),-(a5) ; f move.l AP,-(a5) ; typekenteken move.l a5,(a6) ; overschrijf "f” ; met "f (f x)"

33 Compilatieschema GLOBSTART naam, n... UPDATE n+1 POP n UNWIND

34 Stapelorganisatie

35 Compilatie  Getallen PUSHINT getal  Combinatoren en ingebouwde functies PUSHGLOBAL naam  Veranderlijken PUSH verschuiving  Applicaties MN (Applicatieknoop) Code voor N Code voor M MKAP

36 Voorbeeld GLOBSTART kwadraat, 1 PUSH 0 ; push x PUSH 1 ; push x PUSHGLOBAL * ; push * MKAP ; maak * x MKAP ; maak (* x) x UPDATE 2 ; overschrijf redex POP 1 ; gooi "x" weg UNWIND ; zoek volgende redex

37 Voorbeeld GLOBSTART prog, 0 PUSHINT 5 PUSHGLOBAL + MKAP ; + 5 MKAP ; (+ 5) 5 PUSHGLOBAL kwadraat MKAP ; kwadraat ((+ 5) 5) UPDATE 1 ; overschrijf redex UNWIND ; zoek volgende redex

38 Voorbeeld BEGIN ; initialiseer PUSHGLOBAL prog ; vast beginpunt EVAL ; start de uitvoering PRINT ; print resultaat ; van stapel END ; einde van het programma

39 Code: detail GLOBSTART kwadraat, 1 PUSH 0 ; push x PUSH 1 ; push x PUSHGLOBAL * ; push * MKAP ; maak * x MKAP ; maak * x x UPDATE 2 ; overschrijf redex POP 1 ; gooi "x" weg UNWIND ; zoek volgende redex

40 Code: detail GLOBSTART *, 2 PUSH 1 ; push y EVAL ; reduceer naar ZHNV PUSH 1 ; push x EVAL ; reduceer naar ZHNV MULTIPLY ; voer de vermenig- ; vuldiging uit UPDATE 3 ; overschrijf redex POP 2 ; gooi de argumenten weg RETURN ; zoek volgende redex

41 Uitvoering van EVAL

42 Optimalisatie 1: combinatorsubstitutie GLOBSTART kwadraat, 1 PUSH 0 ; push x EVAL PUSH 1 ; push x EVAL MULTIPLY ; voer de vermenig- ; vuldiging uit UPDATE 2 ; overschrijf redex POP 1 ; gooi "x" weg UNWIND ; zoek volgende redex

43 Optimalisatie 2: resultaatrecuperatie GLOBSTART kwadraat, 1 PUSH 0 ; push x EVAL PUSH 0 ; push de waarde van x MULTIPLY ; voer de vermenig- ; vuldiging uit UPDATE 2 ; overschrijf redex POP 1 ; gooi "x" weg RETURN ; herstel dump

44 Optimalisatie 3: geheugenrecuperatie GLOBSTART kwadraat, 1 EVAL PUSH 0 ; push de waarde van x MULTIPLY ; voer de vermenig- ; vuldiging uit UPDATE 1 ; overschrijf redex RETURN ; herstel dump

45 Optimalisatie 4: combinatorsubstitutie GLOBSTART prog, 0 PUSHINT 5 ADD PUSHGLOBAL kwadraat MKAP ; kwadraat (+ 5 5) UPDATE 1 ; overschrijf redex UNWIND ; zoek volgende redex

46 Optimalisatie 5: constante expressies GLOBSTART prog, 0 PUSHINT 10 PUSHGLOBAL kwadraat MKAP ; kwadraat 10 UPDATE 1 ; overschrijf redex UNWIND ; zoek volgende redex

47 Optimalisatie 6: striktheid GLOBSTART kwadraat, 1 PUSH 0 ; push de waarde van x MULTIPLY ; voer de vermenig- ; vuldiging uit UPDATE 1 ; overschrijf redex RETURN ; herstel dump GLOBSTART prog, 0 PUSHINT 10 PUSHGLOBAL kwadraat MKAP ; kwadraat 10 UPDATE 1 ; overschrijf redex UNWIND ; zoek volgende redex

48 Staartrecursie GLOBSTART F,2..code voor E3..code voor E2..code voor E1 PUSHGLOBAL W MKAP UPDATE 3 POP 2 UNWIND

49 Staartrecursie: stapelbeeld

50 Voorbeeld GLOBSTART FAC,2 PUSH 0 ; n EVAL ; waarde van n PUSHINT 0 ; nul EQUAL ; gelijk ? JTRUE POSITIEF ; indien n>0 PUSH 1 ; a EVAL ; evalueer UPDATE 3 ; overschrijf redex van fac POP 2 ; argumenten van fac weg RETURN ; reeds in ZHN vorm dank ; zij eval

51 LABEL POSITIEF PUSH 1 ; a PUSH 1 ; n MULTIPLY ; n*a PUSH 1 ; n PUSHINT 1 ; 1 MINUS ; n-1 PUSHGLOBAL FAC ; fac (n-1) (n*a) SQUEEZE 3 2 ; overschrijf originele ; argumenten DISPATCH 2 ; staartrecursie Voorbeeld

52 Prestatienadelen van lazyness De uitdrukking zal herleid worden tot telop 1 (telop 2 (telop 3 [0])) [1 + 2 + 3 + 0]

53 Oplossing: accumulator + striktheid


Download ppt "Deel I: Functionele Programmeertalen Hoofdstuk 5: Implementatie- technieken."

Verwante presentaties


Ads door Google