The special syntax ?sized can be used to remove this bound if its not appropriate. Struct foot(t) struct bart ?sized(t) struct foouse(fooi32) error sized is not implemented for i32 struct baruse(bari32) ok. Although rust will let you bind sized to a trait, you wont be able to use it to form a trait object later trait foo trait bar sized . Sized is a (very) special compiler built-in trait that is automatically implemented or not based on the sizedness of a type. A type is considered sized if the precise size of a value of type is known and fixed at compile time once the real types of the type parameters are known (i. For example, u8 is one byte, vect is either 12 or 24 bytes (platforms with 32 and 64 bit pointers respectively), independent of t типы с динамическим размером и трейт sized.
Rust необходимо знать некоторые детали о типах, например, сколько места нужно выделить для значения определённого типа. Для работы с dst rust использует трейт sized чтобы решить, будет ли размер типа известен на стадии компиляции. Этот трейт автоматически реализуется для всего, чей размер известен к моменту компиляции. Кроме того, rust неявно добавляет ограничение на sized к каждой универсальной функции. In rust all generic type parameters are sized by default everywhere - in functions, in structs and in traits. They have an implicit sized bound sized is a trait for marking sized types fn genericfnt sized(x t) - t .
Now genericfn can be called like genericfn(abcde), and t will be instantiated with str which is unsized, but thats ok - this function accepts a reference to t, so nothing bad happens. However, there is another place where question of sizedness is important. Sized is a rust crate that provides support for using dynamically sized types (dsts) in a heapless environment. Dsts are a powerful feature of rust programming language, but they require a heap for allocation, which is not available on some embedded systems. With heapless-dst, you can take advantage of dsts even on these resource-constrained systems, as it provides an implementation of dsts without using the heap. Certain types and traits that exist in the standard library are known to the rust compiler.
Boxt has a few special features that rust doesnt currently allow for user defined types. Type parameters (except self in traits) are sized by default, as are associated types. Sized is always implemented automatically by the compiler, not by implementation items. These implicit sized bounds may be relaxed by using the special ?sized bound. Auto traits are traits that get automatically implemented for a type if it passes certain conditions. .