This thread is a mess. Move semantics is nothing more than creating a shallow
copy that steals the inner state of a previous instance. It's an optimization,
and moving out of a variable never makes the previous instance unusable:
void f1(std::vector<int>&& vec);
void f2() {
std::vector<int> vec;
f1(std::move(vec));
vec.push_back(2); // This compiles just fine
}
Since move semantics are a pass-by-value optimization, they can't exist in
python where calling any kind of function simply shares bindings. In python no
matter how hard you try you'll never run into the "hollow" instances that move
semantics leave behind.
Some of the use-cases described in this thread are actually about borrow
checking: making it possible to terminate the semantic lifetime of a variable
by passing it to a function. Manually propagating lifetime restrictions through
type annotations is definitely possible, and could be supported with a mypy
plugin, but it will be very verbose, and without any kind of "constness" in the
language the added safety will be pretty limited.
_______________________________________________
Python-ideas mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at
https://mail.python.org/archives/list/[email protected]/message/XFLGRVBLGD7P2TLT6Z55QK6356676A5H/
Code of Conduct: http://python.org/psf/codeofconduct/