René Castillo Björn Bollensdorff Analysetechniken in der Softwaretechnik SS 2007 Featherweight Java Inside every large language is a small language struggling to get out … T.Hoare nach Igarashi, Pierce, Wadler
René Castillo Björn Bollensdorff Analysetechniken in der Softwaretechnik SS 2007 Gliederung Motivation Featherweight Java Programmstruktur Reduktion Regeln(Syntax, Reduktion, Typisierung) Stupid Cast Beweis der Typsicherheit Featherweight Generic Java (FGJ) Schlussfolgerungen Gliederung
René Castillo Björn Bollensdorff Analysetechniken in der Softwaretechnik SS 2007 Was ist Featherweight Java ein funktionaler Java-Kern Reduktion auf das Wesentliche nur wenig umfangreicher als der - Kalkül Subset von Java und von Standard- Java compilierbar voll Turing-fähig Motivation
René Castillo Björn Bollensdorff Analysetechniken in der Softwaretechnik SS 2007 Wozu Featherweight Java? Finden von Typproblemen im Java-Kern Beweisen der Typsicherheit des Java- Kerns Basis für Erweiterungen plastische Darstellung durch compilierbaren Code Motivation
René Castillo Björn Bollensdorff Analysetechniken in der Softwaretechnik SS mögliche Ausdrücke Objektinstanzierung Methodenaufruf Feldzugriff Casting Variablenzugriff Programmstruktur
René Castillo Björn Bollensdorff Analysetechniken in der Softwaretechnik SS 2007 Was ist in FJ möglich gegenseitige rekursive Klassendefinitionen Methoden überschreiben Methodenrekursion mit Hilfe von this Vererbung Programmstruktur
René Castillo Björn Bollensdorff Analysetechniken in der Softwaretechnik SS 2007 Was ist in FJ nicht möglich Zuweisungen Interfaces Überladen Aufrufe von super Null-Pointer Primitive Datentypen Programmstruktur
René Castillo Björn Bollensdorff Analysetechniken in der Softwaretechnik SS 2007 Was ist in FJ nicht möglich abstrakte Methodendeklarationen Shadowing von Feldern Zugriffskontrolle (public, private, etc.) Exceptions Fortgeschrittene Techniken Programmstruktur
René Castillo Björn Bollensdorff Analysetechniken in der Softwaretechnik SS 2007 FJ Programm class A extends Object { A() {super();} } class B extends Object { B() {super();} } Programmbeispiel
René Castillo Björn Bollensdorff Analysetechniken in der Softwaretechnik SS 2007 FJ Programm class Pair extends Object { Object fst; Object snd; Pair(Object fst, Object snd) { super(); this.fst=fst; this.snd=snd; } Pair setfst(Object newfst) { return new Pair(newfst, this.snd); } Programmbeispiel
René Castillo Björn Bollensdorff Analysetechniken in der Softwaretechnik SS 2007 Reduktion new Pair(new A(), new B()).setfst(new B()); newfst new B() this new Pair(new A(), new B()) new Pair(newfst, this.snd) new Pair(new B(), new B()) Reduktion
René Castillo Björn Bollensdorff Analysetechniken in der Softwaretechnik SS 2007 Java S Syntax Regeln
René Castillo Björn Bollensdorff Analysetechniken in der Softwaretechnik SS 2007 FJ Syntax L ::= class C extends D { C f; K M } K ::= C(C f) {super(f); this.f=f;} M ::= C m(C x) { return e;} e ::= x | e.f | e.m(e) | new C(e) | (C)e Regeln
René Castillo Björn Bollensdorff Analysetechniken in der Softwaretechnik SS 2007 FJ Vererbung C <: C C <: D D <: E C <: E class C extends D {...} C <: D Regeln
René Castillo Björn Bollensdorff Analysetechniken in der Softwaretechnik SS 2007 Casting Regeln e 0 : D D <: C (C)e 0 : C e 0 : D C <: D C D (C)e 0 : C Upcast Downcast Stupid Cast
René Castillo Björn Bollensdorff Analysetechniken in der Softwaretechnik SS 2007 Stupid Cast Downcast Upcast Object BA (A)(Object)new B() (A)new B() Stupid Cast
René Castillo Björn Bollensdorff Analysetechniken in der Softwaretechnik SS 2007 Stupid Cast e 0 : D D <: C (C)e 0 : C e 0 : D C <: D C D (C)e 0 : C Upcast Downcast e 0 : D C <: D D <: C stupid warning (C)e 0 : C Stupidcast Stupid Cast
René Castillo Björn Bollensdorff Analysetechniken in der Softwaretechnik SS 2007 Reduktion fields (C) = C f (new C(e)).f i e i new Pair(new A(), new B()).snd new B() Regeln
René Castillo Björn Bollensdorff Analysetechniken in der Softwaretechnik SS 2007 Beweis der Typsicherheit Preservation: Wenn t : C und t t, dann t : C für C <: C Progress Reduction preserves Cast-Safety Progress of Cast-Save Programs weitere Theoreme : Typsicherheit
René Castillo Björn Bollensdorff Analysetechniken in der Softwaretechnik SS 2007 Featherweight Generic Java (FGJ) Featherweight Java um Generics erweitert FGJ auf FJ zurückgeführt somit ist FGJ auch typsicher FGJ
René Castillo Björn Bollensdorff Analysetechniken in der Softwaretechnik SS 2007 Schlussfolgerungen Featherweight Java ist typsicher stupid casts in Java eingeführt Typsicherheit auf Generics erweitert und bewiesen Fehler im Java-Compiler in bezug auf Generics gefunden Weiterhin erweiterbar Schlussfolgerungen
René Castillo Björn Bollensdorff Analysetechniken in der Softwaretechnik SS 2007 Quellennachweise Igarashi, A., Pierce, B.C. and Wadler Featherweight Java: A Minimal Core Calculus for Java and GJ,University of Tokyo, University of Pennsylvania, Avaya Labs Benjamin C. Pierce / Types and Programming/, MIT Press 2002.Drossopoulou, S., Eisenbach, S Java is Type Safe – Probably, London Quellennachweise