Skip to content

Releases: timfennis/andy-cpp

🚀 v0.3.0 — Bytecode VM

21 Mar 20:29
e9a5365

Choose a tag to compare

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
  • disassemble CLI subcommand to inspect generated bytecode
  • The ackermann benchmark 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

20 Mar 12:13
601c499

Choose a tag to compare

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_key added to stdlib
  • For-loop variable type inference from sequence element type
  • serde, rand, and regex are 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, and ndc_core into standalone crates
  • Migrated test suite to plain .ndc files with // expect-output: directives
  • Isolated miette to ndc_bin
  • Fix hardcoded version string in CLI

v0.2.0

20 Mar 09:19
e112950

Choose a tag to compare

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
  • continue keyword (thanks Brian Janssen!)
  • New stdlib functions: chunks, repeat, atan2, locate, is_empty
  • Codebase split into multiple crates

v0.1.0

30 Dec 20:38
45146ee

Choose a tag to compare

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.