-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathtodo
More file actions
76 lines (65 loc) · 2.59 KB
/
todo
File metadata and controls
76 lines (65 loc) · 2.59 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
generics:
- ability to define polymorphic types - both via pointer and directly
- some way to store references inside variants to pass / return from functions
- decide what to do about affinity of type parameters
- support param type expectation of TypeParameterCall
- support multiple constraints on a type parameter
- support constraints that aren't a simple type ID
- actually check generic constraints in resolve_type_parameters
- don't allow existential generics
- syntax for providing generics without inferring them
standard library:
- some way of defining a stdlib that is available as an import path
- rewrite arrays to be a collection in stdlib
- rewrite dictionaries to be a collection in stdlib
- rewrite RCs to be a collection in stdlib
language-level collections:
- tuples
- boxes
- cells
- slices
interfaces:
- interface are something that is converted from references, not values
- self parameters for interfaces can only be passed by reference (otherwise linear IR doesn't work)
- when making the method -> function conversion, automatically take a reference if it's required
- interfaces can be structurally converted between each other
- interface conversion:
- checks return statements
- checks implicit returns due to the end of blocks
- check assignments
borrow checker and lifetimes:
- clone support
- can't dereference pointers to Move types
- drop:
- drop dicts
- drop strings (may require string buffer vs string view types?)
- drop nullables
- forbid user from calling destructors directly
- path support:
- allow disjoint borrows of collection indices
- allow reassignment of affine fields (currently they can't generate drops)
modules:
- modules can be indexed in a struct / variant literal context
- can you index the self module outside import statements?
top-level statements:
- disallow top-level return
- decide what happens when more than one file in a package defines top-level statements
- decide what happens when a dependent package has top-level statements
type validation:
- prevent references being stored in collections
strings:
- string manipulation
- interpolation literals
- multiline literals
import support:
- alias imports
- allow imports to include a list of things
boolean operators:
- short-circuiting boolean evaluation
- equality / inequality:
- applicable to nullable values
wasm backend:
- explicitly handle stack overflows
- correctly arrange stack, data, and heap segments of memory
- bigger-than-word types should be returned via allocating on the stack and then writing to them via pointer
- don't include an empty main if no main is compiled in