VERSION 0.1.0
IN PROGRESS:
- WASM SUPPORT
1. Allow Nimix to compile with no_std
2. update Sandpit to support single threaded/no_std mode
3. remove std usages from nilang
4. nimix update
4.1. make it support being a global allocator
4.2. have 2 modes linux allcoator, or wasm allocator
5. Add Wasm bindgens for JS
6. add a JS wrapper for WASM blob
7. static or dynamic loading of script files?
BACKLOG:
- BUG: some symbols should not be intrinsic
- LSP
- FFI
- dynamic & static linking of .so files
OPTIMIZATION/REFACTOR BACKLOG:
- add benchmarking
- strength reduction for mod/mult/div by powers of 2
- const locals for maps and lists
- move span to its own module
- GC updates:
- GcVecMut
- goal is to make it so that every call does not require a new callframe to
be allocated
- this update should be a big speed up by dramatically reducing number of
allocations
- there is some bugs around GcVec still
- string internment
- Memory SSA
- Jump threading pass
- Loop Invariant Code Motion
- Peephole pass
- AST pass
- JIT?
GOALS
- complete AOC 2025 with this language [TODO]
- learn about compilers and interpreters [IN PROGRESS]
- have fun [IN PROGRESS]
- make a game! [TODO]
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.