René Castillo Björn Bollensdorff Analysetechniken in der Softwaretechnik SS 2007 Featherweight...

Post on 05-Apr-2015

105 views 1 download

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