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 Whats 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 dont 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)