One of the main differences between interpreted programs run on machines and compiled ones is their build process. A compiled interpreter is produced by the compiler, while an executable (literal) interpreter is produced by the compiler. The former type of interpreter is directly executable, while the latter is not. Since an executable program is able to run without modifications, it cannot possibly contain bugs. However, it may contain security defects due to the fact that an executable program is controlled by the user instead of just the compiler. Since compiled languages have been developed by compiling program languages as well, security flaws are practically impossible.
When it comes to interpreting or compiling a source code, there are two approaches that can be used. The first is compiling an interpreter in a stand-alone language, which is called “software as a service” (SaaS) application. The second is compiling a compiled language, such as C or Java, into an executable program through a host computer that supports runtime execution. Runtime libraries make it possible to execute a program written in one language without requiring access to the host computer’s memory. In this case, the language being translated is translated as a part of the host program’s runtime library, instead of as part of the source code.