rust-lang / project-const-traits

Const Traits Project Group
https://rust-lang.github.io/project-const-traits/
2 stars 0 forks source link

Making impls const across bootstrap versions #7

Open compiler-errors opened 1 month ago

compiler-errors commented 1 month ago

As we re-constify traits, we're gonna have issues when constifying impls across bootstrap versions, since we have to basically duplicate the whole impl since we can't currently cfg out constness of an impl:

#[cfg(bootstrap)]
impl Foo for Bar {}

#[cfg(not(bootstrap))]
impl const Foo for Bar {}

SOLUTION

So we probably should make it possible to do this, i.e. allow an new attribute like rustc_const_impl so we can just do:

#[cfg_attr(not(bootstrap), rustc_const_impl)]
impl const Foo for Bar {}

Then after a bootstrap bump, we will just have:

#[rustc_const_impl]
imp Foo for Bar {}

Which can then just trivially be converted to:

impl const Foo for Bar {}
RalfJung commented 1 month ago

I assume this

#[cfg_attr(not(bootstrap), rustc_const_impl)]
impl const Foo for Bar {}

should be

#[cfg_attr(not(bootstrap), rustc_const_impl)]
impl Foo for Bar {}

Also this will only be a problem once, right, when impl const re-lands? So we can also "just" wait a cycle before we start mass-adding this again. But we're not patient enough for that. ;)

compiler-errors commented 1 month ago

I assume this

Yeah, typo.

But we're not patient enough for that. ;)

Yeah, I guess we could wait one beta bump after we land the effects implementation of the old trait solver (https://github.com/rust-lang/rust/pull/132119) before we start constifying traits in the standard library. I am impatient, but it may end up being fine if we can just land that PR soon.