Assemblers, compilers and interpreters

Translators - usually included within programming software - convert high-level code into machine code. Translators are assemblers, interpreters or compilers.


'An assembler translates assembly language into machine code. Assembly language is a low-level language written in mnemonics that closely reflects the operations of the CPU.

Diagram showing how the assembler translates assembly language into machine-code


An interpreter translates code into machine code, instruction by instruction - the CPU executes each instruction before the interpreter moves on to translate the next instruction. Interpreted code will show an error as soon as it hits a problem, so it is easier to debug than compiled code.

An interpreter does not create an independent final set of source code - source code is created each time it runs. Interpreted code is slower to execute than compiled code.

Interpreted languages include JavaScript, PHP, Python and Ruby. Interpreted languages are also called scripting languages. These are ideal for using within dynamic web applications. They are used for client-side and server-side coding, as they are small programs that are executed within the browser.


A compiler translates the whole program into machine code before the program is run. It can be difficult to test individual lines of compiled code compared to interpreted languages as all bugs are reported after the program has been compiled.

The machine code is saved and stored separately to the high-level code. Compilation is slow but machine code can be executed quickly.

Java and C++ are compiled programming languages. Java is a high-level programming language which is compiled to produce bytecode which is then interpreted by a virtual machine (VM). Bytecode is code which is compiled and can then be interpreted.

Jackson Gabbard explains how Facebook uses compilers