What is the difference between a compiler and an interpreter?
In simple terms, both are used to translate code to another programming language but being on lower-level. Meaning: the target languange is often low-level languange. Example: compiling Java class (.java file) to bytecode (.class file) or compiling / interpreting bytecode to machine code.
But what are the differences?
- a program is being compiled as a whole
- compiler is creating an executable module that can be run multiple times
- it often concerns areas of code that are planned to be frequently executed
- compilation takes place before program runs (it creates an artifact that is run only after that)
- hence we often speak about “compile time”
- compilation may include code-optimization process
- owing to that, the executable module (result of the compilation) can use less system resources
- takes more time
- limited to some part of a program - the part that is needed in a given moment
- takes less time
- may be reproduced frequently, but it is rather related to one-timer code
- does not include code optimization - as optimization is a time-consuming process
- takes place when program / script is running (during runtime)
I found this easy-to-understand explanation in a 20-years-old book: “Informatyka. Wirtualna podróż w świat systemów i sieci komputerowych” (2002) by Mirosław Hajder, Heorhii Loutski and Wiesław Stręciwilk. It is still an up-to-date knowledge source for computer programmers. Some chapters are very easy, some others contain a lot of mathematics, formulas and computer science theory. Overall, a nice introduction into several areas of computer science.