libs (traits | prelude)
Add Default
, IntoIterator
and ToOwned
trait to the prelude.
Each trait has a distinct motivation:
For Default
, the ergonomics have vastly improved now that you can
write MyType::default()
(thanks to UFCS). Thanks to this
improvement, it now makes more sense to promote widespread use of
the trait.
For IntoIterator
, promoting to the prelude will make it feasible
to deprecate the inherent into_iter
methods and directly-exported
iterator types, in favor of the trait (which is currently redundant).
For ToOwned
, promoting to the prelude would add a uniform,
idiomatic way to acquire an owned copy of data (including going from
str
to String
, for which Clone
does not work).
Add Default
, IntoIterator
and ToOwned
trait to the prelude.
Deprecate inherent into_iter
methods.
Ultimately deprecate module-level IntoIter
types (e.g. in vec
);
this may want to wait until you can write Vec<T>::IntoIter
rather
than <Vec<T> as IntoIterator>::IntoIter
.
The main downside is that prelude entries eat up some amount of
namespace (particularly, method namespace). However, these are all
important, core traits in std
, meaning that the method names are
already quite unlikely to be used.
Strictly speaking, a prelude addition is a breaking change, but as above, this is highly unlikely to cause actual breakage. In any case, it can be landed prior to 1.0.
None.
The exact timeline of deprecation for IntoIter
types.
Are there other traits or types that should be promoted before 1.0?