Is a programming language with STRONG ABSTRACTION from the details of the computer. The first really widespread high-level language was Fortran, a machine independent development of IBM’s earlier autocode systems.
Machine languages deal with (focus on efficiency)
- registers, memory, addresses, call stacks;
high-level languages deal with (focus on usability)
- variables, arrays, objects, boolean expressions, subroutines and functions, loops, threads, locks, etc..
1) Interpreted languages are read and then executed directly (NO COMPILATION). A program called an interpreter reads EACH PROGRAM STATEMENT following the program flow, DECIDES WHAT to do, and does it. A hybrid of an interpreter and a compiler will compile the statement into machine code and execute that. The MACHINE CODE (object code) is then DISCARDED, to be interpreted anew if the line is executed again. Interpreters are commonly the simplest implementations and they need both source code and interpreter living on the running system.
2) Compiled languages are transformed into an excecutable form before running.
Machine code generation: some compilers COMPILE source code directly into MACHINE CODE or OBJECT CODE.
Intermediate representations: a language is COMPILED to an INTRMEDIATE REPRESENTATION or BYTE CODE (saved for later execution without the need to re-read the source file). Virtual machines that execute byte code directly or transform it further into MACHINE CODE. have hidden the distinction between intermediate representations and truly compiled languages.
3) Trans-compiled languages may be translated into a lower-level programming language for which native code compilers are already widely available. The C programming language is a common target for such translators. In Eiffel, the “Translated” process is referred to as Trans-compiling or Trans-compiled, and the Eiffel compiler as a Transcompiler.
NOTE: Java shows the difficulty of trying to apply these labels to languages, rather than to implementations; Java is compiled to bytecode and the bytecode is subsequently executed by either interpretation (in a JVM) or compilation (typically with a just-in-time compiler such as HotSpot, again in a JVM)