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.