oh gods
...actually a basic impl might not be too hard. If a non-Copy variable ends up on the right side of an assignment or function call, it gets marked as 'moved' and type checking keeps track of it.
Now I need some kind of effect system to track whether a type is Copy or not...
#59 is surprisingly related, instead of making stuff
Pin
it might be interesting to make stuff explicitlyMove
instead. Would be interesting to also flipCopy
and make it the default, and make "things that can't beCopy
" be its own trait. There's some interesting discussion in the lobste.rs thread mentioned there, https://lobste.rs/s/6fjkeh/why_async_rust ; that bit is a feature that actually has a lot of interlocking parts. So changing one bit will result in changes to other bits.