What Is An "Interpreted" Language?
Tags: healthydebate, discuss
Published: 2019-09-01 21:39:19

---
title: What Is An "Interpreted" Language?
published: true
description: Let's see if we can shed some light on this.
tags: healthydebate, discuss
---

There seems to be a considerable amount of debate about what defines an interpreted language.

My view is pretty cut-and-dry:

* A **compiled language** is one that is *primarily* compiled to machine code which is executed natively by the CPU on most standard hardware (Intel, AMD, ARM, etc.) **C**, **C++**, and **Ada** are three examples of this.

* An **interpreted language** is one that is *primarily* executed either as source code or bytecode through a dedicated virtual machine. **Python**, **Ruby**, and **Java** are three examples of this.

It should be understood that, in theory, if not in unconvential practice, any compiled language can *also* be run as source or bytecode in a virtual machine; conversely, any interpreted language *can* be theoretically converted to machine code.

(Mind you, I'm not really invested in defending my viewpoint. I want to see what everyone else thinks, and why.)

# A Few Definitions

Just to keep us on topic, instead of descending into the pedantic word-mincing that sometimes occurs in these sorts of discussions, let's use these as our common definitions.

**Even if you think these are "slightly off", please just roll with this to make the core topic accessible to everyone.** If you need to use a different term, be sure to define it.

Remember, not everyone has a vast academic background in computer science!

* **Assemble** — to convert source code, bytecode, or object code into machine code. (Contrast with *compile*.)

* **Assembler** — produces machine code (assembly code).

* **Binary file** — an executable file containing machine code.

* **Bundled executable** — an executable file containing both code and a virtual machine.

* **Bytecode** — Code which is intended primarily to efficiently provide direct instructions to a virtual machine, rather than to be human-readable. (Contrast with *source code*, *machine code* and *object code*.)

* **Central Processing Unit [CPU]** — the physical piece of hardware on the computer in question which is responsible for executing instructions in the form of machine code.

* **Code** — catch-all term that can include *source code*, *machine code*, *bytecode*, and *object code*.

* **Compile** — to convert code to source code in another language, to bytecode, or to object code. (Contrast with *assemble*.)

* **Compiler** — converts code to either source code in another language, or to bytecode. (Contrast with *assembler*.)

* **Executable file** — a file containing either source code, bytecode, or machine code, but which can be "executed" directly on the operating system. (In the case of bytecode, it may invoke a virtual machine as part of its execution.)

* **Interpreter** — see *virtual machine [VM]*.

* **(Programming) Language** — a complete set of syntax and grammar, in which source code is written.

* **Machine code** — assembly language code, in the "flavor" of assembly native to the physical CPU on the computer in question. (Contrast with *bytecode* and *object code*.)

* **Object code** — "intermediary" code which is not intended to be executed directly (contrast with *bytecode*), but is converted by the assembler into machine code. (Borrowed from C/C++ terminology; goes by other names in other languages.)

* **Source code** — code which is intended primarily to be readable to humans. (Contrast with *bytecode*, *object code*, and *machine code*.)

* **(CPU) Virtualizer** — a piece of software which is intended primarily to emulate a CPU, but which executes the same machine code a CPU would. (Contrast with *virtual machine* and *CPU*.) [I know I'm flubbing the vocabulary, but I want to make sure we don't confuse the two; they're not the same in this topic.]

* **Virtual machine [VM]** or **interpreter** — a piece of software which interprets and executes instructions from bytecode or source code. Examples include the Java JVM and the Python interpreter. (Contrast with *(CPU) Virtualizer* and *CPU*.)

# Ground Rules

***Be polite!*** We're here to debate ideas, not people.