0% found this document useful (0 votes)
54 views14 pages

ACM 1998 Workshop On Java For High-Performance Network Computing

This document summarizes Erik Demaine's work on converting C pointers to Java references. It discusses the challenges in converting between C's flexible pointers and Java's more restricted references. It outlines Demaine's approach of first doing a general conversion and then optimizing for common cases like converting C arrays to Java arrays. The approach involves static analysis to determine the best representation for each pointer and potentially duplicating functions to optimize for different pointer types.

Uploaded by

postscript
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PS, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
54 views14 pages

ACM 1998 Workshop On Java For High-Performance Network Computing

This document summarizes Erik Demaine's work on converting C pointers to Java references. It discusses the challenges in converting between C's flexible pointers and Java's more restricted references. It outlines Demaine's approach of first doing a general conversion and then optimizing for common cases like converting C arrays to Java arrays. The approach involves static analysis to determine the best representation for each pointer and potentially duplicating functions to optimize for different pointer types.

Uploaded by

postscript
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PS, PDF, TXT or read online on Scribd
You are on page 1/ 14

ACM 1998 Workshop on

Java for High-Performance Network Computing

CONVERTING C POINTERS
TO JAVA REFERENCES

Erik Demaine
Department of Computer Science
University of Waterloo, Waterloo, Ontario, Canada
[email protected]

http://daisy.uwaterloo.ca/~eddemain/papers/Java98

February 28, 1998


Converting C Pointers to Java References Erik Demaine Slide: 1

OUTLINE
 Motivation
{ C pointers versus references
 Related work
 Our work
{ General conversion
{ Various improvements
 Conclusion
Converting C Pointers to Java References Erik Demaine Slide: 2

MOTIVATION
 C is popular
{ Lots of code written in it
 Developers want to extend their programs
{ Exploit features of new programming languages
{ Need to convert code to the language
 Example:
{ Port program to Java for demonstration on WWW
 C and Java have similar syntax
 Main diculty: converting pointers into references
Converting C Pointers to Java References Erik Demaine Slide: 3

C POINTERS
 C pointers are overly exible
 Can represent
{ Basic value
{ Array
{ Structure
{ Element of array or structure
{ Byte
 Can be
{ Cast into integers or pointers of other types
{ Split into pieces and later rejoined
{ O set by arbitrary amounts (pointer arithmetic)
{ Compared for inequality
 Unnecessary exible
{ Dangerous
{ Dicult to debug
Converting C Pointers to Java References Erik Demaine Slide: 4

REFERENCES
 Examples:
{ Java
{ Modula, Pascal
{ Perl 5
{ Fortran 90
{ ML
 Limited access to references themselves
{ Assign to a reference
{ Compare references for equality
 Often no dereference operation
{ Use of reference is implicitly about target
 Safer and simpler
Converting C Pointers to Java References Erik Demaine Slide: 5

RELATED WORK
 \C++ to Java"
{ c2j (1996): written in C++
{ c2j++ (1997): written in Java
{ Ignore pointers: remove all dereferences
{ Often correct for objects and pointers to objects
{ Never correct for arrays
Converting C Pointers to Java References Erik Demaine Slide: 6

OUR WORK
 Speci cally on converting pointers to references
{ Focus: Scienti c applications
{ Example: SuperLU (1997): 15,000 lines of C
 Start with general conversion
 Optimize common cases
{ Crucial to implement arrays eciently
{ Goal: Convert C arrays into Java arrays
{ Similarly, convert C structures into Java objects
Converting C Pointers to Java References Erik Demaine Slide: 7

GENERAL CONVERSION
 Could build C runtime environment at user level
{ Create duplicate representation of heap
{ Hence understand pointers to objects within heap
Block

Pointer Structure Int

 Can navigate through heap


{ Can do pointer arithmetic
{ Supports untyped pointers
 Cannot use binary representations of values
{ No union types
{ Cannot cast between integers and pointers
EXAMPLE OF GENERAL CONVERSION

main () f main () f
f g
int a[4] = 1,2,3,0 ; f
Int[] a = new Int (1), new Int (2),
n
printf ("%d n", sum (a)); g
new Int (3), new Int (0) ;
g Struct a = new Struct (a );
int sum (int *a) f System.out.println (sum (new Pointer (a)));
int s = 0; g
while (*a != 0) int sum (Pointer a) f
s += *(a++); int s = 0;
return s; while (((Int) a.target).val != 0)f
g s += ((Int) a.target).val;
a.increment ();
g
return s;
g
EXAMPLE OF IMPROVED CONVERSION

main () f main () f
f
int a[4] = 1,2,3,0 ; g f
int[] a = 1,2,3,0 ; g
n
printf ("%d n", sum (a)); System.out.println (sum (a));
g g
int sum (int *a) f int sum (int[] a) f
int s = 0; int a i = 0;
while (*a != 0) int s = 0;
s += *(a++); while (a[a i] != 0)
return s; s += a[a i++];
g return s;
g
Converting C Pointers to Java References Erik Demaine Slide: 10

OPTIMIZATIONS
 Indexable arrays: most general pointer representation
{ Common to use C pointer as \alias" to element of array
{ Convert C pointer into Java array plus integer index
C Java
int a[5]; 7 ! int[] a = new int[5];
int *p = a; 7! int[] p = a;
int p i = 0;
p++; 7 ! p i++;

*p = 5; 7! p[p i] = 5;
p[2] = 10; 7! p[p i+2] = 10;

f (p); 7 ! f (p, p i);


f (a); 7! f (a, 0);

 Arrays: if index is always zero, discard it


{ Maps C arrays to Java arrays
 Call by reference: pointer always to basic value
{ Either
2 Array of size one
2 Object with one entry
{ Typically objects more ecient
{ May vary in the future
Converting C Pointers to Java References Erik Demaine Slide: 11

STATIC ANALYSIS
Pointer Desired conversion
To element of an array Array plus index
Representing an array Array
To a basic value Object (or possibly 1-element array)

 Statically analyze code to determine best guarantees on kinds of


pointers
 Major unknown is pointers passed to functions
Converting C Pointers to Java References Erik Demaine Slide: 12

FUNCTION COPYING
 At call side, should have better \bound" on kind of pointer
 For each type of call (mix of pointer kinds), duplicate function
{ Optimize each function copy by exploiting known bounds on
pointer kinds
void f (Int i) f
i.val = 5;
g
void f (int *i) f void f (int[] i) f
*i = 5; ! i[0] = 5;
g g
void f (int[] i, int i i) f
i[i i] = 5;
g
C Java
int i; 7 ! Int i;
f (&i); 7! f (i);

int a[5]; 7 ! int[] a = new int[5];


f (a); 7! f (a);

int *p = &a[2]; 7! int[] p = a;


int p i = 2;
f (p); 7! f (p, p i);

 Worst case: Quadratic code expansion


Converting C Pointers to Java References Erik Demaine Slide: 13

CONCLUSION
 Can achieve complete and automatic C-to-Java conversion
{ Provides a general framework
 Optimizations improve \common" cases
{ Arrays ! arrays
{ Structures ! objects
{ Occasional \bad" case should not a ect other cases
 The better written the code, the better the conversion
 Similar ideas apply to any pointer-to-reference conversion
{ For example, C to Fortran 90
 Future work:
{ Implement C-to-Java converter
{ Extend to C++ as source language

You might also like