nilang 0.4.0

A scripting language interpreter for Advent of Code
Documentation
VERSION 0.4.0

IN PROGRESS:
- No Std Support
  [x] Update Nimix to compile with no std
  [x] Update Sandpit to compile with no std
    [x] multi threaded and single threaded modes
  [ ] Update Nilang to compile with no std
    - [x] Convert std usages to core where possible
    - [ ] Brainstorm: When in no std what happens to operations that require std
      - [ ] What happens when running repl?
      - [ ] What happens when trying to load a file?
      - [ ] What happens when trying to print
      - [ ] What happens when trying to read

BACKLOG:
- FFI
- WASM

OPTIMIZATION/REFACTOR BACKLOG:
- add benchmarking
- strength reduction for mod/mult/div by powers of 2
- const locals for maps and lists
- "super operators" ie Add Immediate
- String Internment
- Memory SSA
- Jump Threading
- Loop Invariant Code Motion
- Peephole pass
- AST pass?
- JIT?

GOALS
- complete AOC 2025 with this language!
- learn about compilers and interpreters
- have fun

DECEMBER -> COMPLETE AOC
NOVEMBER
OCTOBER
- added string interpolation
- push and pop operators
- unary operators
- list intrinsic
- auto binding of functions with "self" arg
- for loops

SEPTEMBER
- added backtraces
- re-worked how errors are displayed
- added tests for error messages

AUGUST
- changed how intrinsic functions work
- reorganized some code
- added more tests and examples

JULY
- made an initial draft of intrinsic functions to add
- added partial functions
- implemented top level intrinsic functions
- implemented num intrinsics
- rough draft of importing/exporting

JUNE
- ran first program, and many more
- added intrinsic functions
- added 'pretty' runtime errors
- added lists, strings, closures, & hash maps, and more!
- ran some successful concurrent GC tests
- added global variables

MAY
- dead code elimination
- global value numbering pass 
- register allocation
- first draft of bytecode
- tac updates: 
  - var -> vreg (much smaller!)
- testing via golden files
- beginning to draft out runtime/vm

APRIL
- implemented cfg creation from tac
- implemented converting cfg to ssa form
- added boolean shortcircuiting
- symbol map can convert 2 ways
- completed escape dfa
- cfg printing and graph vizualization

MARCH
- refactored the lexer to be much more functional
- completely redesigned the parser by using parser combinators
  - this gave a huge improvement in readability
- started redesign of the tac generator


THE BEFORE TIMES
- I was working on the garbage collector, Sandpit, and its accompanying
  allocator, Nimix. Development on that I think lasted around 4 or 5 months and
  was slower going as I was still newer to Rust and there was lots more unsafe
  code to wrangle in those crates.