rust-lang / reference

The Rust Reference
https://doc.rust-lang.org/nightly/reference/
Apache License 2.0
1.16k stars 452 forks source link

Document behavior of wide to thin pointer casts for DSTs #1448

Open udoprog opened 4 months ago

udoprog commented 4 months ago

Related #66, rust-lang/rust#81513

The following casts are considered "true casts" per the reference:

Today they are implemented so that the data pointer is returned and metadata discarded. However, this behavior does not appear to be documented anywhere authoritative.

In the rfc to ptr_metadata (Tracking issue: rust-lang/rust#81513) the following text was proposed, but as of today hasn't made it into the unstable Pointee trait:

Pointer metadata can be extracted from a pointer or reference with the metadata function. The data pointer can be extracted by casting a (fat) pointer to a (thin) pointer to a Sized type with the as operator, for example (x: &dyn SomeTrait) as *const SomeTrait as *const () or (x: *const dyn SomeTrait).cast::<()>().

Should this be documented in the reference or is the semantics contentious?

RalfJung commented 4 months ago

This is not contentious at all. But indeed it would be better to state this explicitly.