
Size: a a a









#[lang_item] — trait Pointee { type Metadata: ...; }.Pointee реализован для всех типов. Metadata отвечает за тип метаданных (вау) в указателе (/ссылке) на этот тип. Для :Sized и extern типов Metadata = (), для str и [_] Metadata = usize, для dyn Trait Metadata = DynMetadata<dyn Trait>. Это значит что, например, &str состоит из (*const (), usize).&T (T: ?Sized). Теперь можно — (*const (), <T as Pointee>::Metadata) [0]ThinBox, аналог Box, но хранит метадату в куче?Sized типов (у меня была идея что-то подобное написать, но на тот момент это было не возможно)dyn Trait, а не то как делали раньше (через transmute безопасность которого не гарантированна)







