Bytecode
Bytecode is an intermediate representation of a program that is typically produced by a compiler and executed by a virtual machine. It consists of a sequence of compact, platform‑independent instructions designed for efficient interpretation or just‑in‑time compilation. Bytecode bridges the gap between high‑level source code and machine code, enabling portability across different hardware architectures.
History
The concept of bytecode dates back to the 1970s, with early implementations such as the UCSD Pascal p‑code system, which used a portable intermediate language. The approach gained widespread prominence in the 1990s with the Java platform, where the Java Virtual Machine (JVM) executes Java bytecode. Shortly afterwards, Microsoft’s .NET Framework introduced the Common Intermediate Language (CIL), another form of bytecode executed by the Common Language Runtime. Many other languages, including Python, Ruby, and Erlang, compile to their own bytecode formats.
Features
- Platform independence – Bytecode can run on any system that provides a compatible virtual machine, abstracting away hardware differences.
- Compact size – Bytecode instruction sets are typically more compact than native machine code, reducing storage and transmission overhead.
- Security – Virtual machines often include a bytecode verifier that checks the code for type safety and other violations before execution.
- Optimization – Intermediate representations like bytecode allow runtime systems to apply optimizations, such as just‑in‑time compilation (JIT), adaptive optimization, or ahead‑of‑time compilation.
- Language neutrality – Multiple source languages can target the same bytecode format, enabling interoperability (e.g., Java, Scala, and Kotlin all compile to JVM bytecode).
Uses
Bytecode is employed in a wide range of systems:
- The Java Virtual Machine uses Java bytecode as its instruction set.
- The Common Language Runtime (CLR) executes Common Intermediate Language (CIL).
- The Python interpreter compiles source code into `.pyc` files containing Python bytecode.
- WebAssembly defines a binary instruction format that serves as a portable bytecode for the web.
- Smalltalk and many early object‑oriented systems relied on bytecode for dynamic execution.