Title: Formal Models for Programming Languages
1Formal Models for Programming Languages
Alexandra Stefan
2Topics of Discussion
- Programming Languages (PLs) and
- Formal Models
- Case study
- Java - Featherweight Java (FJ)
- Extension
- Generic Java (1.5 beta)
- Featherweight Generic Java (FGJ)
- Some properties compositionality ...
- Related work
3PLs formal models
- First was the computer
- and then the programs
- and then the programs to write programs
- Numerous programming languages
- imperative Ada, Pascal, Perl, Java, all of the
Cs - functional Scheme, SML, Prolog, Haskel, OCaml
- How to choose one? What makes one better than the
other? - expressive power?
- No.
- friendliness? (readability/ modifiability/
debugging) - Yes.
4PLs formal models
- Then questions and needs were raised about
languages - How safe is it?
- It passed compilation what next?
- Can I trust it to run well?
- Will it stab me on the back?
- Can it be extended?
- Improved efficiency generic classes
- Increased expressivity XML syntax
- How would I design a new language?
5PLs formal models
- Here we come, the PL people!
- check their properties (e.g. type preservation,
progress, ) - try to capture the invariants with a type system
- How do we do this?
- using a formal model
6Formal model
- Design choice completeness or compactness?
- more complex is more unwieldy
- too parsimonious is useless
- trade-off
7Formal model
- Examples
- Lambda calculus
- Java FJ, FGJ, Javas (Javase), Javalight,
ClassicJava, - C C?
8Topics of Discussion
- Programming Languages (PLs) and
- Formal Models
- Case study
- Java - Featherweight Java (FJ)
- Extension
- Generic Java (1.5 beta)
- Featherweight Generic Java (FGJ)
- Some properties compositionality ...
- Related work
9Topics of Discussion
- Programming Languages (PLs) and
- Formal Models
- Case study
- Java - Featherweight Java (FJ)
10 Case study Featherweight Java (FJ)
- Proposed by Igarashi, Pierce, and Wadler in 1999.
- Models Javas type system.
- Minimal core calculus
- Favors compactness over completeness almost
obsessively - (It hardly resembles Java!)
- no assignment -gt functional
- captures the core features of Java typing.
- How close is it to Java?
- FJ purely functional core of Java.
- (every FJ program is literally an executable
Java program)
11 FJ What can be done with it?
- It allows easy proofs for type safety for FJ
- FJs main application is to model extensions
- of Java
- FGJ
- Featherweight Open Java
- Inner classes
12 FJ
13 FJ
- How does an FJ program look like?
- Pair (class table, expression)
- The class table - fixed
- Sanity conditions for classes
- Object - not part of the class table
- All necessary classes are defined
- No cycles in the subtyping relation
- induced by the class table
14FJ class declaration examples
15FJ expression examples
16FJ syntax subtyping rules
17FJ auxiliary functions
18FJ expression typing
19FJ expression typing
20FJ evaluation rules
21FJ results
22Topics of Discussion
- Programming Languages (PLs) and
- Formal Models
- Case study
- Java - Featherweight Java (FJ)
- Extension
- Generic Java (1.5 beta)
- Featherweight Generic Java (FGJ)
- Some properties compositionality ...
- Related work
23Compositional compilation
- Polymorphic Bytecode Compositional Compilation
for Java-like Languages - D. Anacona
- S. Drossopoulou
- F. Damiani
- E. Zucca
24Separate compilation motivation
- Why do we want these properties?
- modularity
- safety
25Separate compilation
Used fragments
fragment
compile
link
Used fragments
fragment
compile
fragment
compile
fragment
26Java-like languages clash of philosophy
- Separate compilation -gt byte-code reflects
compilation environment - Dynamic linking -gt byte-code does not reflect
compilation environment - no (compilation execution) environment
- no (final globally) compiled application
- type-safety through runtime verification
- Example
- E m(B x) return x.f1.f2
- CEnv1 B C f1 C E f2
- -gt mdB1 E m(B x) return xB.f1 CC.f2 E
- CEnv2 B D f1 D F f2 -gt
- -gt mdB2 E m(B x) return xB.f1 DD.f2 F
27Compositionality
- Compositional analysis
- analyze source code fragments separately
- put them together
- finish analysis of the whole without reanalyzing
the fragments - Compositional compilation
- typecheck source code fragments separately
- -gt generate corresponding binaries
- link together fragments whose mutual constraints
are satisfied, without reinspecting the code
28Compositional compilation IDEA
- Compile fragments separately
- Generate
- bytecode with type variables
- constraints gt relate the type variables
- Put the constraints together (particular order)
- Solve the constraints gt substitution
- Put the bytecode together
- Apply the substitution
- Done!
29Compositional compilation
- How good is it?
- We are not sure yet, but it looks promising.
- My work
- Try to apply it for FGJ.
30Topics of Discussion
- Programming Languages (PLs) and
- Formal Models
- Case study
- Java - Featherweight Java (FJ)
- Extension
- Generic Java (1.5 beta)
- Featherweight Generic Java (FGJ)
- Some properties compositionality ...
- Related work
31 Generic Java
- Version 1.5 beta
- Parametric polymorphism
- Uses the standard JVM
- Backward Forward compatibility with old code.
32FGJ class declaration examples
33FGJ term examples
34Homogeneous vs Heterogeneous polymorphism
35Generic Java (GJ)
- No explicit type arguments to a generic method
- parsing problem
- e.mltA,Bgt(e) ? e.mltA, Bgt(e)
- Performs parameter inference has a least type
36Featherweight Generic Java (FGJ)
- FJ extended with generic classes
- Not a subset of GJ requires type arguments to
generic methods - Not concerned with parameter inference
37FGJ syntax subtyping rules
38FGJ auxiliary functions
39FGJ
40FGJ
41FGJ expression typing
42FGJ expression typing
43FGJ evaluation rules
44FGJ results
45Topics of Discussion
- Programming Languages (PLs) and
- Formal Models
- Case study
- Java - Featherweight Java (FJ)
- Extension
- Generic Java (1.5 beta)
- Featherweight Generic Java (FGJ)
- Some properties compositionality ...
- Related work
46Related work
- Types and Programming Languages by B.C.Pierce
- Featherweight Java A Minimal Core Calculus for
Java and GJ by Atsushi Igarashi, Benjamin C.
Pierce, Philip Wadler - GJ Specification by Gilad Bracha, Martin
Odersky, David Stoutamire, Philid Wadler - Bringing Genericity to Java by David W. Dunham
- Polymorphic Bytecode Compositional Compilation
for Java-like Languages by D. Anacona, S.
Drossopoulou, F. Damiani, E. Zucca