Implementing Higher-Level Languages Quick tour of programming - - PowerPoint PPT Presentation

implementing higher level languages
SMART_READER_LITE
LIVE PREVIEW

Implementing Higher-Level Languages Quick tour of programming - - PowerPoint PPT Presentation

Implementing Higher-Level Languages Quick tour of programming language implementation techniques. From the Java level to the C level. Ahead-of-time compiler compile time C source x86 assembly x86 machine x86 C compiler code code code


slide-1
SLIDE 1

Implementing Higher-Level Languages

Quick tour of programming language implementation techniques. From the Java level to the C level.

slide-2
SLIDE 2

Ahead-of-time compiler

2

C source code C compiler x86 assembly code x86 machine code x86 computer

Data Output

x86 assembler x86 machine code

compile time run time

Figures for compilers/runtime systems adapted from slides by Steve Freund.

slide-3
SLIDE 3

3

Typical Compiler

Source Program Lexical Analyzer Syntax Analyzer Semantic Analyzer Intermediate Code Generator Code Optimizer Code Generator Target Program

Analysis Synthesis

slide-4
SLIDE 4

4

Interpreter

Data Output

Source Program

Interpreter = virtual machine

slide-5
SLIDE 5

6

Compilers... that target interpreters

Java bytecode Java Virtual Machine

Data Output

Java source code Java Compiler Java bytecod e

slide-6
SLIDE 6

8

Interpreters... that use compilers.

Target Program Virtual Machine

Data Output

Source Program Compiler

slide-7
SLIDE 7

9

JIT Compilers and Optimization

Java bytecode bytecode interpreter

Data Output

just-in-time compiler

Performance Monitor

Java source code javac

  • HotSpot JVM
  • Jikes RVM
  • SpiderMonkey
  • v8
  • Transmeta
  • ...

JVM

bytecode

x86 machine code

slide-8
SLIDE 8

Data in Java

Arrays

Every element initialized to 0 or null Immutable length field Since it has this info, what can it do?

int array[5]:

4 20 5 00 00 00 00 00

C Java

24 ?? ?? ?? ?? ??

Data Representation in Java

slide-9
SLIDE 9

Data in Java

Arrays

Every element initialized to 0 or null Immutable length field Bounds-check every access.

int array[5]:

4 20 5 00 00 00 00 00

C Java

24 ?? ?? ?? ?? ??

Data Representation in Java

Bounds-checking sounds slow, but: 1. Length is likely in cache. 2. Compiler may store length in register for loops. 3. Compiler may prove that some checks are redundant.

slide-10
SLIDE 10

Data in Java

Characters and strings

16-bit Unicode Explicit length, no null terminator

the string ‘CS 240’:

43 \0 1 4 16 53 20 32 34 30 6 00 43 00 53 00 20 00 32 00 34 00 30 7

C: ASCII Java: Unicode

Data Representation in Java

slide-11
SLIDE 11

Data structures (objects) in Java

C: programmer controls layout, inline vs. pointer. Java: objects always stored by reference, never stored inline.

C Java struct rec { int i; int a[3]; struct rec *p; }; class Rec { int i; int[] a = new int[3]; Rec p; … }

i a p 4 16 24 i a p 4 8 16 int[3] 4 16 3

Data Representation in Java

struct rec *r = malloc(...); struct rec r2; r->i = val; r->a[2] = val; r->p = &r2; r = new Rec(); r2 = new Rec(); r.i = val; r.a[2] = val; r.p = r2;

slide-12
SLIDE 12

Pointers/References

Pointers in C can point to any memory address References in Java can only point to [the starts of] objects

And can only be dereferenced to access a field or element of that object

C struct rec { int i; int a[3]; struct rec *p; }; struct rec* r = malloc(…); some_fn(&(r.a[1])) //ptr

i a p 4 8 16 int[3] 4 16 3

x Java class Rec { int i; int[] a = new int[3]; Rec p; } Rec r = new Rec(); some_fn(r.a, 1) // ref, index

i a p 4 16 24

Data Representation in Java

r r

slide-13
SLIDE 13

Java objects

21

class Point { int x; int y; Point() { x = 0; y = 0; } boolean samePlace(Point p) { return (x == p.x) && (y == p.y); } String toString() { return "(" + x + "," + y + ")"; } } constructor fields methods

slide-14
SLIDE 14

Java objects

For each class, compiler maps: field signature à offset (index) vtable pointer : points to per-class virtual method table (vtable)

For each class, compiler maps: method signature à index samePlace: 0 toString: 1

23

x y

code:Point.samePlace()

Point class vtable q Point object Point object

vtable pointer

code:Point.toString()

p x y

vtable pointer

code:Point()

slide-15
SLIDE 15

Implementing dynamic dispatch

Point p = new Point(); return p.samePlace(q); Point* p = calloc(1,sizeof(Point)); p->header = ...; p->vtable = Point_vtable; Point_constructor(p); return p->vtable[0](this=p, q);

Java: what happens (pseudo code):

q x y

code:Point.samePlace()

Point class vtable q Point object Point object

vtable pointer

code:Point.toString()

p x y

vtable pointer

code:Point()

slide-16
SLIDE 16

Subclassing

How do we access superclass pieces?

fields inherited methods

Where do we put extensions?

new field new method

  • verriding method

class ColorPoint extends Point{ String color; boolean getColor() { return color; } String toString() { return super.toString() + "[" + color + "]"; } }

slide-17
SLIDE 17

code:ColorPoint.toString() code:ColorPoint.getColor()

Point object ColorPoint object x vtable y x vtable y color

code:Point.samePlace()

Point vtable ColorPoint vtable

code:Point.toString()

Point p = ???; return p.toString(); return p.vtable[1](p);

Java: what happens (pseudo code):

dynamic (method) dispatch