Download de presentatie
De presentatie wordt gedownload. Even geduld aub
GepubliceerdWillem Wauters Laatst gewijzigd meer dan 10 jaar geleden
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
Verwante presentaties
© 2024 SlidePlayer.nl Inc.
All rights reserved.