36
11th Nov 2004 PLDI 2004 1 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

11th Nov 2004PLDI 20041 Region Inference for an Object-Oriented Language Wei Ngan Chin 1,2 Joint work with Florin Craciun 1, Shengchao Qin 1,2, Martin

Embed Size (px)

Citation preview

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

5

Core-Java

6

Region-Annotated Core-Java

region types, parameters, constraints, letreg

7

Inferring for Class

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.

9

List Example

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.

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<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.

18

(Field) Region SubtypingOur 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

p1 p2

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

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.