Sequence Traces for Object-Oriented Executions Carl Eastlund and - - PowerPoint PPT Presentation

sequence traces for object oriented executions
SMART_READER_LITE
LIVE PREVIEW

Sequence Traces for Object-Oriented Executions Carl Eastlund and - - PowerPoint PPT Presentation

Sequence Traces for Object-Oriented Executions Carl Eastlund and Matthias Felleisen Northeastern University 1 class Client { Object run () { new Server.request ()}} class Server { Token request () { new Token}} class Token {} new


slide-1
SLIDE 1

Sequence Traces for Object-Oriented Executions

Carl Eastlund and Matthias Felleisen Northeastern University

1

slide-2
SLIDE 2

class Client { Object run () { new Server.request ()}} class Server { Token request () { new Token}} class Token {} new Client.run ()

2

slide-3
SLIDE 3

(define client% (class object% (super-new) (define/public (run) (send (new server%) request)))) (define server% (class object% (super-new) (define/public (request) (new token%)))) (define token% (class object% (super-new))) (send (new client%) run)

3

slide-4
SLIDE 4

[run = (c) [request = (s) []] .request] .run

4

slide-5
SLIDE 5

Obj1 Client Obj2 Server Obj3 Token new Server call Obj2.request() new Token return Obj3

5

slide-6
SLIDE 6

Obj1 Client Obj2 Server Obj3 Token new Server call Obj2.request() new Token return Obj3 ? ? ? ? ?

6

slide-7
SLIDE 7

Obj1 Client Obj2 Server Obj3 Token new Server call Obj2.request() new Token return Obj3 new Server.request() ? ? ? ?

7

slide-8
SLIDE 8

Obj1 Client Obj2 Server Obj3 Token new Server call Obj2.request() new Token return Obj3 new Server.request() [].request() ? ? ?

8

slide-9
SLIDE 9

Obj1 Client Obj2 Server Obj3 Token new Server call Obj2.request() new Token return Obj3 new Server.request() [].request() [] ? ?

9

slide-10
SLIDE 10

Obj1 Client Obj2 Server Obj3 Token new Server call Obj2.request() new Token return Obj3 new Server.request() [].request() [] new Token ?

10

slide-11
SLIDE 11

Obj1 Client Obj2 Server Obj3 Token new Server call Obj2.request() new Token return Obj3 new Server.request() [].request() [] new Token []

11

slide-12
SLIDE 12

Two-Level Framework

12

slide-13
SLIDE 13

State = Pool,Stack,Ref,Action Object = static,Dynamic Stack = Ref, cont * Action = new Object; cont | inspect Ref; cont | get Ref.field; cont | set Ref.field := Value; cont | call Ref.method(Value *); cont | return Value | ERR

13

slide-14
SLIDE 14

init(program) = Pool,Stack,Ref,Action Pool, Stack, Ref, new Object; cont Pool[Ref' ! Object], Stack, Ref, resume(cont,Ref') Pool, Stack, Ref, call Ref'.method(Value *); cont Pool, cont,Ref Stack, Ref, invoke(Ref',Pool(Ref'),method,Value *) . . .

14

slide-15
SLIDE 15

static = class primitive = null cont = [] | { type x = cont; type x = e; * e } | (type) cont | (cont <: type) Ref | cont : class . fieldCJ | cont : class . fieldCJ = expr | . . .

15

slide-16
SLIDE 16

init(def * expr) = eval(expr) resume(cont,Value) = eval(cont[Value]) invoke(Ref, Object, method, Value *) = ... eval(...) ... eval({ type' x' = Value'; type x = expr; * expr'}) = eval({ type x = expr[x' := Value']; * expr'[x' := Value']}) eval({ expr }) = eval(expr) eval(Value) = return Value eval(cont[new class]) = new construct(class); cont . . .

16

slide-17
SLIDE 17

Type Soundness

17

slide-18
SLIDE 18

If init, invoke, and resume are total and produce appropriately typed outputs for their inputs, then for every program P of type T, either P diverges or init(P) * R and R : T. type : Value types

  • bjtype

: Object Types (subset of type) <: : Subtyping (partial order) fields : Fields of an objtype methods : Methods of an objtype metatype : Static record of an objtype

18

slide-19
SLIDE 19

Object Debugger

19

slide-20
SLIDE 20

Thank you.

20