230 likes | 370 Views
CSE-321 Programming Languages (So Many Topics). 박성우. POSTECH May 29, 2006. Outline for Today's Lecture. Existential types Dependent types Call-by-name and call-by-need CPS (Continuation-passing style) transformation Constructive logic Curry-Howard isomorphism
E N D
CSE-321 Programming Languages(So Many Topics) 박성우 POSTECH May 29, 2006
Outline for Today's Lecture • Existential types • Dependent types • Call-by-name and call-by-need • CPS (Continuation-passing style) transformation • Constructive logic • Curry-Howard isomorphism • Module system of Standard ML • -calculus • LF type theory • Twelf for mechanizing proofs
List Reversal in TML datatype list = Nil | Cons of (int * list); valrec append = fn Nil => (fn x => Cons (x, Nil)) | Cons (h, t) => (fn x => Cons (h, append t x)); valrec reverse = fn Nil => Nil | Cons (h, t) => append (reverse t) h; val l = Cons (1, Cons (2, Cons (3, Cons (4, Nil)))); val id = fn x => x; id reverse l
Data Constructors in TML datatype list = Nil | Consof (int * list); valrec append = fn Nil => (fn x => Cons (x, Nil)) | Cons (h, t) => (fn x => Cons (h, append t x)); valrec reverse = fn Nil => Nil | Cons (h, t) => append (reverse t) h; val l = Cons (1, Cons (2, Cons (3, Cons (4, Nil)))); val id = fn x => x; id reverse l
Patterns in TML datatype list = Nil | Consof (int * list); valrec append = fnNil => (fn x => Cons (x, Nil)) | Cons (h, t) => (fn x => Cons (h, append t x)); valrec reverse = fnNil => Nil | Cons (h, t) => append (reverse t) h; val l = Cons (1, Cons (2, Cons (3, Cons (4, Nil)))); val id = fn x => x; id reverse l
More Patterns in TML datatype list = Nil | Consof (int * list); valrecappend = fnNil => (fnx => Cons (x, Nil)) | Cons (h, t) => (fnx => Cons (h, append t x)); valrecreverse = fnNil => Nil | Cons (h, t) => append (reverse t) h; vall = Cons (1, Cons (2, Cons (3, Cons (4, Nil)))); valid = fnx => x; id reverse l
Patterns val_ = 1; val true = true; val Cons (h, t) = Cons (1, Nil); val (x, y) = (1, ~1); val (x) = 1; val (x : int) = 1;
Match Rule : pat => exp datatype list = Nil | Cons of (int * list); valrec append = fnNil => (fn x => Cons (x, Nil)) | Cons (h, t) => (fn x => Cons (h, append t x)); valrec reverse = fnNil => Nil | Cons (h, t) => append (reverse t) h; val l = Cons (1, Cons (2, Cons (3, Cons (4, Nil)))); val id = fnx => x; id reverse l
Outline • Patterns in TML V • Syntax of TML • Typing and translation
Syntax for TML • scontype ::= int | bool | unit • sconpat ::= num | true | false | () • scon ::= num | true | false | () • op ::= + | - | * | = | <> • ty ::= scontype | tycon | (ty * ty) | (ty -> ty) | (ty) • pat ::= _ | sconpat | vid <pat> | (pat,pat) | (pat) | (pat:ty) • num ::= <integer constants> • tycon ::= <alphanumeric identifiers> • vid ::= <alphanumeric identifiers> • conbinding ::= vid <ofty> • conbind ::= conbinding <| conbind> • dec ::= valpat = exp | val rec pat = exp | datatypetycon = conbind • mrule ::= pat=>exp • match ::= mrule <|match> • exp ::= scon | vid | (exp,exp) | letdecinexpend | (exp) | expexp | expopexp | (exp : ty) | fn match • dlist ::= <dec;>* • program ::= dlistexp
Types • scontype ::= int | bool | unit • tycon ::= <alphanumeric identifiers> • ty ::= scontype | tycon | (ty * ty) | (ty -> ty) | (ty)
Patterns • sconpat ::= num | true | false | () • vid ::= <alphanumeric identifiers> • pat ::= _ | sconpat | vid <pat> | (pat, pat) | (pat) | (pat:ty)
Declarations • vid ::= <alphanumeric identifiers> • conbinding ::= vid <ofty> • conbind ::= conbinding <| conbind> • dec ::= valpat = exp | val rec pat = exp | datatypetycon = conbind
Expressions and Programs • scon ::= num | true | false | () • op ::= + | - | * | = | <> • mrule ::= pat=>exp • match ::= mrule <|match> • exp ::= scon | vid | (exp,exp) | letdecinexpend |(exp) | expexp | expopexp | (exp : ty)| fn match • dlist ::= <dec;>* • program ::= dlistexp
Outline • Patterns in TML V • Syntax of TML V • Typing and translation
Monomorphic Typing • No polymoprhic types, i.e., no type variables • every expression has a unique monomorphic type val id = fn x => x; id 1
Typing and Translation • Ast.program • source program • Core.programty • program with type annotations • Mach.code • machine code • val tprogram : Ast.program -> Core.programty • val programty2code : Core.programty -> Mach.code
50% of Assignment 8 type venv = (avid, loc) dict type env = venv * int val pat2code : Mach.label * Mach.label * loc -> Core.pat -> Mach.code * venv val exp2code : env * Mach.label -> Core.exp -> Mach.code * Mach.rvalue val dec2code : env * Mach.label -> Core.dec -> Mach.code * env val matchty2code : env * Mach.label -> Core.matchty -> Mach.code
The Remaining 49% • Representation for functions • Representation for recursive functions • Context switch • Function arguments and return values ) These questions test your understanding of closures.
The Remaining 1% • Representation for pairs • Representation for data constructors • Registers • Heap • Optimizations • 하면서 보내 버리는 시간 • ...
Don't get scared by Parjong's misleading message on the discussion board. 제 목: 허허허.. ㅠ_ㅠ 교수님 HW8.. 도저히.. -_-aa 그 시간에 끝낼 수 있을 거라는 생각이 안드는데요;; • Everyone of you can finish this assignment!
Assignment 8 • will be the most fun of all the assignments this course offers. • will be the most rewarding experience you can have in this course. • Discuss with your classmates (not just with your partner) • Start early! • Sample solution: about 600 lines of code • You will write 300 ~ 500 lines of code.