René Castillo Björn Bollensdorff Analysetechniken in der Softwaretechnik SS 2007 Featherweight...
-
Upload
wilhelmine-schiedel -
Category
Documents
-
view
103 -
download
1
Transcript of René Castillo Björn Bollensdorff Analysetechniken in der Softwaretechnik SS 2007 Featherweight...
Analysetechniken in der Softwaretechnik SS 2007
René Castillo Björn Bollensdorff
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
René Castillo Björn Bollensdorff
Gliederung
• Motivation• Featherweight Java Programmstruktur• Reduktion• Regeln(Syntax, Reduktion, Typisierung)• Stupid Cast• Beweis der Typsicherheit• Featherweight Generic Java (FGJ)• Schlussfolgerungen
Gliederung
Analysetechniken in der Softwaretechnik SS 2007
René Castillo Björn Bollensdorff
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
Analysetechniken in der Softwaretechnik SS 2007
René Castillo Björn Bollensdorff
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
Analysetechniken in der Softwaretechnik SS 2007
René Castillo Björn Bollensdorff
5 mögliche Ausdrücke
• Objektinstanzierung• Methodenaufruf• Feldzugriff• Casting• Variablenzugriff
Programmstruktur
Analysetechniken in der Softwaretechnik SS 2007
René Castillo Björn Bollensdorff
Was ist in FJ möglich
• gegenseitige rekursive Klassendefinitionen
• Methoden überschreiben• Methodenrekursion mit Hilfe von
this• Vererbung
Programmstruktur
Analysetechniken in der Softwaretechnik SS 2007
René Castillo Björn Bollensdorff
Was ist in FJ nicht möglich
• Zuweisungen• Interfaces• Überladen• Aufrufe von super• Null-Pointer• Primitive Datentypen
Programmstruktur
Analysetechniken in der Softwaretechnik SS 2007
René Castillo Björn Bollensdorff
Was ist in FJ nicht möglich
• abstrakte Methodendeklarationen• Shadowing von Feldern• Zugriffskontrolle (public, private,
etc.)• Exceptions• Fortgeschrittene Techniken
Programmstruktur
Analysetechniken in der Softwaretechnik SS 2007
René Castillo Björn Bollensdorff
FJ Programm
class A extends Object {
A() {super();}
}
class B extends Object {
B() {super();}
}
Programmbeispiel
Analysetechniken in der Softwaretechnik SS 2007
René Castillo Björn Bollensdorff
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
Analysetechniken in der Softwaretechnik SS 2007
René Castillo Björn Bollensdorff
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
Analysetechniken in der Softwaretechnik SS 2007
René Castillo Björn Bollensdorff
Java S Syntax
Regeln
Analysetechniken in der Softwaretechnik SS 2007
René Castillo Björn Bollensdorff
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
Analysetechniken in der Softwaretechnik SS 2007
René Castillo Björn Bollensdorff
FJ Vererbung
C <: C
C <: D D <: E
C <: E
class C extends D {...}
C <: D
Regeln
Analysetechniken in der Softwaretechnik SS 2007
René Castillo Björn Bollensdorff
Casting Regeln
┝ e0 : D D <: C
┝ (C)e0 : C
┝ e0 : D C <: D C D
┝ (C)e0 : C
Upcast
Downcast
Stupid Cast
Analysetechniken in der Softwaretechnik SS 2007
René Castillo Björn Bollensdorff
Stupid Cast
Downcast
Upcast
Object
B A
(A)(Object)new B() (A)new B()
Stupid Cast
Analysetechniken in der Softwaretechnik SS 2007
René Castillo Björn Bollensdorff
Stupid Cast
┝ e0 : D D <: C
┝ (C)e0 : C
┝ e0 : D C <: D C D
┝ (C)e0 : C
Upcast
Downcast
┝ e0 : D C <: D D <: C stupid warning
┝ (C)e0 : C
Stupidcast
Stupid Cast
Analysetechniken in der Softwaretechnik SS 2007
René Castillo Björn Bollensdorff
Reduktion
fields(C) = C f
(new C(e)).fi ei
new Pair(new A(), new B()).snd new B()
Regeln
Analysetechniken in der Softwaretechnik SS 2007
René Castillo Björn Bollensdorff
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
Analysetechniken in der Softwaretechnik SS 2007
René Castillo Björn Bollensdorff
Featherweight Generic Java (FGJ)
• Featherweight Java um Generics erweitert
• FGJ auf FJ zurückgeführt• somit ist FGJ auch typsicher
FGJ
Analysetechniken in der Softwaretechnik SS 2007
René Castillo Björn Bollensdorff
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
Analysetechniken in der Softwaretechnik SS 2007
René Castillo Björn Bollensdorff
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
Quellennachweise