dynamically typed programming languages
play

Dynamically Typed Programming Languages Part 2: Dynamic PCF Jim - PowerPoint PPT Presentation

Dynamically Typed Programming Languages Part 2: Dynamic PCF Jim Royer CIS 352 April 16, 2019 Reference Practical Foundations for Programming Languages, 1/e, Part VI: Dynamic Types , by Robert Harper, Cambridge University Press, 2013,


  1. Dynamically Typed Programming Languages Part 2: Dynamic PCF Jim Royer CIS 352 April 16, 2019

  2. Reference Practical Foundations for Programming Languages, 1/e, “Part VI: Dynamic Types” , by Robert Harper, Cambridge University Press, 2013, pages 127–148.

  3. (Ordinary) PCF PCF (Programming Computable Functions) Plotkin 1977 A theoretical cousin of ML and Haskell (and close to LFP + ). PCF Raw Syntax Gordon Plotkin Expr :: = X | λ X . Expr | Expr ( Expr ) | N | zero | succ ( Expr ) | fix X is Expr | ifz Expr { zero ⇒ Expr | succ ( X ) ⇒ Expr } Note: For fix , think rec . Type :: = nat | Type → Type PCF Types: PCF Typing Rules: The usual thing.

  4. Dynamic PCF DPCF Raw Syntax (the same as PCF syntax) Expr :: = X | λ X . Expr | Expr ( Expr ) | N | zero | succ ( Expr ) | ifz Expr { zero ⇒ Expr | succ ( X ) ⇒ Expr } | fix X is Expr DPCF Statics x 1 : ok , . . . x n : ok ⊢ e : ok asserts that e is a well-formed expression with free variables ⊆ { x 1 , . . . , x n } . However: ⊢ 3 ( 4 ) : ok is true but nonsensical (i.e., and error).

  5. DPCF Dynamics Expr :: = X | λ X . Expr | Expr ( Expr ) | N | zero | succ ( Expr ) | ifz Expr { zero ⇒ Expr | succ ( X ) ⇒ Expr } | fix X is Expr DPCF “classes”: num and fun DPCF judgment forms Note: d is abstract syntax d val d is a (closed) value d evaluates to d ′ in one step d �→ d ′ d err d incurs a run-time error d isNum n d is of class num with value n d isNotNum d is not of class num d isFun (Fun x d) d is of class fun with value (Fun x d) d isNotFun d is not of class fun

  6. DPCF Dynamics Rules Class checking ( Num n ) val ( Num n ) isNum n ( Num n ) isNotFun ( Fun x d ) val ( Fun x n ) ( Fun x d ) isNotNum ( Fun x d ) isFun ( Fun x d ) Transition ( �→ ) rules Zero �→ ( Num 0 ) d �→ d ′ d err ( Succ d ) �→ ( Succ d ′ ) ( Succ d ) err d isNum n d isNotNum ( Succ d ) �→ ( Num ( n + 1 )) ( Succ d ) err

  7. DPCF Dynamics Rules, continued More transition ( �→ ) rules [See Harper for the five ifz rules] d 1 �→ d ′ d 1 err 1 ( App d 1 d 2 ) �→ ( App d ′ 1 d 2 ) ( App d 1 d 2 ) err ) d 1 isFun ( Fun x d ′ ) d isNotFun ( App d 1 d 2 ) �→ d [ d 2 / x ] ( App d 1 d 2 ) err ( Fix x d ) �→ d [( Fix x d ) / x ]

  8. DPCF Dynamics, safety (such as it is) Lemma (Class Checking) If ( d val ) , then: either ( d isNum n ) for some n, or ( d isNotNum ) . either ( d isFun ( Fun x d ′ )) for some x and d ′ , or ( d isNotFun ) . Theorem (Progress) If ⊢ d ok , then either d val or d err or d �→ d ′ for some d ′ .

  9. Static vs. Dynamic Typing In a statically typed language (e.g., Java, Haskell, . . . ) Type checking happens before run time. Errors such as 4 ( 3 ) get caught in type-checking. But you are stuck with the type-system of the language. In a dynamically typed language (e.g., Scheme, Python, . . . ) d ( d ′ ) may sometimes be just fine and other times an error (say when d has the value 4). Type/class checking happens in every step of running the program! This is a mild runtime overhead, but it complicates implementing and reasoning about programs a lot! But you get to make up (& enforce) your own type system with every program you write. Compromise position: Work in a language with a two-fisted type system.

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend