Releases: timfennis/andy-cpp
Releases · timfennis/andy-cpp
🚀 v0.3.0 — Bytecode VM
The interpreter has been rewritten from a tree-walk evaluator to a bytecode-compiled stack-based VM, delivering 2–4x speedups across the board.
What's new
- Bytecode compiler and stack-based VM replace the tree-walk interpreter
disassembleCLI subcommand to inspect generated bytecode- The
ackermannbenchmark no longer overflows the stack
Performance
| Benchmark | v0.2.1 | v0.3.0 | Speedup |
|---|---|---|---|
| fibonacci | 318.0 ms | 80.1 ms | 4.0x |
| sieve | 439.4 ms | 125.2 ms | 3.5x |
| closures | 248.5 ms | 78.6 ms | 3.2x |
| perlin | 216.5 ms | 67.5 ms | 3.2x |
| pi_approx | 103.8 ms | 32.3 ms | 3.2x |
| quicksort | 192.0 ms | 75.2 ms | 2.6x |
| map_ops | 74.7 ms | 28.7 ms | 2.6x |
| hof_pipeline | 84.8 ms | 36.7 ms | 2.3x |
| matrix_mul | 133.1 ms | 67.0 ms | 2.0x |
v0.2.1
What's new
Features
- Tuple vectorization for arithmetic operators — e.g.
(1,2) + (3,4)=(4,6) - LSP inlay hints for variable and function return types
max_by_keyadded to stdlib- For-loop variable type inference from sequence element type
serde,rand, andregexare now optional stdlib features- Friendly error and configurable path for the VSCode extension
Bug fixes
- Fix recursive function calls failing in the static analyser
- Fix REPL analyser state corruption on analysis error
- Fix op-assign not using default value on maps with defaults
- Fix parser crash on unexpected end of input in list comprehension
- Fix duplicate parameter names in function declarations
Refactoring
- Extracted
ndc_lexer,ndc_parser,ndc_stdlib, andndc_coreinto standalone crates - Migrated test suite to plain
.ndcfiles with// expect-output:directives - Isolated
miettetondc_bin - Fix hardcoded version string in CLI
v0.2.0
This is the version of the interpreter that I used for Advent of Code 2025, marking the end of the second year of the project. Notable additions since v0.1.0:
- JSON encode/decode
- Scalar broadcasting for tuple operations (e.g.
(1,2) + (5,3)) - Crypto module with MD5 and SHA1 support
- Operators as first-class functions
- Basic LSP with type signature hints
- Early static type inference system
continuekeyword (thanks Brian Janssen!)- New stdlib functions: chunks, repeat, atan2, locate, is_empty
- Codebase split into multiple crates
v0.1.0
This release is the culmination of the first year of working on this project and it's the version of the interpreter that I used for the final puzzles of Advent of Code 2024. It's not meant to be used by anyone but just as a simple milestone of what I have reached in the first year. Hopefully there will be a v0.2.0 release 1 year from now when I complete Advent of Code 2025.