In the case where you set the elements individually, no, since you can't then pass p to another function. You will get a "use of possibly uninitialized variable" error.
However you might want to initialize p to something based off a conditional like:
struct Point {x: u32, y: u32}
let mut p: Point;
if a == b {
p = Point { x: 0, y: 0 };
} else {
p = Point { x: a, y: b };
}
my guess, rust is pedantic. And there is nothing unsafe about writing to allocated but uninitialized memory. So rust doesn't complain. I see it as similar to raw pointers. It is safe to make one, just not to read one. Pedantic, but technically correct. Just a noobs 0.02.
Yeah, as @Eh2406 said, this is useless, but does not cause any problems, so it's OK that it does not report an error. In general, Rust preciselly tracks the controlflow to check that every value is initialized, so in theory you might be able to do something like
struct Point {x: u32, y: u32}
let mut p: Point;
p.x = 0;
p.y = 92;
// p is fully initialized, so can use it from now on.