diff options
-rw-r--r-- | Notes/todo.txt | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/Notes/todo.txt b/Notes/todo.txt index 7041c8b9..edc0074e 100644 --- a/Notes/todo.txt +++ b/Notes/todo.txt @@ -18,12 +18,28 @@ TODO: - Refactor parse to use a consume model lexer - Optimise optimise (and typecheck) - Complete structed C codegen +- Switch MIR to be SSA (or have a SSA form) +- MIR restructure specified in MIR-PackedLValue.txt + - Designed to remove pointer chasing when doing MIR analyis (and save space) ## Smaller changes - Only generate destructors if needed (removes C warnings) - Cache specialisation tree - Dependency files from mrustc - Partally done, not complete +- Replace all std::string-s with RcString (saves memory) + - Also use a string interning pool to de-duplicate identical strings (which + will be common) + - Copies of strings are relatively common (path copies) +- Delete HIR after MIR generation +- Use a more space-efficient (and readable) MIR LValue debug output + - e.g. `_0**.1#2` for Downcast(2, Field(1, Deref(Deref(Local(0))))) + - Will simplify reading of debug, and reduce the size of required debug + output + - Trailing dereference might be confusing with multiply operator? +- Cache referenced items for each function in `Trans Enumerate` + - Should reduce the impact of large generic functions being walked every + time they're used with a new type set. ## Optimisations @@ -32,4 +48,9 @@ TODO: - Dead assignment removal (Delete `<val> = Use(<val>)` - Tuple destructure removal - Spot `#1 = (...,)`, `#2 = (#1).n` where #1 is Write-once, borrow-none +- Remove useless borrows (remove write-once &T lvalues if they're never used by + value - only used via deref) + +<!-- vim: ft=markdown +--> |