11th Nov 2004PLDI Region Inference for an Object-Oriented Language Wei Ngan Chin 1,2 Joint work with Florin Craciun 1, Shengchao Qin 1,2, Martin Rinard 3 1 National University of Singapore 2 Singapore-MIT Alliance 3 MIT
2 Background Problem: objects have different lifetimes garbage collection can be expensive One Solution: Use regions with different lifetimes Avoid dangling references. Previous Works : Region checkers for Java [DIKU98], Real-Time Java : [Boyapati et al PLDI03], C [Cyclone PLDI02]. Our Goal: auto. region inference for OO paradigm
3 Assumptions Lexically-Scoped Regions: LIFO behaviour construct : letreg r in e No-Dangling References: Regions of fields must outlive the region of its enclosing object. top (younger) bottom (older)
4 Main Contributions Region Inference for Core-Java Constraint-Based Type System. Region Polymorphism & Region Subtyping Handles Inheritance, Overriding, Downcast Implementation
5 Core-Java
6 Region-Annotated Core-Java region types, parameters, constraints, letreg
7 Inferring for Class
8 Key Principles : Classes Region type : c h r 1,…, r n i r 1 : (region for current object of this type) r 2,…,r n (regions for components/fields) r k º r 1, 8 k 2 2..n (no dangling references) First region is special. Keep regions of components distinct.
9 List Example
10 Key Principles : Methods Region polymorphism from the region types of parameters and output t mn h r * i ((t v) * ) where rc e r * captures region polymorphism Keep region constraints of classes and methods separate.
11 Inference of Methods class invariant method precondition
12 Outline Background Key Principles Region Subtyping Region Inference Method Overriding + Downcast Experimental Results
13 No Region Subtyping [Boyapati et al PLDI03] supports class subtyping but not region subtyping
14 (Object) Region Subtyping concept from [Cyclone PLDI02] A variable location v::c can be passed an object of type c provided r s
15 Example Variables a and b are assigned to tmp. Without region subtyping, their regions are equal. With region subtyping, their regions may be distinct.
16 Problem – Recursive Fields Recursive nodes being forced into the same region Some programs permit recursive nodes to be in different regions …..
17 Example - Reynolds3 Escape Analysis [Deutsch:POPL97] allows the List(x,p) object to be build on runtime stack. This effect is equivalent to local region at each recursive call.
18 (Field) Region Subtyping Our Extension : Covariance for Read-Only Fields.
19 Outline Background Key Principles Region Subtyping Region Inference Method Overriding + Downcast Experimental Results
20 Region Inference Format of type inference rules Flow-insensitive but context sensitive. Modular inference according to dependency graph.
21 Inference Rule for Block rs: the set of regions that do not escape the block They are coalesced into a single localised region r
22 Example – Localised Region
23 Example – Localised Region
24 Example – Cyclic Structure p1p2
25 Outline Background Key Principles Region Subtyping Region Inference Overriding + Downcast Experimental Results
26 Method Overriding class B h r 1.. r n i extends A h r 1.. r m i where C B In class A: Y mn h r’ 1,..,r’ p i (X) where M A { } In class B: Y mn h r’ 1,..,r’ p i (X) where M B { } Function Subtyping Rule: Method Override Rule: C B Æ M A ) M B argumentresultselection
27 Override Conflict Resolution If method override rule do not hold for: C B M A M B Can strengthen C B, M A to C’ B, M’ A using: Until:C’ B Æ M’ A ) M B C B, M A, M B ` C’ B, M’ A
28 Downcast Safety In our framework : regions may be lost during upcast e.g.Object o = new Pair (…) lost regions must be recovered during downcast. e.g.Pair p = (Pair) o Key technique : maintain extra regions that were supposedly lost during upcasting! e.g.Object [r2,r3] p = new Pair (…) Solution : Flow analysis
29 Experiments Region annotation needed in 12% of the code. Comparable space reuse for all programs. Inference is as good as hand-annotation. On Olden benchmark, inference takes < 5s.
30 Concluding Remarks Automatic region inference for CoreJava. Support classes and methods with region polymorphism. Supports region subtyping. Supports OO features : class subtyping, method overriding, and downcast safety. Implementation
31 Future Work Better Lifetime Precision variable liveness analysis flow sensitivity via SSA treat null as a primitive value Memory Efficiency : Sized Regions + Reuse Extensions : Genericity + RTSJ
32 Inference Rule for Sequence Inference rule is flow-insensitive. Improvement possible via SSA.
33 Correctness
34 Example : Fixed-Point Analysis
35 Inference of Methods
36 Experiments Region inference is fast for large programs too. Our prototype was built using Glasgow Haskell Compiler.