Cse 321 programming languages so many topics
This presentation is the property of its rightful owner.
Sponsored Links
1 / 23

CSE-321 Programming Languages (So Many Topics) PowerPoint PPT Presentation


  • 88 Views
  • Uploaded on
  • Presentation posted in: General

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

Download Presentation

CSE-321 Programming Languages (So Many Topics)

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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Cse 321 programming languages so many topics

CSE-321 Programming Languages(So Many Topics)

박성우

POSTECH

May 29, 2006


Outline for today s lecture

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

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

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

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

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

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

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

Outline

  • Patterns in TML V

  • Syntax of TML

  • Typing and translation


Syntax for tml

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

Types

  • scontype  ::= int  |  bool  |  unit

  • tycon  ::= <alphanumeric identifiers>

  • ty  ::= scontype  |  tycon  |  (ty * ty)  | (ty -> ty)  |  (ty)


Patterns1

Patterns

  • sconpat  ::= num  |  true  |  false  |  ()

  • vid  ::= <alphanumeric identifiers>

  • pat  ::= _  |  sconpat  |  vid <pat>  |  (pat, pat)  |  (pat)  |  (pat:ty)


Declarations

Declarations

  • vid  ::= <alphanumeric identifiers>

  • conbinding  ::= vid <ofty>

  • conbind  ::= conbinding <| conbind>

  • dec  ::= valpat = exp  |  val rec pat = exp  |  datatypetycon = conbind


Expressions and programs

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


Outline1

Outline

  • Patterns in TML V

  • Syntax of TML V

  • Typing and translation


Monomorphic typing

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

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

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

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

The Remaining 1%

  • Representation for pairs

  • Representation for data constructors

  • Registers

  • Heap

  • Optimizations

  • 하면서 보내 버리는 시간

  • ...


Advice on assignment 8

Advice on Assignment 8


Cse 321 programming languages so many topics

  • Don't get scared by Parjong's misleading message on the discussion board.

    제 목: 허허허.. ㅠ_ㅠ

    교수님 HW8.. 도저히.. -_-aa 그 시간에 끝낼 수 있을 거라는 생각이 안드는데요;;

    • Everyone of you can finish this assignment!


Cse 321 programming languages so many topics

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


  • Login