This is a proposal to add a truncate_into() method on the various small
primitive types (u*, i*, and f* primarily).
Currently, an as cast can be used to 'upcast' from e.g. u8 to u16, but it
can also be used to 'downcast' from e.g. u16 to u8. The downcast variant
will truncate any bits that can't fit into the smaller variant, which may be
unexpected behavior. Changing as's behavior so it does not support downcasting
would be a big task, and perhaps not worth it – that is out of the scope of this
proposal. Instead, I propose to add a new method, truncate_into() that
performs the downcasting behavior such that it is clear in the code what is
happening.
It would likely be implemented as two traits, TruncateFrom and TruncateInto,
akin to TryFrom and TryInto. TruncateInto would be implemented in terms of
TruncateFrom, and TruncateFrom could just use as internally. In the
future, if we change the behavior of as, we would probably have to convert
into an array first and then ignore some of the bytes.
This proposal stemmed from discussion on Zulip about the confusion arising
from as's truncating behavior.
This is a proposal to add a
truncate_into()method on the various smallprimitive types (
u*,i*, andf*primarily).Currently, an
ascast can be used to 'upcast' from e.g.u8tou16, but itcan also be used to 'downcast' from e.g.
u16tou8. The downcast variantwill truncate any bits that can't fit into the smaller variant, which may be
unexpected behavior. Changing
as's behavior so it does not support downcastingwould be a big task, and perhaps not worth it – that is out of the scope of this
proposal. Instead, I propose to add a new method,
truncate_into()thatperforms the downcasting behavior such that it is clear in the code what is
happening.
It would likely be implemented as two traits,
TruncateFromandTruncateInto,akin to
TryFromandTryInto.TruncateIntowould be implemented in terms ofTruncateFrom, andTruncateFromcould just useasinternally. In thefuture, if we change the behavior of
as, we would probably have to convertinto an array first and then ignore some of the bytes.
This proposal stemmed from discussion on Zulip about the confusion arising
from
as's truncating behavior.