David Evans CS655: Programming Languages University of Virginia Computer Science Lecture 6: Types of Types “It would.

Slides:



Advertisements
Similar presentations
Semantics Static semantics Dynamic semantics attribute grammars
Advertisements

Semantic Analysis Chapter 6. Two Flavors  Static (done during compile time) –C –Ada  Dynamic (done during run time) –LISP –Smalltalk  Optimization.
Programming Languages and Paradigms
David Evans CS655: Programming Languages University of Virginia Computer Science Lecture 20: Total Correctness; Proof-
1 Mooly Sagiv and Greta Yorsh School of Computer Science Tel-Aviv University Modern Compiler Design.
Winter Compiler Construction T7 – semantic analysis part II type-checking Mooly Sagiv and Roman Manevich School of Computer Science Tel-Aviv.
Getting started with ML ML is a functional programming language. ML is statically typed: The types of literals, values, expressions and functions in a.
David Evans CS655: Programming Languages University of Virginia Computer Science Lecture 13: Operational Semantics “Then.
David Evans CS655: Programming Languages University of Virginia Computer Science Lecture 19: Minding Ps & Qs: Axiomatic.
CSE 341, Winter Type Systems Terms to learn about types: –Type –Type system –Statically typed language –Dynamically typed language –Type error –Strongly.
Copyright © 2006 Addison-Wesley. All rights reserved.1-1 ICS 410: Programming Languages Chapter 3 : Describing Syntax and Semantics Axiomatic Semantics.
ISBN Chapter 3 Describing Syntax and Semantics.
CS 330 Programming Languages 09 / 19 / 2006 Instructor: Michael Eckmann.
Type Checking.
Compiler Construction
David Evans CS150: Computer Science University of Virginia Computer Science Lecture 31: Types of Types.
Typed Assembly Languages COS 441, Fall 2004 Frances Spalding Based on slides from Dave Walker and Greg Morrisett.
CS 330 Programming Languages 10 / 16 / 2008 Instructor: Michael Eckmann.
1 Names, Scopes and Bindings. 2 Names Kinds of names Kinds of names Variables, functions, classes, types, labels, blocks, operators, tasks, etc. Variables,
CS 330 Programming Languages 09 / 18 / 2007 Instructor: Michael Eckmann.
Programming Language Semantics Mooly SagivEran Yahav Schrirber 317Open space html://
Approaches to Typing Programming Languages Robert Dewar.
Semantics with Applications Mooly Sagiv Schrirber html:// Textbooks:Winskel The.
CS 330 Programming Languages 09 / 16 / 2008 Instructor: Michael Eckmann.
Describing Syntax and Semantics
Summer 02-03Programming Language Concepts1 Programming Language Concepts (CS 360) Lecture 1: Overview, Grammars, and Little Languages Jeremy R. Johnson.
Imperative Programming
Cs3102: Theory of Computation Class 18: Proving Undecidability Spring 2010 University of Virginia David Evans.
CSC3315 (Spring 2009)1 CSC 3315 Programming Languages Hamid Harroud School of Science and Engineering, Akhawayn University
DEPARTMENT OF COMPUTER SCIENCE & TECHNOLOGY FACULTY OF SCIENCE & TECHNOLOGY UNIVERSITY OF UWA WELLASSA 1 CST 221 OBJECT ORIENTED PROGRAMMING(OOP) ( 2 CREDITS.
Containment and Integrity for Mobile Code Security policies as types Andrew Myers Fred Schneider Department of Computer Science Cornell University.
LISP – Not just a Speech Impediment Jim Lowe. Brief History of LISP Initial development begins at the Dartmouth Summer Research Project in 1956 by Dr.
1 COSC3557: Object-Oriented Programming Haibin Zhu, Ph. D. Associate Professor of CS, Nipissing University.
ISBN Chapter 3 Describing Semantics -Attribute Grammars -Dynamic Semantics.
Basic Semantics Associating meaning with language entities.
CS 363 Comparative Programming Languages Semantics.
CSE 425: Data Types I Data and Data Types Data may be more abstract than their representation –E.g., integer (unbounded) vs. 64-bit int (bounded) A language.
ISBN Chapter 6 Data Types Introduction Primitive Data Types User-Defined Ordinal Types.
Chapter 3 Part II Describing Syntax and Semantics.
Programming Languages and Design Lecture 3 Semantic Specifications of Programming Languages Instructor: Li Ma Department of Computer Science Texas Southern.
Semantics In Text: Chapter 3.
CS 655: Programming Languages David Evans Office 236A, University of Virginia Computer.
CS536 Semantic Analysis Introduction with Emphasis on Name Analysis 1.
David Evans CS655: Programming Languages University of Virginia Computer Science Lecture 14: Types of Types “It would.
12/9/20151 Programming Languages and Compilers (CS 421) Elsa L Gunter 2112 SC, UIUC Based in part on slides by Mattox.
MT311 Java Application Development and Programming Languages Li Tak Sing ( 李德成 )
David Evans CS200: Computer Science University of Virginia Computer Science Lecture 19: Environments.
Semantic Analysis II. Messages Please check lecturer notices in the Moodle Appeals  Legitimate: “I don’t have the bug you mentioned…”  Illegitimate:
How to execute Program structure Variables name, keywords, binding, scope, lifetime Data types – type system – primitives, strings, arrays, hashes – pointers/references.
Semantic Analysis II Type Checking EECS 483 – Lecture 12 University of Michigan Wednesday, October 18, 2006.
CS412/413 Introduction to Compilers Radu Rugina Lecture 13 : Static Semantics 18 Feb 02.
CS 330 Programming Languages 10 / 23 / 2007 Instructor: Michael Eckmann.
Overview of Compilation Prepared by Manuel E. Bermúdez, Ph.D. Associate Professor University of Florida Programming Language Principles Lecture 2.
Operational Semantics Mooly Sagiv Reference: Semantics with Applications Chapter 2 H. Nielson and F. Nielson
Chapter 1: Preliminaries Lecture # 2. Chapter 1: Preliminaries Reasons for Studying Concepts of Programming Languages Programming Domains Language Evaluation.
David Evans CS200: Computer Science University of Virginia Computer Science Lecture 27: Types of Types “It would appear.
Polymorphism in Methods
Type Checking and Type Inference
Programming Languages and Compilers (CS 421)
Semantic Analysis Type Checking
Type Checking, and Scopes
Principles of programming languages 8: Types
Chapter 4: Types.
Lecture 28: Types of Types
UNIT V Run Time Environments.
Compiler Construction
David Evans Lecture 19: ||ism I don’t think we have found the right programming concepts for parallel computers yet.
Compiler Construction
Lecture 23: Computability CS200: Computer Science
Presentation transcript:

David Evans CS655: Programming Languages University of Virginia Computer Science Lecture 6: Types of Types “It would appear that we have reached the limits of what it is possible to achieve with computer technology, although one should be careful with such statements, as they tend to sound pretty silly in five years.” John Von Neumann, 1949

1 Feb 2000University of Virginia CS 6552 Menu PS 1 Results (John) Latent Types, Dynamic Checking Algol60 Group Report Manifest Types, Dynamic Checking Manifest Types, Static Checking

1 Feb 2000University of Virginia CS 6553 Types integers in [0, …)Strings Beatle’s Song Titles pointers that points to integer that is prime number Colors secret information pointers that points to pointer that points to storage shared by some other pointer programs that halt Type is any set of values Next week’s definition will be different

1 Feb 2000University of Virginia CS 6554 Why have types? Overloading operators + vs. FADD – compiler needs types to figure out what “+” means Detecting program errors –Better to notice error than report incorrect result Make programs easier to read, understand and maintain –Better than comments if they are checked and can be trusted Security –Can use types to constrain the behavior of programs (we’ll see Proof-Carrying Code later…)

1 Feb 2000University of Virginia CS 6555 Taxonomy Latent vs. Manifest –Are types visible in the program text? Checked statically vs. checked dynamically –Do you have to run the program to know if it has type errors? Checked weakly vs. strongly –How strict are the rules for using types? All combinations are (theoretically) possible –Language that is manifest + static + weak? –Language that is latent + dynamic + strong?

1 Feb 2000University of Virginia CS 6556 Labrador: BARK with Latent Types Instruction ::= STORE Loc Literal | HALT | ERROR (Same as BARK) | ADD Loc 1 Loc 2 Loc 1 gets the value of Loc 1 + Loc 2. Loc 1 and Loc 2 must be the same type, result has same type. | MUL Loc 1 Loc 2 Loc 1 gets the value of Loc 1 * Loc 2. Loc 1 and Loc 2 must be the same type. | IF Loc 1 THEN Loc 1 If value in Loc 1 is non-zero, jump to instruction corresponding to value in Loc 2. Loc 1 and Loc 2 must contain integers. Literal ::= IntLiteral | RealLiteral IntLiteral ::= [ - ] ? [ ][ ]*Has type integer. RealLiteral ::= [-] ? [ ][ ]*.[ ]*Has type real. As companions Labradors are kindly, patient,intelligent and always keen to please. They make perfect family dogs being especially good with children. Walter & Shackles Guide to Dogs

1 Feb 2000University of Virginia CS 6557 Labrador Program [0] STORE R [1] STORE R1 4 [2] MUL R1 R1 [3] MUL R0 R1.

1 Feb 2000University of Virginia CS 6558 Operational Semantics: ADD Instructions[PC] = ADD Loc 1 Loc 2  where PC’ = PC + 1 RegisterFile’[n] = RegisterFile[n] if n  Loc RegisterFile’[n] = if n  Loc 1 RegisterFile[Loc 1 ] + RegisterFile[Loc 2 ] BARK rule: What does this mean?

1 Feb 2000University of Virginia CS 6559 Typed Register File C = Instructions x PC x RegisterFile RegisterFile[i] = for all integers i type = integer | real value = an integer if type if integer, a real if type is real Assume functions typeof(RegisterFile[i]), valueof(RegisterFile[i])

1 Feb 2000University of Virginia CS Operational Semantics: ADD integer Instructions[PC] = ADD Loc 1 Loc 2,  where PC’ = PC + 1 RegisterFile’[n] = RegisterFile[n] if n  Loc RegisterFile’[n] = if n  Loc 1 <integer, valueof(RegisterFile[Loc 1 ]) + integer valueof(RegisterFile[Loc 2 ])> typeof(RegisterFile[Loc 1 ]) = integer, typeof(RegisterFile[Loc 2 ]) = integer

1 Feb 2000University of Virginia CS Operational Semantics: ADD real Instructions[PC] = ADD Loc 1 Loc 2, typeof(RegisterFile[Loc 1 ]) = real, typeof(RegisterFile[Loc 2 ]) = real  where PC’ = PC + 1 RegisterFile’[n] = RegisterFile[n] if n  Loc RegisterFile’[n] = if n  Loc 1 <real, valueof(RegisterFile[Loc 1 ]) + real valueof(RegisterFile[Loc 2 ])>

1 Feb 2000University of Virginia CS Strong vs. Weak Typing What do we have? –Latent, dynamic, strongly typed language To get: latent, dynamic, weakly typed language: –Allow ADD and MUL to work on mixed types, result is real, allow IF predicate to be real –Add transition rules for Instructions[PC] = ADD Loc 1 Loc 2, typeof(RegisterFile[Loc 1 ]) = real, typeof(RegisterFile[Loc 2 ]) = integer etc.

1 Feb 2000University of Virginia CS Is Dynamic Type Checking Useful?

1 Feb 2000University of Virginia CS Manifest Types Often, however, explicit (manifest) types make programs easier for compilers to read, not easier for humans to read; and explicit (manifest) types are generally cumbersome for the program writer as well. Implicitly (latently) typed programming languages thus have clear advantages in terms of readability and writability. Turbak & Gifford

1 Feb 2000University of Virginia CS Mastiff: BARK with Manifest Types Program ::= Declaration* Instruction* Declaration ::= TYPE Loc INTEGER Loc will hold integral values. | TYPE Loc REAL Loc will hold real values. Instruction ::= STORE Loc Literal Loc gets the value of Literal. Loc must have been declared with the same type as Literal. … (same as Labrador) Mastiff: An excellent guard dog, yet gentle and affectionate to its family. Walter & Shackles Guide to Dogs

1 Feb 2000University of Virginia CS Mastiff Program [D0]TYPE R0 REAL [D1]TYPE R1 INTEGER [0] STORE R [1] STORE R1 4 [2] MUL R1 R1 [3] MUL R0 R1

1 Feb 2000University of Virginia CS Input Function: I : Program  C C = Instructions x PC x RegisterFile where Instructions = same as before, PC = 0 RegisterFile[n] = if TYPE Rn INTEGER is in Declarations RegisterFile[n] = if TYPE Rn REAL is in Declarations RegisterFile[n] = for all other integers n RegisterFile[n] = if (TYPE Rn INTEGER and TYPE Rn REAL are in Declarations)

1 Feb 2000University of Virginia CS STORE Loc IntLiteral Instructions[PC] = STORE Loc IntLiteral, typeof(RegisterFile[Loc]) = integer  where PC’ = PC + 1 RegisterFile’[n] = RegisterFile[n] if n  Loc RegisterFile’[n] = if n  Loc

1 Feb 2000University of Virginia CS Static Semantics Static checking = at compile-time –Dynamic checking = at run (simulate)-time Know a whole program is type-correct without running it Can make claims about all possible executions Drawbacks: –May limit expressiveness of types (not everything can be checked statically) –Some type-correct programs may not pass static checking

1 Feb 2000University of Virginia CS Premise;...; Premise Conclusion Conclusions are type judgments: A E : T Read: A proves E has type T. Use type okay to mean it type-checks, but has no type. Type environment: A Type bindings: [I 1 :T 1,..., I n :T n ] I n (Loc) has type T n Typing Rules

1 Feb 2000University of Virginia CS Mastiff Typing Rules A IntLiteral : integer[int-literal] RealLiteral : real[real-literal] A contains [Loc:T] Loc : T[location] true

1 Feb 2000University of Virginia CS Typing ADD A Loc 1 : integer, A Loc2 2 : integer A ADD Loc 1 Loc 2 : okay [add-integers] A Loc 1 : real, A Loc2 2 : real A ADD Loc 1 Loc 2 : okay [add-reals]

1 Feb 2000University of Virginia CS Typing MUL A Loc 1 : integer, A Loc2 2 : integer A MUL Loc 1 Loc 2 : okay [mul-integers] A Loc 1 : real, A Loc 2 : integer A MUL Loc 1 Loc 2 : okay [mul-weak]

1 Feb 2000University of Virginia CS Typing IF A Loc 1 : integer, A Loc 2 : integer A IF Loc 1 THEN Loc 2 : okay [if] A Loc 1 : real, A Loc 2 : integer A IF Loc 1 THEN Loc 2 : okay [if-weak]

1 Feb 2000University of Virginia CS Type Checking Statement is well-typed if and only if it has a provable type judgment: –Construct a proof tree, where the root is the type judgment for this statement, and leaves are the axioms Declarations provide the axioms: Declarations = TYPE Loc i0 T i0 ; TYPE Loc i1 T i1,...  A = [Loc i0 : T i0, Loc i1 : T i1,... ]

1 Feb 2000University of Virginia CS Type Checking Example Check instruction 3: MUL R0 R1 [D0]TYPE R0 REAL [D1]TYPE R1 INTEGER [0] STORE R [1] STORE R1 4 [2] MUL R1 R1 [3] MUL R0 R1 A R0 : real, A R1 : integer A MUL R0 R1 : okay [mul-weak] A contains [ R0 : real] R0 : real same for R1 : integer A = [ R0 : real; R1 : integer] from Declarations

1 Feb 2000University of Virginia CS Mastiff with Expressions Program ::= Declaration* Instruction* Instruction ::= STORE Loc Expression Expression must match declared type of Loc | GOTO Expression Expression must be integer | IF Expression p THEN Expression j Expression j must be integer Expression ::= MUL Expression Expression | ADD Expression Expression | Loc | Literal | ( Expression )

1 Feb 2000University of Virginia CS Type checking Example [D0] TYPE R0 REAL [0] STORE R0 (MUL (MUL 4 4)) [store-real] A R0 : real, A (MUL …) : real A STORE R0 (MUL …) : okay A 3.14 : real, A (MUL 4 4) : integer A MUL 3.14 (MUL 4 4) : okay [mul-weak] …[mul-int] …[real-literal]

1 Feb 2000University of Virginia CS Summary Statically Checked Dynamically Checked Manifest TypesMastiff-SMastiff-D Latent TypesLabrador CLU, Pascal ML, FL Scheme, Smalltalk

1 Feb 2000University of Virginia CS Charge Continue working on your projects! Tuesday: Data Abstraction –CLU: language designed to support methodology based on data abstraction –Reasoning (informally) about data abstractions Next: Object-Oriented Languages Later: (after Spring Break) –How to do static checking with latent types (type reconstruction, type inference) –How to use types for security Today at 4:00, Jordan Hall: Mark S. Boguski, Natl Institutes of Health Interface between computation and biology