260 likes | 268 Views
This paper introduces a type system that statically checks the observable behavior of objects, ensuring termination and handling exceptions in object-oriented programs.
E N D
An Exception Aware Behavioral Type System for Object-Oriented Programs CITI / Departamento de Informática Universidade Nova de Lisboa - Portugal Filipe Militãoand LuísCaires CoRTA 2009
TravelOrderClass class TravelOrder { void flight(){ … } void hotel(){ … } void buy(){ … } void cancel(){ … } string show(){ … } }
TravelOrderDocumentation /** * A TravelOrder requires the selection of * a flight and an hotel before it can be bought * or canceled. */
TravelOrderClass class TravelOrder { void flight(){ … } void hotel(){ … } void buy(){ … } void cancel(){ … } string show(){ … } } only available on specific situations can be called freely
Background • Increasing software complexity • Effort to eliminate bugs • Faster feedback on errors (static detection)
Objectives and Contributions • Statically check the externally observable behavior of objects (based on formal description) • Guarantee termination (reaches stop) • Exceptions (checked) • Linear ownership + Borrowing (call-by-ref) • Class body consistent with class behavior • Working prototype
Checking call sequences TravelOrder object flight(…) hotel(…) buy() . buy flight . hotel • Hidden internal state (like in regular expressions) • Tracks observable calls (i.e., the behavior), not states
What is a Behavioral Type? TravelOrder Type Type TravelOrder Behavior Behavioral void hotel() void flight() void order() void cancel() string show() 1stflight 2ndhotel 3rdbuy or cancel +
Describing the Behavior • What about “string show()” ? free / non-behavioral, can be called at any time... TravelOrder Behavior 1stflight 2ndhotel 3rdbuy or cancel • Regular expression-like protocol: flight . hotel . (buy + cancel)
TravelOrderClass class TravelOrder { void flight(){ … } void hotel(){ … } void buy(){ … } void cancel(){ … } string show(){ … } } usage flight.hotel.(buy+cancel)
Example let tin t = new TravelOrder(); t.flight(); t.show(); t.hotel(); if( … ) t.buy() else t.cancel() flight . hotel . stop ( buy + cancel )
The rest of this talk… • Introduction • Type System • Exceptions • Linear Ownership • Borrowing • Subtyping • Consistency check • Related work • Future work
Basic typing judgement expression environment (before) environment (after) type of expression
Sequence e0 e1 T0 T1 Will be lost!
Example (try branch) voidmethod(N#buy[Error: undo] v){ try v.buy() catch(Errorexcp) v.undo() } on Error{v undo } [Error: undo] v stop buy
Example (catch branch) voidmethod(N#buy[Error: undo] v){ try v.buy() catch(Errorexcp) v.undo() } on Error{v undo } undo v stop
Exceptions - throw expression produces compatible environment Runtime is behavior agnostic, so thrown object must be stopped Exception handler for N
Exceptions - try catch Try branch with new exception handler Catch branch restores old handler etry T throw “N” ecatch
Linear Ownership • Only one owner at a time* ( *unless the object was borrowed… ) let t0in let t1 in t0 = new TravelOrder(); t1 = t0 ; t1.flight(); t0.hotel() Type Error! t1 stop t0 flight. hotel.(buy+cancel)
Borrowing • Checking call-by-reference let tin t= new TravelOrder(); orderStuff(t); t.buy() voidorderStuff(TravelOrder#flight.hotelx) t flight.hotel. (buy+cancel) • Storing values requires ownedpermission
The rest of this talk… • Introduction • Type System • Exceptions • Linear Ownership • Borrowing • Subtyping • Consistency check • Related work • Future work
Subtyping • Structural subtyping • Requires compatible behavior • Subtype must accept same behavior as super… (flight+swim).hotel <: flight.hotel flight.hotel <: flight[Full: cancel].hotel
Consistency check • Server code must also obey protocols class ABC { usage a.b.c TravelOrdert; void a(){t = new TravelOrder();} void b(){t.flight(); } void c(){ t.buy(); } } Type Error!
Related work • Resource usage analysis (2002) Atsushi Igarashi and Naoki Kobayashi • Lightweight object specification with typestates (2007) Kevin Bierhoff and Jonathan Aldrich • Dynamic interfaces (2009) Vasco T. Vasconcelos, Simon Gay, AntónioRavara, Nils Gesbert, and Alexandre Z. Caldeira. • …
Future work • Concurrency
Questions? Filipe Militãoand LuísCaires • Paper: • Web site: An Exception Aware Behavioral Type System for Object-Oriented Programs yak prototype http://ctp.di.fct.unl.pt/yak/