News for hackers. Stuff that matters.
Re:Microsoft is to enable Rust use for Windows 11 kernel by _flux on Friday April 28, 2023 @10:13AM (#35741492)
I think you will appreciate that moving objects actually invalidates the original bindings and the compiler checks for this quite effectively.

Though there is some learning curve..

Re:Microsoft is to enable Rust use for Windows 11 kernel by shortrounddev on Friday April 28, 2023 @10:16AM (#35741523)
So the equivalent of std::move will also make sure to "null" the original object at the same time?
Re:Microsoft is to enable Rust use for Windows 11 kernel by VWWHFSfQ on Friday April 28, 2023 @10:18AM (#35741542)
It's not just a matter of "null"ing the reference. The program just won't compile at all if you try to use that reference again
Re:Microsoft is to enable Rust use for Windows 11 kernel by dataflow on Friday April 28, 2023 @10:43AM (#35741860)
Surely there's more to it than this? Otherwise you can just set up bugprone-use-after-move checks in C++ and call it a day.
Re:Microsoft is to enable Rust use for Windows 11 kernel by dmkolobov on Friday April 28, 2023 @11:48AM (#35742818)
The difference is that your C++ checks are executed at runtime. Rust's borrow-checker rules ensure this occurs at compile-time, before you ever run any code.
Re:Microsoft is to enable Rust use for Windows 11 kernel by dataflow on Friday April 28, 2023 @11:55AM (#35742949)
The check I mentioned is a compile time check. I'm not referring to ASAN.
Re:Microsoft is to enable Rust use for Windows 11 kernel by masklinn on Friday April 28, 2023 @12:11PM (#35743260)
Well yes for starters this is not an optional check and it’s not on just “bug-prone” moves it’s on all for them.

Then it also has a borrow checker so if you refer to the content of an other object the langage ensures the (non-owning) pointer does not outlive the pointee, at compile-time. Though this concept is lexical so it’s quite restrictive.

And then it encodes some forms of thread-safety in the langage directly.

It also removes things like nullable pointers.

Re:Microsoft is to enable Rust use for Windows 11 kernel by duped on Friday April 28, 2023 @02:58PM (#35745575)
The "more to it" is that the use-after-move checks aren't bugprone in Rust, you cannot use a value after it has been moved in safe code (additionally, when you call a function, values are moved and not copied, and when you capture a value in a closure, it is either by unique mutable reference, immutable reference, or moved and therefore safe*).

Essentially all the stuff that makes std::move questionable "just works" in Rust. It doesn't even exist, values are moved by default and clones must be explicit (equivalent of a copy constructor for non-trivially copyable types).

The other giant advantage is that use-after-free doesn't exist in safe Rust, since you can't have a reference to a value outlive the value.

* It is also a compile error for a closure that captures a value by reference to outlive the value.

Re:Microsoft is to enable Rust use for Windows 11 kernel by dataflow on Friday April 28, 2023 @03:26PM (#35745974)
> the use-after-move checks aren't bugprone in Rust

I can't tell if one if us is confused here or if this is just confusing wording, but the check I referred to is not bug-prone. The pattern of using something after it's been moved from is bug-prone (even though it'd work fine for things like integers, in either language), and it's checking for that bug-prone pattern, hence the name.

Re:Microsoft is to enable Rust use for Windows 11 kernel by db48x on Friday April 28, 2023 @06:06PM (#35747692)
In Rust it’s not bug–prone. The compiler knows which types are moved and which are copied, and if you write code that uses something after it was moved you get a compile–time error.
Re:Microsoft is to enable Rust use for Windows 11 kernel by _flux on Friday April 28, 2023 @10:43AM (#35741869)
In practical terms the original variable or field will be out of scope after the move (well not really, but that's how effective the checking is).
Re:Microsoft is to enable Rust use for Windows 11 kernel by eska on Friday April 28, 2023 @12:22PM (#35743457)
It’s a heuristic. And it doesn’t catch when your move isn’t really a move. And writing move constructors is difficult busywork.
Re:Microsoft is to enable Rust use for Windows 11 kernel by masklinn on Saturday April 29, 2023 @02:18AM (#35750505)
Your comment is really confusing, none of that is true for Rust.
Re:Microsoft is to enable Rust use for Windows 11 kernel by eska on Saturday April 29, 2023 @01:02PM (#35754754)
Because it was about C++