fun> Fun - Bytecode Format (Overview)
Reference for the bytecode format (split out from internals for convenience).
This document summarizes the Fun bytecode format. For deep VM details, see internals.md.
Goals
- Compact representation for fast loading and dispatch
- Stable header with room for versioning
File layout (typical)
- Header
- Magic number / signature
- Format version
- Flags (endianness, feature bits)
- Offsets to sections
- Constants table
- Literals: numbers, strings, compound constants
- Code section
- Functions/procedures with instruction streams
- Line/column mapping (optional for debugging)
- Auxiliary tables
- Imports/exports, names, debug info (optional)
Instructions
- Fixed-size or small-variant opcodes grouped by domain (math, logic, stack, call, control flow, etc.).
- Operands encoded inline following the opcode (width varies by instruction).
Versioning and compatibility
- The header’s version field allows the VM to refuse or translate older/newer formats.
- Keep additions backward-compatible when possible by appending sections or flags.

