summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Hodge <tpg@ucc.asn.au>2019-05-15 21:44:05 +0800
committerJohn Hodge <tpg@ucc.asn.au>2019-05-15 21:44:05 +0800
commitc4b5f0abb1b67e7f691c105841ce6e37fe2b0432 (patch)
treef8449e885bb2506b143f81cb70d8244e1e2ff0cf
parent0f59ded4389202468dd5bcb420724395afbfe1f7 (diff)
downloadmrust-c4b5f0abb1b67e7f691c105841ce6e37fe2b0432.tar.gz
Updates to TODO list
-rw-r--r--Notes/todo.txt21
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
+-->