0% found this document useful (0 votes)
144 views27 pages

BOOTSTRAPPING

BOOTSTRAPPING IN COMPILER. TELLS ABOUT INTERPRETER, COMPILER AND IDEA OD HOW BOOTSTRAPPING IS PERFORMED IN COMPILER

Uploaded by

Sundeep Chopra
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 PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
144 views27 pages

BOOTSTRAPPING

BOOTSTRAPPING IN COMPILER. TELLS ABOUT INTERPRETER, COMPILER AND IDEA OD HOW BOOTSTRAPPING IS PERFORMED IN COMPILER

Uploaded by

Sundeep Chopra
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 PPT, PDF, TXT or read online on Scribd
You are on page 1/ 27

Compiler, Interpreter, and Bootstrapping

Motivation:
When we are asked to write a

Compiler for a complex source language or Interpreter for a low level intermediate language or Emulator for a new virtual machine Our strategy?
3/24/2004 COSC4301 assignment 3 1

Motivation continued
Strategy: o machine code VS high level language o scratch VS improve existing code We introduce some basic concepts and give some examples to make stuff clear.
3/24/2004 COSC4301 assignment 3 2

Terminology
Q: Which programming languages play a role in this picture?

input

translator

output

source program (expressed in the source language)


3/24/2004

expressed in the implementation language


COSC4301 assignment 3

target language

Tombstone Diagram
Program P implemented in L P L Translator implemented in L S -> T L

Machine implemented in hardware

Language interpreter in L M L

3/24/2004

COSC4301 assignment 3

Tombstone diagram: Combination rules

P M M

P S

ok
P L M

S -> T M M

P T

ok

P L
Wrong!
COSC4301 assignment 3

S -> T M

Wrong!
5

3/24/2004

Compiler Basics
Host compiler and Cross compiler:

3/24/2004

COSC4301 assignment 3

Compiler Basics continued


Two stage compiler:
Output of the first compiler is the input of the second one

Compile a translator implemented in high level language:

3/24/2004

COSC4301 assignment 3

Interpreter

A language process accept source code and executes it directly

3/24/2004

COSC4301 assignment 3

Interpreters versus Compilers


Each faction hold the inverted set of advantages against the other. This part covered in previous presentation. A comprise exists between two extremes to achieve reasonable compilation and acceptable run time performance. Define an intermediate language more high-level than machine code => easier to compile to more low-level than source language => easy to implement as an interpreter
3/24/2004 COSC4301 assignment 3 9

Interpretive Compilers
Hybrid of compilation and interpretation Pascal/Java 2-stage compiler is good examples compile source into machine independent low-level representation P-code/Byte code interpret P-code through machine dependent interpreter/JVM

Machine independent
3/24/2004

Machine dependent
COSC4301 assignment 3 10

Portable Compilers

Given 2 kits, which one is more portable? k1 Java->JVM M JVM M

k2

Java->JVM JVM

JVM M

For ideal portability, compilers are

. developed in modules for easy exchange.


. implemented in high level language.
3/24/2004 COSC4301 assignment 3 11

Portable Compilers continued


Suppose we have following modules (high level). We have no way to run Pascal program, why?

3/24/2004

COSC4301 assignment 3

12

Portable Compilers continue


We need a interpreter

re-implement

We can expect a fairly easy implantation using high level language implementation
3/24/2004 COSC4301 assignment 3 13

Portable Compilers continued


Now, we can run our Pascal program smoothly

Note here interpreter plays a dual role in both compiling and execution.
3/24/2004 COSC4301 assignment 3 14

Bootstrapping
a number of techniques which rely on partial/inefficient compiler version to create a full/better version often compiling a translator expressed in its own language

3/24/2004

COSC4301 assignment 3

15

Full Bootstrapping
A full bootstrap is necessary when we are building a new compiler from scratch. Example: We want to implement an Ada compiler for machine M. We dont currently have access to any Ada compiler (not on M, nor on any other machine). Idea: Ada is very large, we will implement the compiler in a subset of Ada and bootstrap it from a subset of Ada compiler in another language. (e.g. C)
3/24/2004 COSC4301 assignment 3 16

Full Bootstrapping continued


Step 1: build a compiler for Ada-S in another language v1 Ada-S ->M C Step 1a: build a compiler (v1) for Ada-S in another language. v1 Ada-S ->M C

3/24/2004

COSC4301 assignment 3

17

Full bootstrapping continued


Step 1b: Compile v1 compiler on M v1 v1 Ada-S ->M Ada-S->M C->M C M M This compiler can be used for M bootstrapping on machine M
but we do not want to rely on it permanently!

3/24/2004

COSC4301 assignment 3

18

Full Bootstrapping continued


Step 2a: Implement v2 of Ada-S compiler in Ada-S v2 Ada-S ->M Ada-S Step 2b: Compile v2 compiler with v1 compiler v2 v2 v1 Ada-S->M Ada-S ->M M Ada-S Ada-S ->M M We are now no longer dependent M on the availability of a C compiler!
3/24/2004 COSC4301 assignment 3 19

Full Bootstrapping continued


Step 3a: Build a full Ada compiler in Ada-S v3 Ada->M Ada-S Step 3b: Compile with v2 compiler v3 Ada->M v2 Ada-S Ada-S ->M M M
3/24/2004

v3 Ada->M

From this point on we can maintain the compiler in Ada. Subsequent versions v4,v5,... of the compiler in Ada and compile each with the the previous version.
20

COSC4301 assignment 3

Half Bootstrapping
We discussed full bootstrapping which is required when we have no access to a compiler for our language at all. Q: What if we have access to an compiler for our language on a different machine HM but want to develop one for TM ?

We have
Ada->HM HM Ada->HM Ada

We want
Ada->TM TM

Idea: we can use cross compilation from HM to TM to bootstrap the TM compiler


3/24/2004 COSC4301 assignment 3 21

Half Bootstrapping continued


Step 1: Implement Ada->TM compiler in Ada Ada->TM Ada

Step 2: Compile on HM
Ada->TM Ada->TM HM Ada Ada->HM Cross compiler: running on HM but emits TM code

HM HM
3/24/2004 COSC4301 assignment 3 22

Half Bootstrapping continued


Step 3: Cross compile our TM compiler. Ada->TM Ada->TM Ada Ada->TM TM HM HM

DONE!

From now on we can develop subsequent versions of the compiler completely on TM


3/24/2004 COSC4301 assignment 3 23

Bootstrap to improve efficiency


The efficiency of programs and compilers: Efficiency of programs: - memory usage - runtime Efficiency of compilers: - Efficiency of the compiler itself - Efficiency of the emitted code

Idea: We start from a simple compiler (generating inefficient code) and develop more sophisticated version of it. We can then use bootstrapping to improve performance of the compiler.
3/24/2004 COSC4301 assignment 3 24

Bootstrap to improve efficiency


We have Ada->Mslow Ada Step 1 Ada-> Mslow Mslow We want Ada->Mfast Ada

Ada->Mfast Ada->Mfast Ada Ada-> Mslow Mslow Mslow M

3/24/2004

COSC4301 assignment 3

25

Bootstrap to improve efficiency

Step 2

Ada->Mfast Ada->Mfast Ada Ada-> Mfast Mfast Mslow M

Fast compiler that emits fast code!

3/24/2004

COSC4301 assignment 3

26

Conclusion
To write a good compiler you may be writing several simpler ones first You have to think about the source language, the target language and the implementation language. The work of a compiler writer is never finished, there is always version 1.x and version 2.0 and
3/24/2004 COSC4301 assignment 3 27

You might also like