230 likes | 383 Views
Featherweight Java. „Inside every large language is a small language struggling to get out …“ T.Hoare nach Igarashi, Pierce, Wadler. Gliederung. Motivation Featherweight Java Programmstruktur Reduktion Regeln(Syntax, Reduktion, Typisierung) Stupid Cast Beweis der Typsicherheit
E N D
Featherweight Java „Inside every large language is a small language struggling to get out …“ T.Hoare nach Igarashi, Pierce, Wadler 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 Analysetechniken in der Softwaretechnik SS 2007 Gliederung
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 Analysetechniken in der Softwaretechnik SS 2007 Motivation
Wozu Featherweight Java? • Finden von Typproblemen im Java-Kern • Beweisen der Typsicherheit des Java-Kerns • Basis für Erweiterungen • plastische Darstellung durch compilierbaren Code Analysetechniken in der Softwaretechnik SS 2007 Motivation
5 mögliche Ausdrücke • Objektinstanzierung • Methodenaufruf • Feldzugriff • Casting • Variablenzugriff Analysetechniken in der Softwaretechnik SS 2007 Programmstruktur
Was ist in FJ möglich • gegenseitige rekursive Klassendefinitionen • Methoden überschreiben • Methodenrekursion mit Hilfe von this • Vererbung Analysetechniken in der Softwaretechnik SS 2007 Programmstruktur
Was ist in FJ nicht möglich • Zuweisungen • Interfaces • Überladen • Aufrufe von super • Null-Pointer • Primitive Datentypen Analysetechniken in der Softwaretechnik SS 2007 Programmstruktur
Was ist in FJ nicht möglich • abstrakte Methodendeklarationen • Shadowing von Feldern • Zugriffskontrolle (public, private, etc.) • Exceptions • Fortgeschrittene Techniken Analysetechniken in der Softwaretechnik SS 2007 Programmstruktur
FJ Programm class A extends Object { A() {super();} } class B extends Object { B() {super();} } Analysetechniken in der Softwaretechnik SS 2007 Programmbeispiel
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); } } Analysetechniken in der Softwaretechnik SS 2007 Programmbeispiel
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()) Analysetechniken in der Softwaretechnik SS 2007 Reduktion
Java S Syntax Analysetechniken in der Softwaretechnik SS 2007 Regeln
FJ Syntax L ::= class C extends D { Cf; K M } K ::= C(Cf) {super(f); this.f=f;} M ::= C m(Cx) { return e;} e ::= x | e.f | e.m(e) | new C(e) | (C)e Analysetechniken in der Softwaretechnik SS 2007 Regeln
FJ Vererbung C <: C C <: D D <: E C <: E class C extends D {...} C <: D Analysetechniken in der Softwaretechnik SS 2007 Regeln
┝ e0 : D D <: C ┝ (C)e0 : C ┝ e0 : D C <: D C D ┝ (C)e0 : C Casting Regeln Upcast Downcast Analysetechniken in der Softwaretechnik SS 2007 Stupid Cast
Object Upcast Downcast Stupid Cast B A (A)(Object)new B() (A)new B() Analysetechniken in der Softwaretechnik SS 2007 Stupid Cast
┝ e0 : D D <: C ┝ (C)e0 : C ┝ e0 : D C <: D C D ┝ (C)e0 : C Stupidcast ┝ e0 : D C <: D D <: C stupid warning ┝ (C)e0 : C Stupid Cast Upcast Downcast Analysetechniken in der Softwaretechnik SS 2007 Stupid Cast
fields(C) = Cf (new C(e)).fi ei Reduktion new Pair(new A(), new B()).snd new B() Analysetechniken in der Softwaretechnik SS 2007 Regeln
weitere Theoreme : • Progress • Reduction preserves Cast-Safety • Progress of Cast-Save Programs Beweis der Typsicherheit Preservation: Wenn ┝ t : C und t t‘, dann ┝ t‘ : C‘ für C‘ <: C Analysetechniken in der Softwaretechnik SS 2007 Typsicherheit
Featherweight Generic Java (FGJ) • Featherweight Java um Generics erweitert • FGJ auf FJ zurückgeführt • somit ist FGJ auch typsicher Analysetechniken in der Softwaretechnik SS 2007 FGJ
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 Analysetechniken in der Softwaretechnik SS 2007 Schlussfolgerungen
Quellennachweise • Igarashi, A., Pierce, B.C. and Wadler 2002. 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 1997. Java is Type Safe – Probably, London Analysetechniken in der Softwaretechnik SS 2007 Quellennachweise