rust-lang / libs-team

The home of the library team
Apache License 2.0
110 stars 18 forks source link

Make `core::str::from_utf8*` methods available on the `str` type #398

Open robertbastian opened 2 weeks ago

robertbastian commented 2 weeks ago

Proposal

Problem statement

These are constructors for str, but they live in the core::str module. This means users always need a use core::str import in order to call them as str::from_utf8, or have to fully qualify them. This leads to two ways of doing things, and is also confusing for beginners who might think that core::str imports the type and is always needed when using str.

Motivating examples or use cases

pub use core::str;

fn foo1() -> &'static str {
    str::from_utf8(b"hi").unwrap()
}
pub use core::str; # not needed, even though we use `str`

fn foo2() -> &'static str {
    "hi";
}
fn foo3() -> &'static str {
    core::str::from_utf8(b"hi").unwrap()
}

Solution sketch

become associated functions on the str type. The core::str module reexports them, with a future deprecation warning, as was done for core::i16::MAX and friends.

Alternatives

Everything stays as it is

Links and related work

Open questions