Date post: | 17-Jan-2016 |
Category: |
Documents |
Upload: | cameron-stokes |
View: | 228 times |
Download: | 0 times |
11th Nov 2004 PLDI 2004 1
Region Inference for an Object-Oriented Language
Wei Ngan Chin1,2
Joint work with
Florin Craciun1, Shengchao Qin1,2, Martin Rinard3
1 National University of Singapore2 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
8
Key Principles : Classes
• Region type : chr1,…, rni
• r1 : (region for current object of this type)
• r2,…,rn (regions for components/fields)
• rk º r1, 8 k 2 2..n (no dangling references)
• First region is special.
• Keep regions of components distinct.
10
Key Principles : Methods
• Region polymorphism from the region types of parameters and output • t mn hr*i ((t v)*) where rc e• r* captures region polymorphism
• Keep region constraints of classes and methods separate.
12
Outline
• Background• Key Principles• Region Subtyping• Region Inference• Method Overriding + Downcast• Experimental Results
14
(Object) Region Subtyping
concept from [Cyclone PLDI02]
A variable location v::c<s,..> can be passed an object of type c<r,..> 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.
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
25
Outline
• Background• Key Principles• Region Subtyping• Region Inference• Overriding + Downcast• Experimental Results
26
Method Overriding
class Bhr1 .. rni extends Ahr1 .. rmi where CB
In class A: Y mnhr’1,..,r’pi (X) where MA { }
In class B: Y mnhr’1,..,r’pi (X) where MB { }
Function Subtyping Rule:
Method Override Rule: CB Æ MA ) MB
argument resultselection
27
Override Conflict Resolution
If method override rule do not hold for: CB MA MB
Can strengthen CB , MA to C’B , M’A using:
Until: C’B Æ M’A ) MB
CB, MA, MB ` C’B, M’A
28
Downcast Safety
• In our framework :• regions may be lost during upcast
e.g. Object<r1> o = new Pair<s1,s2,s3> (…)
• lost regions must be recovered during downcast.e.g. Pair<t1,t2,t3> p = (Pair) o
• Key technique : maintain extra regions that were supposedly lost during upcasting!
e.g. Object<r1>[r2,r3] p = new Pair<s1,s2,s3> (…)
• 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