rust-lang / rust

Empowering everyone to build reliable and efficient software.
https://www.rust-lang.org
Other
97.6k stars 12.62k forks source link

Tracking issue for generic const items #113521

Open fmease opened 1 year ago

fmease commented 1 year ago

This is a tracking issue for the experimental feature generic const items (RFC pending). The feature gate for the issue is #![feature(generic_const_items)].

It enables generic parameters and where-clauses on free and associated const items. See also rust-lang/lang-team#214.

About experimental features

An experimental feature is one that has not yet had an RFC. The idea is to allow implementation work to proceed to better inform an upcoming RFC. Experimental features cannot be stabilized without first having an RFC. The existence of an experimental feature does not indicate lang team consensus that the feature is desirable, only that there is a problem that is worthy of being solved and that the idea has enough merit to consider exploring. See the lang team process page for more details.

About tracking issues

Tracking issues are used to record the overall progress of implementation. They are also used as hubs connecting to other relevant issues, e.g., bugs or open design questions. A tracking issue is however not meant for large scale discussion, questions, or bug reports about a feature. Instead, open a dedicated issue for the specific matter and add the relevant feature gate label.

Steps

Experimental results

Part of the goal of the experimental process is to identify benefits but also concerns that need to be addressed in the RFC. This section catalogues notable findings thus far.

  1. Do we want to require “where Self: 'a” bounds on GACs like we do on GATs (#87479)? Unresolved, not implemented.
  2. Should #![feature(trivial_bounds)] const _UNUSED: () = () where String: Copy; successfully compile? Ideally yes, not implemented.
  3. Should we forbid underscore identifiers for const items with generic parameters (e.g., const _<T>: () = ();)? Unresolved, not implemented.
  4. Should we imply some outlives-bounds? E.g., should the presence of &'a &'b () in const K<'a, 'b>: &'a &'b () = &&(); imply the bound 'b: 'a (similarly, const K<'a, T>: &'a T = loop {}; and T: 'a)? Probably yes, not implemented.

Implementation history

[^1]: Generic associated constants, i.e., associated constants with generics and/or a where clause.

ytmimi commented 9 months ago

Making a note that there's an issue in rustfmt related to #![feature(generic_const_items)] https://github.com/rust-lang/rustfmt/issues/5995.

Edit: The issue should be resolved by https://github.com/rust-lang/rustfmt/pull/5996