Ownership tracking ================== For local variables it should be fairly simple. For structs it is trickier: 1. After construction but before first use (= passing into a function or storing in a variable/field), all non-optional refs MUST be initialized. 2. After using a field: - the field must be set to none, OR - the struct must be discarded 3. When setting a field: - the "source" of the field must give ownership, OR - the source must be set to none, OR - the source (or it's container) must be discarded