Az F# nyelv erőforrásanalízise Góbi Attila Eötvös Loránd Tudományegyetem Támogatta a KMOP-1.1.2-08/1-2008-0002 és az Európai Regionális Fejlesztési Alap. 2012. Június 19. Góbi Attila (ELTE) Az F# nyelv erőforrásanalízise 2012. Június 19. 1 / 1
Áttekintés Góbi Attila (ELTE) Az F# nyelv erőforrásanalízise 2012. Június 19. 2 / 1
Áttekintés Outline Góbi Attila (ELTE) Az F# nyelv erőforrásanalízise 2012. Június 19. 3 / 1
Áttekintés Áttekintés Absztrakt és egzakt interpretáció Irreleváns költségek ( ) Intervallum kalkulus Mohó, magasabbrendű nyelven Paraméterezhető Monoton költségek mérése Góbi Attila (ELTE) Az F# nyelv erőforrásanalízise 2012. Június 19. 4 / 1
Áttekintés Áttekintés Source code program transformation Core program dependency analysis Function group (component) driver abstract interpretation Mathematical equations equations solver Math. formulas Góbi Attila (ELTE) Az F# nyelv erőforrásanalízise 2012. Június 19. 5 / 1
A Core nyelv Outline Góbi Attila (ELTE) Az F# nyelv erőforrásanalízise 2012. Június 19. 6 / 1
A Core nyelv A Core nyelv Abstract Syntax program ::= decl decl ::= ident ident = expr expr ::= expr expr + literal ident let ident = expr in expr case expr of case + case ::= pattern expr pattern ::= _ ident ident literal Beágyazott minták nincsenek Csak a legutolsó minta lehet _ A mintaillesztésben az azonosító csak adatkonstruktor lehet Góbi Attila (ELTE) Az F# nyelv erőforrásanalízise 2012. Június 19. 7 / 1
A Core nyelv Core nyelv Beépített függvények Egészeken: + int, - int, * int, < int, > int, <= int, >= int, == int, /= int, div, mod Hasonlóan más típusokon Adatkonstruktorok: Nil, Cons, True, False Szintaktikus cukor: Nil ([]) és Cons (:) Góbi Attila (ELTE) Az F# nyelv erőforrásanalízise 2012. Június 19. 8 / 1
Egzakt kalkulus Outline Góbi Attila (ELTE) Az F# nyelv erőforrásanalízise 2012. Június 19. 9 / 1
Egzakt kalkulus Egzakt kalkulus R = [0, ] alaphalmazon e az egzakt költség κ 0, κ 1, κ 2,..., π, η, α 1, α 2, ζ 1, ζ 2,... [0, [ Irreleváns költség: Góbi Attila (ELTE) Az F# nyelv erőforrásanalízise 2012. Június 19. 10 / 1
Egzakt kalkulus Szabályok e =0 e[v:= e 1 ] = e[v:= e 2 ] if e 1 e 2 e[v:=f] = f + e[v:= f] ha f zárt, és v nem case kifejezésben van Examples 42 =0 1 + (1+1) = 1 + 2 1 + (2+3) = 2+3 + 1+ (2+3) = 1 + 5 Góbi Attila (ELTE) Az F# nyelv erőforrásanalízise 2012. Június 19. 11 / 1
Egzakt kalkulus Adatkonstruktor telített alkalmazása C e 1... e n = κ n Examples 42 = κ 0 True = κ 0 [ 1] = 1 : [] = Cons 1 [] = κ 2 + κ 0 Góbi Attila (ELTE) Az F# nyelv erőforrásanalízise 2012. Június 19. 12 / 1
Egzakt kalkulus Natív függvény hívása Legyen f függvény, n aritással f e 1... e n = f δ f architektúrafüggő + int = 1, == int = 1, * int = 4, mod int = 16 Example 1 + 2 = δ 1 + 2 + 3 = 2δ 3 * 15 = 4δ Góbi Attila (ELTE) Az F# nyelv erőforrásanalízise 2012. Június 19. 13 / 1
Egzakt kalkulus Case kifejezések Adatkonstruktor case (C f 1... f m ) of p 1 e 1... p n e n = π + e i [v 1 := f 1,..., v m := f m ] ha p i = C f 1... f m az első illeszkedős Wildchar case e of p 1 e 1... p n e n = π + e n ha p n = _ az első illeszkedés Example case [] of [] True; _ False = π + True = π + κ 0 Góbi Attila (ELTE) Az F# nyelv erőforrásanalízise 2012. Június 19. 14 / 1
Egzakt kalkulus Let kifejezések let v = e in e = e [v:= e] Example let x = 1 + 1 in x + x = 1 + 1 + let x = (1 + 1) in x + x = 1 + 1 + (1+1) + (1+1) = 1 + 1 + 2 + 2 Góbi Attila (ELTE) Az F# nyelv erőforrásanalízise 2012. Június 19. 15 / 1
Egzakt kalkulus Telített függvényalkalmazások f e 1... e n = α n + e[v 1 := e 1,..., v n := e n ] Example double (1 + 1) = 1 + 1 + α 1 + (1+1) + (1+1) = 2κ 0 + δ + α 1 + δ double x = x + x Góbi Attila (ELTE) Az F# nyelv erőforrásanalízise 2012. Június 19. 16 / 1
Egzakt kalkulus Részleges alkalmazások n argumentumból closure készítésének költsége: ζ n Example (f 1) 2 = ζ 1 + α 1, if f has arity 2 (f 1) 2 = 2ζ 1, if f has arity 3 f 1 2 = ζ 2, if f has arity 3 Góbi Attila (ELTE) Az F# nyelv erőforrásanalízise 2012. Június 19. 17 / 1
Kiterjesztett kifejezések Outline Góbi Attila (ELTE) Az F# nyelv erőforrásanalízise 2012. Június 19. 18 / 1
Kiterjesztett kifejezések Tetszőleges kifejezés _ τ τ típusú tetszőleges kifejezés e = Az e kiterjesztett kifejezéshez tartozó kifejezések halmaza Szemantika e = {e} ha e konstruktor, változó vagy függvényszimbólum _ τ = { e e az összes τ típusú kifejezés} e = { e e e } case e of p 1 f 1;... ; p n f n = {case e of p 1 f 1 ;... ; p n f n e e, f 1 f 1,..., f n f n } let v = e 1 in e 2 = {let v = e 1 in e 2 e 1 e 1, e 2 e 2 } e 1... e n = {e 1... e n e 1 e 1,..., e n e n } Góbi Attila (ELTE) Az F# nyelv erőforrásanalízise 2012. Június 19. 19 / 1
Kiterjesztett kifejezések Tetszőleges lista List τ n : τ típusú elemekből álló n hosszúságú lista Szemantika List τ 0 = { []} List τ n+1 = (_ τ : List τ n ) Góbi Attila (ELTE) Az F# nyelv erőforrásanalízise 2012. Június 19. 20 / 1
Költségbecslés Outline Góbi Attila (ELTE) Az F# nyelv erőforrásanalízise 2012. Június 19. 21 / 1
Költségbecslés Intervallum aritmetika Nyelvtan kiterjesztését már bemutattuk Most a költség kalkulus kiterjesztése következik Intervallum aritmetika (a, b) = zárt intervallum a és b végpontokkal, ahol a, b R (a, b) + (c, d) = (a+c, b+d) n(a, b) = (na, nb) (a, b) (c, d) = (min a c, max b d) a R beágyazható, mint (a, a) (a, b) (c, d) a c b d Góbi Attila (ELTE) Az F# nyelv erőforrásanalízise 2012. Június 19. 22 / 1
Költségbecslés A költségbecslés szematikája Kiterjesztett kifejezések e = (a, b) e e : a e b és (a, b) a legszűkebb ilyen Nyílt kifejezések e = e[v 1 := _ τ1 ] ahol v 1 az e kifejezés τ 1 típusú szabad változója Góbi Attila (ELTE) Az F# nyelv erőforrásanalízise 2012. Június 19. 23 / 1
Költségbecslés A költségbecslés szematikája e[v:= e 1 ] = e[v:= e 2 ] if e 1 e 2 case _ of p 1 e 1 ;... ; p n e n = e 1... e n case List 0 of [] e 1 ; v 1 :v 2 e 2 = π + e 1 case List n+1 of [] e 1 ; v 1 :v 2 e 2 = π + e 2 [v 1 := _, v 2 := List n ]... Góbi Attila (ELTE) Az F# nyelv erőforrásanalízise 2012. Június 19. 24 / 1
Resource analysis Góbi Attila (ELTE) Az F# nyelv erőforrásanalízise 2012. Június 19. 25 / 1