And let's assume that we know, with 100% certainty, that read_exact() does exactly what it implies, and if it ever fails, we'll return from the function with an error. Under these assumptions, we don't actually need to initialize wordbuf to [0, 0, 0, 0], because an uninitialized read will never actually happen.
Now let's say this unnecessary (again, under the assumption it can truly be shown to be unnecessary) initialization would actually be measurable, and one would want to eliminate it -- how would one go about doing that? Is this the sort of thing that MaybeUninit is used for?
Unfortunately, doing this when R is a generic parameter you don't control is not correct because the reader could try to read the values in the &mut [u8] you pass it, which is definitely not ok, and since the implementation of the reader doesn't require the unsafe keyword, you are the one at fault if that happens.