Notes to myself about possible next steps:
- add some basic tests for share/lease
- incorporate liveness
- convert from fns to methods
- giving places should rename
- tests for giving a shared value (I think it'll do the wrong thing now!)
- tests for giving a leased value
- moving from a class field
x
where other fields referenceself.x
-- this needs to either be an error or invalidate the struct - rework subtyping etc
- subtyping rules for
our leased
etc are broken - cancellation
- prevent mutation of shared content
- introduce a "maybe copy" rule to limit splitting of paths -- addressed by using liveness
- subtyping -- leased T should be invariant in T
- variance, atomic fields
- giving of shared things currently moves, not copies -- I think this is fixed, test?
- check mutation of fields and inherited permissions etc
- convert Int to a value type
- giving and accessing of value types should not move etc
- complete type check rules for all the expressions
- fuzzing
- prevent mutation when perm parameter MAY be shared
- add structs/enums/value types
- popping variables from environment may need to clear from types
- pop variables from environment as we exit a block
- introduce environment consistency check and assert it at various points
- type inference
-
foo.give.share
-- does this even parse? - boxed classes
- boxed type
- ref type
- ref expression etc