Compilable: C, C++, Pascal
Interpretable: Visual Basic Script (VBScript), JavaScript, Python, PHP
Conditionally compilable: C# and the rest of the .Net languages, Java for Java-machine

A program in a programming language is first of all text. Text is human-readable and relatively easy to be processed by a computer because letters and other text characters in the computer are represented by integers, they are also called character codes. The program, which processes the text in a programming language and creates a sequence of instructions for the microprocessor is called a compiler. That is, the compiler translates numbers that humans perceive as text into other numbers that the computer perceives as microprocessor commands.

Languages that require a compiler are called compilers. To run such a program, it is not enough just to write it. It is necessary to run it through a compiler, to get an executable module, for example, in the Windows operating system is a file with the extension .exe, and only then run it.

This scheme, of course, did not suit everyone, and programmers invented languages that do not require a compiler. For these languages, text to microprocessor commands are translated inconspicuously right after you run a text program. However, to do this, the text program must be run under another ready-made program, called the Interpreter. The Interpreter does this invisible compilation. Languages that require an interpreter are called Interpreted languages.

The main difference between compiled languages and interpreted languages is the speed of execution of programs. It is said that programs written in compiled languages run faster than in interpreted ones. But the process of writing and testing the interpreted program is easier, because there is no need for the intermediate compilation step.

For some languages, such as C#, compilation is done in a special way in two steps. The point is that in the .Net environment, a C# program doesn’t become a microprocessor instruction set after compilation, but is converted into another intermediate language, CIL – Common Intermediate Language, (formerly called MSIL – Microsoft Intermediate Language) which is given to the .Net compiler for execution. This sequence of conversions from one language to another makes it possible to not worry about the type of microprocessor installed in the computer and gives more flexibility to the programs.

In a similar way, a TypeScript program first compiled into a text program, or as they say, into JavaScript code, which can then be executed by the JavaScript interpreter. This complication allows us to take advantage of the strict data typing and compile-time error catching that are available in TypeScript.