rené castillo björn bollensdorff analysetechniken in der softwaretechnik ss 2007 featherweight...

22
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

Upload: wilhelmine-schiedel

Post on 05-Apr-2015

104 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: René Castillo Björn Bollensdorff Analysetechniken in der Softwaretechnik SS 2007 Featherweight Java Inside every large language is a small language struggling

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

Page 2: René Castillo Björn Bollensdorff Analysetechniken in der Softwaretechnik SS 2007 Featherweight Java Inside every large language is a small language struggling

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

Page 3: René Castillo Björn Bollensdorff Analysetechniken in der Softwaretechnik SS 2007 Featherweight Java Inside every large language is a small language struggling

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

Page 4: René Castillo Björn Bollensdorff Analysetechniken in der Softwaretechnik SS 2007 Featherweight Java Inside every large language is a small language struggling

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

Page 5: René Castillo Björn Bollensdorff Analysetechniken in der Softwaretechnik SS 2007 Featherweight Java Inside every large language is a small language struggling

Analysetechniken in der Softwaretechnik SS 2007

René Castillo Björn Bollensdorff

5 mögliche Ausdrücke

• Objektinstanzierung• Methodenaufruf• Feldzugriff• Casting• Variablenzugriff

Programmstruktur

Page 6: René Castillo Björn Bollensdorff Analysetechniken in der Softwaretechnik SS 2007 Featherweight Java Inside every large language is a small language struggling

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

Page 7: René Castillo Björn Bollensdorff Analysetechniken in der Softwaretechnik SS 2007 Featherweight Java Inside every large language is a small language struggling

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

Page 8: René Castillo Björn Bollensdorff Analysetechniken in der Softwaretechnik SS 2007 Featherweight Java Inside every large language is a small language struggling

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

Page 9: René Castillo Björn Bollensdorff Analysetechniken in der Softwaretechnik SS 2007 Featherweight Java Inside every large language is a small language struggling

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

Page 10: René Castillo Björn Bollensdorff Analysetechniken in der Softwaretechnik SS 2007 Featherweight Java Inside every large language is a small language struggling

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

Page 11: René Castillo Björn Bollensdorff Analysetechniken in der Softwaretechnik SS 2007 Featherweight Java Inside every large language is a small language struggling

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

Page 12: René Castillo Björn Bollensdorff Analysetechniken in der Softwaretechnik SS 2007 Featherweight Java Inside every large language is a small language struggling

Analysetechniken in der Softwaretechnik SS 2007

René Castillo Björn Bollensdorff

Java S Syntax

Regeln

Page 13: René Castillo Björn Bollensdorff Analysetechniken in der Softwaretechnik SS 2007 Featherweight Java Inside every large language is a small language struggling

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

Page 14: René Castillo Björn Bollensdorff Analysetechniken in der Softwaretechnik SS 2007 Featherweight Java Inside every large language is a small language struggling

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

Page 15: René Castillo Björn Bollensdorff Analysetechniken in der Softwaretechnik SS 2007 Featherweight Java Inside every large language is a small language struggling

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

Page 16: René Castillo Björn Bollensdorff Analysetechniken in der Softwaretechnik SS 2007 Featherweight Java Inside every large language is a small language struggling

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

Page 17: René Castillo Björn Bollensdorff Analysetechniken in der Softwaretechnik SS 2007 Featherweight Java Inside every large language is a small language struggling

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

Page 18: René Castillo Björn Bollensdorff Analysetechniken in der Softwaretechnik SS 2007 Featherweight Java Inside every large language is a small language struggling

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

Page 19: René Castillo Björn Bollensdorff Analysetechniken in der Softwaretechnik SS 2007 Featherweight Java Inside every large language is a small language struggling

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

Page 20: René Castillo Björn Bollensdorff Analysetechniken in der Softwaretechnik SS 2007 Featherweight Java Inside every large language is a small language struggling

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

Page 21: René Castillo Björn Bollensdorff Analysetechniken in der Softwaretechnik SS 2007 Featherweight Java Inside every large language is a small language struggling

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

Page 22: René Castillo Björn Bollensdorff Analysetechniken in der Softwaretechnik SS 2007 Featherweight Java Inside every large language is a small language struggling

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