(Advanced) topics in Programming Languages Instructor: Mooly Sagiv TA: Shachar Itzhaky Spring 2012 Inspired.

Slides:



Advertisements
Similar presentations
Semantics Static semantics Dynamic semantics attribute grammars
Advertisements

- Vasvi Kakkad.  Formal -  Tool for mathematical analysis of language  Method for precisely designing language  Well formed model for describing and.
1 Mooly Sagiv and Greta Yorsh School of Computer Science Tel-Aviv University Modern Compiler Design.
Rigorous Software Development CSCI-GA Instructor: Thomas Wies Spring 2012 Lecture 11.
Type checking © Marcelo d’Amorim 2010.
INF 212 ANALYSIS OF PROG. LANGS Type Systems Instructors: Crista Lopes Copyright © Instructors.
Introduction to Advanced Topics Chapter 1 Mooly Sagiv Schrierber
12. Summary, Trends, Research. © O. Nierstrasz PS — Summary, Trends, Research Roadmap  Summary: —Trends in programming paradigms  Research:...
Copyright © 2006 The McGraw-Hill Companies, Inc. Programming Languages 2nd edition Tucker and Noonan Chapter 1 Overview A good programming language is.
1 Operational Semantics Mooly Sagiv Tel Aviv University Textbook: Semantics with Applications.
13. Summary, Trends, Research. © O. Nierstrasz PS — Summary, Trends, Research Summary, Trends, Research...  Summary: functional, logic and object-oriented.
Reasons to study concepts of PL
Programming Language Semantics Mooly SagivEran Yahav Schrirber 317Open space html://
Programming Languages Structure
MinML: an idealized programming language CS 510 David Walker.
Doaitse Swierstra Atze Dijkstra Doaitse Swierstra Atze Dijkstra Type Systems.
12. Summary, Trends, Research. © O. Nierstrasz PS — Summary, Trends, Research Roadmap  Summary: —Trends in programming paradigms  Research:...
Semantics with Applications Mooly Sagiv Schrirber html:// Textbooks:Winskel The.
CS 330 Programming Languages 09 / 16 / 2008 Instructor: Michael Eckmann.
Describing Syntax and Semantics
1 A Short Introduction to (Object-Oriented) Type Systems Kris De Volder.
Dr. Muhammed Al-Mulhem ICS An Introduction to Functional Programming.
Programming Language Concepts
Foundations of Programming Languages – Course Overview Xinyu Feng Acknowledgments: some slides taken or adapted from lecture notes of Stanford CS242
Language Evaluation Criteria
CSE 425: Intro to Programming Languages and their Design A Few Key Ideas No particular language is a prerequisite for this course –However you should be.
Programming Languages and Design Lecture 1 Introduction to Programming Languages Instructor: Li Ma Department of Computer Science Texas Southern University,
Types for Programs and Proofs Lecture 1. What are types? int, float, char, …, arrays types of procedures, functions, references, records, objects,...
CSC3315 (Spring 2009)1 CSC 3315 Programming Languages Hamid Harroud School of Science and Engineering, Akhawayn University
Benjamin Gamble. What is Time?  Can mean many different things to a computer Dynamic Equation Variable System State 2.
March 12, ICE 1341 – Programming Languages (Lecture #6) In-Young Ko Programming Languages (ICE 1341) Lecture #6 Programming Languages (ICE 1341)
Typed Lambda Calculus Chapter 9 Benjamin Pierce Types and Programming Languages.
INF 212 ANALYSIS OF PROG. LANGS LECTURE 1 Instructors: Crista Lopes Copyright © Instructors.
Lesson 4 Typed Arithmetic Typed Lambda Calculus 1/21/02 Chapters 8, 9, 10.
Formal Semantics of Programming Languages 虞慧群 Topic 1: Introduction.
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.
Syntax and Semantics CIS 331 Syntax: the form or structure of the expressions, statements, and program units. Semantics: the meaning of the expressions,
12/9/20151 Programming Languages and Compilers (CS 421) Elsa L Gunter 2112 SC, UIUC Based in part on slides by Mattox.
1-1 An Introduction to Functional Programming Sept
Type Checking Textbook: Types and Programming Languages Benjamin Pierce.
Types and Programming Languages Lecture 11 Simon Gay Department of Computing Science University of Glasgow 2006/07.
Semantic Analysis II Type Checking EECS 483 – Lecture 12 University of Michigan Wednesday, October 18, 2006.
What’s Ahead for Embedded Software? (Wed) Gilsoo Kim
Operational Semantics Mooly Sagiv Tel Aviv University Textbook: Semantics with Applications Chapter.
CMSC 330: Organization of Programming Languages Operational Semantics.
Types and Programming Languages Lecture 3 Simon Gay Department of Computing Science University of Glasgow 2006/07.
Operational Semantics Mooly Sagiv Tel Aviv University Sunday Scrieber 8 Monday Schrieber.
Operational Semantics Mooly Sagiv Reference: Semantics with Applications Chapter 2 H. Nielson and F. Nielson
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.
Dr. M. Al-Mulhem Introduction 1 Chapter 6 Type Systems.
1 Announcements Exam 2 graded Rainbow grades: HW1-5, Exam 1-2, Quiz 1-6 Part 1: Problem 1, Problem 2, will go over 2 Part 2: Problem 1, Problem 2 Part.
Programming Languages
CS5205: Foundations in Programming Languages
Functional Programming
The language focusses on ease of use
Type Checking and Type Inference
INF 212 Analysis of Prog. Langs Final Lecture
Types for Programs and Proofs
PROGRAMMING LANGUAGES
Lesson 4 Typed Arithmetic Typed Lambda Calculus
Foundations of Programming Languages – Course Overview
Programming Languages
Typed Arithmetic Expressions
Foundations of Programming Languages – Course Overview
Programming Languages 2nd edition Tucker and Noonan
Programming Languages
Functional Programming and Haskell
Presentation transcript:

(Advanced) topics in Programming Languages Instructor: Mooly Sagiv TA: Shachar Itzhaky Spring 2012 Inspired by John Mitchell CS’242

Prerequisites Compilation course

Course Grade 20% Class notes 30% Assignments 50% Home or (easier) class exam

Class Notes Prepared by two students First draft completed within one week Consumes a lot of time Use LaTeX template provided in the homepage Read supplementary material Correct course notes – Bonus for interesting corrections Add many more examples and elaborations

Course Themes Programming Language Concepts – A language is a “conceptual universe” (Perlis) Framework for problem-solving Useful concepts and programming methods – Understand the languages you use, by comparison – Appreciate history, diversity of ideas in programming – Be prepared for new programming methods, paradigms, tools Critical thought – Identify properties of language, not syntax or sales pitch Language and implementation – Every convenience has its cost Recognize the cost of presenting an abstract view of machine Understand trade-offs in programming language design

Language goals and trade-offs Architect Compiler, Runtime environ- ment Programmer Testing Diagnostic Tools Programming Language

Instructor’s Background First programming language Pascal Soon switched to C (unix) Efficient low level programming was the key Small programs did amazing things Led an industrial project was written in common lisp Semi-automatically port low level OS code between 16 and 32 bit architectures The programming setting has dramatically changed: Object oriented Garbage collection Huge programs Performance depends on many issues Productivity is sometimes more importance than performance Software reuse is a key

Other Lessons Learned Futuristic ideas may be useful problem-solving methods now, and may be part of languages you use in the future Examples Recursion Object orientation Garbage collection High level concurrency support Higher order functions Pattern matching

More examples of practical use of futuristic ideas Function passing: pass functions in C by building your own closures, as in STL “function objects” Blocks are a nonstandard extension added by Apple to C that uses a lambda expression like syntax to create closures Continuations: used in web languages for workflow processing Monads: programming technique from functional programming Concurrency: atomicity instead of locking Decorators in Python to dynamically change the behavior of a function

What’s new in programming languages Commercial trend over past 5+ years – Increasing use of type-safe languages: Java, C#, … – Scripting languages, other languages for web applications Teaching trends – Java replaced C as most common intro language Less emphasis on how data, control represented in machine Research and development trends – Modularity Java, C++: standardization of new module features – Program analysis Automated error detection, programming env, compilation – Isolation and security Sandboxing, language-based security, … – Web 2.0 Increasing client-side functionality, mashup isolation problems

What’s worth studying? Dominant languages and paradigms – Leading languages for general systems programming – Explosion of programming technologies for the web Important implementation ideas Performance challenges – Concurrency Design tradeoffs Concepts that research community is exploring for new programming languages and tools Formal methods in practice Grammars Semantics Domain theory …

Suggested Reading J. Mitchell. Concepts in Programming Languages B. Pierce. Types and Programming Languages J. Mitchell. Foundations for Programming Languages C. A. R. Hoare. An axiomatic basis for computer programming. Communications of the ACM, 12(10): and 583, October 1969 Peter J. Landin. The next 700 programming languages …

Related Courses Compilers Programming languages Semantics of programming languages Program analysis

Tentative Schedule 6/3introduction 13/3javascript 20/3Haskel 27/3No class 3/4Exception and continuation 17/4, 24/4, 2/5Type Systems 8/5Dependent types 15/5IO Monads 22/5, 29/5, 5/6Concurrency 12/6, 19/6Domain Specific Languages 22/6Summary class

Type Checking Benjamin Pierce. Types and Programming Languages

August 2005 As a Malaysia Airlines jetliner cruised from Perth, Australia, to Kuala Lumpur, Malaysia, one evening last August, it suddenly took on a mind of its own and zoomed 3,000 feet upward. The captain disconnected the autopilot and pointed the Boeing 777's nose down to avoid stalling, but was jerked into a steep dive. He throttled back sharply on both engines, trying to slow the plane. Instead, the jet raced into another climb. The crew eventually regained control and manually flew their 177 passengers safely back to Australia. Investigators quickly discovered the reason for the plane's roller-coaster ride 38,000 feet above the Indian Ocean. A defective software program had provided incorrect data about the aircraft's speed and acceleration, confusing flight computers. August 2005

Error Detection Early error detection – Logical errors – Interface errors – Dimension analysis – Effectiveness also depends on the programmer – Can be used for code maintenance

Type Systems A tractable syntactic method for proving absence of certain program behaviors by classifying phrases according to the kinds they compute Examples – Whenever f is called, its argument must be integer – The arguments of f are not aliased – The types of dimensions must match –…–…

What is a type A denotation of set of values – Int – Bool –…–… A set of legal operations

Static Type Checking Performed at compile-time Conservative (sound but incomplete) – if then 5 else Usually limited to simple properties – Prevents runtime errors – Enforce modularity – Protects user-defined abstractions – Allows tractable analysis But worst case complexity can be high Properties beyond scope (usually) – Array out of bound – Division by zero – Non null reference

Abstraction Types define interface between different software components Enforces disciplined programming Ease software integration Other abstractions exist

Documentation Types are useful for reading programs Can be used by language tools

Language Safety A safe programming language protects its own abstraction Can be achieved by type safety Type safety for Java was formally proven

Statically vs. Dynamically Checked Languages Statically Checked Dynamically Checked SafeML, Haskel, Java, C# Lisp, Scheme, Perl, Python UnsafeC, C++

Efficiency Compilers can use types to optimize computations Pointer scope Region inference

Language Design Design the programming language with the type system But types incur some notational overhead Implicit vs. explicit types – The annotation overhead Designing libraries is challenging – Generics/Polymorphism help

Untyped Arithmetic Expressions Chapter 3

Untyped Arithmetic Expressions t ::= terms true constant true false constant false if t then t else t conditional 0 constant zero succ t successor pred t predecessor iszero t zero test if false then 0 else 11 iszero (pred (succ 0))true

Untyped Arithmetic Expressions t ::= terms true constant true false constant false if t then t else t conditional 0 constant zero succ t successor pred t predecessor iszero t zero test succ truetype error if 0 then 0 else 0type error

Structural Operational Semantics (SOS) The mathematical meaning of programs A high level definition of interpreter Allow inductively proving program properties A binary relation on terms – t  t’ One step of executing t may yield the value t’ Inductive definitions of  – Axioms – Inference rules The meaning of a program is a set of trees The actual interpreter can be automatically derived

SOS rules for Untyped Arithmetic Expressions if true then t 1 else t 2  t 1 (E-IFTRUE) if false then t 1 else t 2  t 2 (E-IFFALSE) t 1  t’ 1 if t 1 then t 2 else t 3  if t’ 1 then t 2 else t 3 (E-IF) t 1  t’ 1 succ t 1  succ t’ 1 (E-SUCC) t 1  t’ 1 pred t 1  pred t’ 1 (E-PRED) pred 0  0 (E-PREDZERO) t 1  t’ 1 iszero t 1  iszero t’ 1 (E-ISZERO) iszero 0  true (E-ISZEROZERO) iszero succ t  false (E-ISZERONZERO) pred (succ t)  t (E-PREDSUCC)

Examples if false then 0 else 1 iszero (pred (succ 0)) succ true if 0 then 0 else 0 if iszero (succ true) then 0 else 1

Properties of the semantics Determinism – t 1  t 2  t 1  t 3  t 2 = t 3 Reflexive transitive closure – t  * t’ if either t = t’ or there exists t 0, t 1, …, t n such that t=t 0, t’ = t n and for every 0  i < n: t i  t i+1 Semantic meaning –  : Terms  Nat  Bool –  t  = t’ if t’  Nat  Bool  t  * t’

Typed Arithmetic Expressions Chapter 8

Well Typed Programs A set of type rules conservatively define well typed programs The typing relation is the smallest binary relation between terms and types – in terms of inclusion A term t is typable (well typed) if there exists some type T such that t : T The type checking problem is to determine for a given term t and type T if t : T The type inference problem is to infer for a given term t a type T such that t : T

Type Safety Stuck terms: Undefined Semantics –  t’: t  t’ The goal of the type system is to ensure at compile- time that no stuck ever occurs at runtime Type Safety (soundness) – Progress: A well-typed term t never gets stuck Either it has value or there exists t’ such that t  t’ – Preservation: (subject reduction) If well type term takes a step in evaluation, then the resulting term is also well typed

Typed Arithmetic Expressions t ::= terms true constant true false constant false if t then t else t conditional 0 constant zero succ t successor pred t predecessor iszero t zero test v ::=values truetrue value falsefalse value nvnumeric value nv ::=numeric values 0zero value succ nv successor value

Type Rules for Booleans T ::= types Bool type of Boolean t : T true : Bool (T-TRUE) false : Bool (T-FALSE) t 1 : Bool t 2 : T t 3 : T if t 1 then t 2 else t 3 : T (T-IF)

Type Rules for Numbers T ::= types Nat type of Natural numbers t : T 0 : Nat (T-ZERO) t 1 : Nat succ(t 1 ) : Nat T-SUCC t 1 : Nat pred(t 1 ) : Nat T-PRED t 1 : Nat iszero(t 1 ) : Bool T-ISZERO

Type Rules for Arithmetic Expressions 0 : Nat (T-ZERO) t 1 : Nat succ(t 1 ) : Nat T-SUCC t 1 : Nat pred(t 1 ) : Nat T-PRED t 1 : Nat iszero(t 1 ) : Bool T-ISZERO true : Bool (T-TRUE) false : Bool (T-FALSE) t 1 : Bool t 2 : T t 3 : T if t 1 then t 2 else t 3 : T (T-IF)

Examples if false then 0 else 1 iszero (pred (succ 0)) succ true if 0 then 0 else 0 if iszero 0 then 0 else 1 if iszero (succ true) then 0 else 1

LEMMA: Inversion of the typing relation true : R  R = Bool false : R  R = Bool if t 1 then t 2 else t 3 : R  t 1 : Bool, t 2 : R, t 3 : R 0 : R  R = Nat succ t 1 : R  R = Nat and t 1 : Nat pred t 1 : R  R = Nat and t 1 : Nat iszero t1 : R  R = Bool and t 1 : Nat

Uniqueness of Types Each term t has at most one type – If t is typable then its type is unique There is a unique type derivation tree for t Does not hold for general languages – Need a partial order on types – Unique most general type

Type Safety LEMMA 8.3.1: Canonical Forms: If v is a value of type Boolean then v =true or v=false If v is a value of type Nat then v belongs to nv Progress: If t is well typed then either t is a value or for some t’: t  t’ Preservation: if t : T and t  t’ then t’ : T nv ::= numeric values 0 zero value succ nv successor value

Language Restrictions so far Simple expression language Fixed number of types No loops/recursion No variables/states No memory allocation

Extensions Untyped lambda calculus (Chapter 5) Simple Typed Lambda Calculus (Chapter 9) Subtyping (Chapters 15-19) – Most general type Recursive Types (Chapters 20, 21) – NatList = Polymorphism (Chapters 22-28) – length:list   int – Append: list     list  Higher-order systems (Chapters 29-32)

Summary Type Systems Type systems provide a useful mechanism for conservatively enforcing certain safety properties – Can be combined with runtime systems and static program analysis Interacts with the programmer A lot of interesting theory Another alternative is static program analysis – Infer abstractions of values at every program point

Other Course Topics Dependent Types Monads Continuations Concurrency Domain specific languages …