Just Enough Type Theory or, Featherweight Java A Simple Formal Model of Objects Jonathan Aldrich 15-819

Download Report

Transcript Just Enough Type Theory or, Featherweight Java A Simple Formal Model of Objects Jonathan Aldrich 15-819

Just Enough Type Theory
or,
Featherweight Java
A Simple Formal Model of Objects
Jonathan Aldrich
15-819
Why Formal Models?
• Make precise what a language means
– What can you say in the language?
– How does a program execute?
• Allow us to prove formal properties
– Typically, lack of certain run-time errors
• This course
– Type theory not required for much of the reading
– However, some papers use formal notation
• A brief introduction will help us get more out of it
Example: Featherweight Java
• A minimal core calculus for Java
– Classes, methods, fields, inheritance
– Any FJ program is a Java program
• Purpose of a core language
– Leaves out unnecessary details
– Focuses attention on issues of interest
– Makes proving formal properties easier
• Citation
– Atsushi Igarashi, Benjamin Pierce, and Philip Wadler.
Featherweight Java: A Minimal Core Calculus for Java and GJ.
OOPSLA ’99.
FJ Syntax
• Standard BNF definition
• Overbar represents a sequence
Subtyping Judgments
Base case: each class subtypes itself
Transitivity rule
Both exprs on top must hold
If we know this
Then we can conclude this
Dynamic Semantics
• Computation expressed as rewriting rules
• [d/x] e – substitute d for x in e
Evaluation Examples
Type System
• Conceptually:
– Annotates an object or expression
– Describes operations that are applicable
• Prevents run-time errors from undefined operations
– X = “hello” – 2
– snail.fly()
• Type soundness
– A well-typed program will not halt with an undefined operation
error
• Java’s type system does a dynamic check at casts, and so
programs can halt with a cast error.
• FJ’s type system, however prevents all other run time errors.
– Real languages have additional error cases; however, the type
soundness guarantee is still useful
FJ Types
•  maps var -> class
• Read  ├ e  C as, “in
the context of type
environment ,
expression e has type C
Class/Method Typing
Other definitions
Type Soundness
A well-typed program remains well-typed after a reduction step
A well-typed program can take a step
Well-typed FJ programs eventually reduce to either a value or an
expression with an embedded cast error
Proofs are by induction, beyond the scope of this course