The term for a machine (or computing system) that is designed for and intended to be used only as software within another machine. A virtual machine has a defined interface and behavior within its environment. This interface is often, (but not necessarily) implemented using Bytecode, which the virtual machine interprets as its own instructions.
Virtual machines are distinguished from Programming Languages by virtue of being active Actors? that provide the environment or context for the programs that they run, while a programming language is a static entity, with a runtime environment or interpreter being required to actually use the programs.
Interpreters are in fact VMs, and may be implemented by on-the-fly translation to another lower-level VM, and so on until you reach one machine that might be less virtual.
Reasons for having VMs, Intermediate Languages, Abstract Syntax Trees, etc.
- Optimization, Partial Evaluation, Just-In-Time Compilation, Supercompilation
- Faster loading from disk (e.g. Python .pyc/.pyo files) or over networks (e.g. Java bytecode)
- Portability without open-source... Protect proprietary code from unsophisticated users
- Reviews of Virtual Machines.