460 likes | 560 Views
Formal Models for Programming Languages. FJ and FGJ. Alexandra Stefan. Topics of Discussion. Programming Languages (PLs) and Formal Models Case study: Java - Featherweight Java (FJ) Extension: Generic Java (1.5 beta) – Featherweight Generic Java (FGJ)
E N D
Formal Models for Programming Languages FJ and FGJ Alexandra Stefan
Topics 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
PLs & 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.
PLs & 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?
PLs & 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
Formal model • Design choice:completeness or compactness? • more complex is more unwieldy • too parsimonious is useless • trade-off
Formal model • Examples: • Lambda calculus • Java: FJ, FGJ, Javas (Javase), Javalight, ClassicJava, … • C: C
Topics 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
Topics of Discussion • Programming Languages (PLs) and Formal Models • Case study: • Java - Featherweight Java (FJ)
Case study: FeatherweightJava(FJ) • Proposed by Igarashi, Pierce, and Wadler in 1999. • Models Java’s type system. • Minimalcore calculus • “Favors compactness over completeness almost obsessively” (It hardly resembles Java!) • no assignment -> 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)
FJ:What can be done with it? • It allows easy proofs for type safety for FJ • FJ’s main application is to model extensions of Java • FGJ • Featherweight Open Java • Inner classes
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
Topics 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
Compositionalcompilation “Polymorphic Bytecode: Compositional Compilation for Java-like Languages” D. Anacona S. Drossopoulou F. Damiani E. Zucca
Separate compilation: motivation • Why do we want these properties? • modularity • safety
Separate compilation Used fragments fragment compile link Used fragments fragment compile fragment compile fragment
Java-like languages ‘clash of philosophy’ • Separate compilation -> byte-code reflects compilation environment • Dynamic linking -> 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 …} -> mdB1 = E m(B x){ return x[B.f1C][C.f2E]} CEnv2 = … B {… D f1; …} … D {… F f2 …} -> -> mdB2 = E m(B x){ return x[B.f1D][D.f2F]}
Compositionality • 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 -> generate corresponding binaries • link together fragments whose mutual constraints are satisfied, without reinspecting the code
Compositional compilation: IDEA • Compile fragments separately • Generate • bytecode with type variables • constraints –> relate the type variables • Put the constraints together (particular order) • Solve the constraints –> substitution • Put the bytecode together • Apply the substitution • Done!
Compositional compilation • How good is it? • We are not sure yet, but it looks promising. • My work: • Try to apply it for FGJ.
Topics 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
Generic Java • Version: 1.5 beta • Parametric polymorphism • Uses the standard JVM • Backward & Forward compatibility with old code.
Generic Java (GJ) • No explicit type arguments to a generic method: parsing problem • “e.m<A,B>(e’)” “e.m<A”, “B>(e’)” • Performs parameter inference: has a least type
Featherweight Generic Java (FGJ) • FJ extended with generic classes • Not a subset of GJ: requires type arguments to generic methods • Not concerned with parameter inference
Topics 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
Related 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