Compilers and Interpreters

advertisement

Compilers and Interpreters
Translation to machine language
• Every high level language needs to be translated to machine code
• There are different ways to do it
• Two main ways are compilers and interpreters
• What’s the difference?
• Compilers are more thorough, generate faster executables and the executable
is easier to distribute
• Interpreters are more dynamic, are easier to use in the development stage of
a program
A compiler
• Compilers are more thorough
• When they translate source code to machine code (object code) they
translate (ideally) the entire program
• If they encounter a syntax error, they report it but they also try to continue
the translation process
• Compiling a buggy program might cause hundreds of error messages
(compilers are easily confused!)
• Programmers learn to fix the first one reported then try another compile
• When a program is successfully compiled, there exists a stand-alone
file which has the executable code in it, ready to run by giving it to
the CPU
Interpreters, on the other hand,
• Interpreters are more “dynamic”
• They translate a statement at a time, then hand the resulting machine code to
the CPU which executes it
• Then they translate the next statement of the program, give it to the CPU
which executes it
• And this process continues until the program is over OR a syntax error is
encountered
• The executable code is not saved in a runnable form, it is generated
on the fly and mostly discarded when the program is done
• The FIRST syntax error the interpreter runs into ends the program
execution process right there. No other code is translated at all.
Distributing programs
• A compiled program has an exe file, which can run on any computer
that has the right CPU – the computer does not have to have the
compiler application installed
• An interpreted program NEEDS the interpreter available to run, so if
you give a copy of your program to a friend, they will need to get
Python also in order to run your program
Speed of execution
• Compiled programs have complete executable files, they don’t need
any more translation – they run fast
• Interpreted programs need to have the interpreter available and they
will be translated every time the program is executed – they are
slower
Implications for Python
• In an interpreted program, if a statement is not executed, it is not
translated
• Which means if there is a syntax error in the program, it will not be
detected until that particular part is executed
• Which means TESTING is very important!
• Example: a function definition in the program has a syntax error in it,
but the function is not called when the programmer is testing the
whole program – that error will NOT be detected
• So you must be thorough enough in your testing to make sure all your
code gets executed at least one time!
More implications for Python
• There are languages which have only one or the other, not both, so
you use what you have
• Python is usually interpreted, the interpreter is given away for free
• There are Python compilers available
• Most programmers like Python for being quick to write a program in
• They use Python to develop the program, then compile it to distribute
it (or sometimes convert it to a compiled language like C for speed)