2024-11-21 10:13:12 +11:00
|
|
|
# TODO
|
|
|
|
|
|
|
|
- [x] Remove Dictionaries
|
|
|
|
- [x] Make imports expect just a string, rather than an entire expression
|
|
|
|
- [x] Remove Union types
|
|
|
|
- [x] Fix token locations
|
|
|
|
- [x] Make Return just a regular statement
|
|
|
|
- [x] `StructType.{args=...}` syntax
|
|
|
|
- [x] `[:ElementType, elements...]` syntax
|
2024-11-21 10:33:34 +11:00
|
|
|
- [x] Tuple element syntax `a.0, a.1`, instead of allowing arbitrary indices into the tuple. This will allow for easier typechecking for tuples
|
2024-11-21 11:00:49 +11:00
|
|
|
- [ ] Proper error reporting with locations
|
2024-11-21 10:13:12 +11:00
|
|
|
- [ ] Make Typechecking a step before anything is interpreted
|
|
|
|
- [ ] Implicit `[elements...]`/`.{args=...}`/`.Member(values...)` syntax
|
|
|
|
- [ ] Destructring of tuples and structs
|
|
|
|
- `(a, b) = some_tuple;`
|
|
|
|
- `.{age=a, name=b} = some_struct;`
|
|
|
|
- [ ] `let` keyword to do runtime destructuring for tuples, structs, lists
|
|
|
|
- `assert let (0, value) = some_tuple;`
|
|
|
|
- `assert let .{a=0, b=age} = some_struct;`
|
|
|
|
- `if let .Some(value) = result { ... }`
|
|
|
|
- `case [first, second | rest] { ... }`
|
|
|
|
- Here `let` is not used, but it does the same thing as `if let`, just in a match context
|
|
|
|
- [ ] Compile the program to bytecode and interpret the bytecode instead
|
|
|
|
- [ ] Compile the bytecode to assembly
|