Vectorization: opt-in
If people want to make their own builtins, they can
- Define their own functions directly in CGR bytecode
- Use CGR as a library (wouldn't be able to take advantage of the runtime though)
- Make a plugin (Lua perhaps?)
The VM will have a program stack, where all operations will be done, as well as numbered variables, a la JVM.
### Data types:
- All-in-one number type covering rational complex numbers (that might be hard to implement, fall back to floating-point complex if anything)
- Strings
- Strict lists - constant access
- Lazy lists - should be interchangeable with strict lists
# Opcodes (alphabetically ordered please)
- `add` - TODO
- `goto [target: num]` - Unconditional jump to `target`
- `isinst [type: num]`, `x: any -> x, bool` - pushes `true` if `x` is `type`, `false` otherwise. Does not pop `x`
- `switch [value: num, target: num]* [default: num]?`, `x: num -> ()` - tries to match `num` to every `value`. For the first `value` that matches, the intepreter will jump to the corresponding `target`. If no `value` matches, it jumps to `default`.
- `typeof`, `x: any -> x, num` - pushes the type ID of `x`. Does not pop `x`