I notice that tool trait like tokio_stream::Stream often designed into two parts: the Stream one for implementing, and the StreamExt for providing features. So i wonder why core::iter::Iterator is not designed that way.
After searching, i found out Iterator does designed in two parts in the past, but was removed at #23300.
Is there anything explanations about why IteratorExt is merged into Iterator?
// The `Iterator*Ext` traits can be removed if generalized where clauses for
// methods are implemented, and they are currently included to represent the
// functionality provided today. The various traits other than `Iterator`, such
// as `DoubleEndedIterator` and `ExactSizeIterator` are provided in order to
// ensure that the methods are available like the `Iterator` methods.