1 / 46

Formal Models for Programming Languages

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)

Télécharger la présentation

Formal Models for Programming Languages

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Formal Models for Programming Languages FJ and FGJ Alexandra Stefan

  2. 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

  3. 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.

  4. 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?

  5. 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

  6. Formal model • Design choice:completeness or compactness? • more complex is more unwieldy • too parsimonious is useless • trade-off

  7. Formal model • Examples: • Lambda calculus • Java: FJ, FGJ, Javas (Javase), Javalight, ClassicJava, … • C: C

  8. 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

  9. Topics of Discussion • Programming Languages (PLs) and Formal Models • Case study: • Java - Featherweight Java (FJ)

  10. 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)

  11. 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

  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

  14. FJ: class declaration examples

  15. FJ: expression examples

  16. FJ: syntax & subtyping rules

  17. FJ:auxiliary functions

  18. FJ: expression typing

  19. FJ: expression typing

  20. FJ: evaluation rules

  21. FJ: results

  22. 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

  23. Compositionalcompilation “Polymorphic Bytecode: Compositional Compilation for Java-like Languages” D. Anacona S. Drossopoulou F. Damiani E. Zucca

  24. Separate compilation: motivation • Why do we want these properties? • modularity • safety

  25. Separate compilation Used fragments fragment compile link Used fragments fragment compile fragment compile fragment

  26. 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]}

  27. 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

  28. 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!

  29. Compositional compilation • How good is it? • We are not sure yet, but it looks promising. • My work: • Try to apply it for FGJ.

  30. 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

  31. Generic Java • Version: 1.5 beta • Parametric polymorphism • Uses the standard JVM • Backward & Forward compatibility with old code.

  32. FGJ: class declaration examples

  33. FGJ: term examples

  34. Homogeneous vs Heterogeneouspolymorphism

  35. 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

  36. 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

  37. FGJ: syntax & subtyping rules

  38. FGJ:auxiliary functions

  39. FGJ

  40. FGJ

  41. FGJ: expression typing

  42. FGJ: expression typing

  43. FGJ: evaluation rules

  44. FGJ: results

  45. 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

  46. 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

More Related