Are the terms “Language Implementation”, “Runtime” and “Virtual Machine” synonymous? [on hold]


To describe the implementation of a dynamic programming language, I have seen the terms “Runtime” (e.g. Security transparency in the Python runtime), “Virtual Machine” (Python Virtual Machine (PVM), YARV (Yet another Ruby VM)) and “Interpreter” (Matz’s Ruby Interpreter) used. JavaScript also uses the word “Engine”.

IMO the word “Interpreter” strictly describes only part of a language implementation: that which steps through and executes bytecode. “Interpreter” excludes other parts of the implementation, such as a garbage collector.

Are the other terms, “Runtime”, “Virtual Machine” and “Engine” synonymous with the language implementation as a whole? Are these terms interchangeable?


Stack Overflow tries to stick to pragmatic questions as they pertain to code. For theory you might try the CS site or more open-ended discussion forums like /r/programming on Reddit or Quora.
This very question leads to a lot of controversy because most “interpreters” these days don’t actually interpret, they compile to byte-code and run that in a virtual machine. JavaScript has an interpreter mode, a bytecode mode, and a compiler mode, all within the same runtime, so these classical definitions and divisions are really not holding up well.