Open GrigorenkoPV opened 3 months ago
This would be very useful for const fn
s that sometimes need to handle runtime data too, such as a const fn
method that needs to use a Cow<'static, [T]>
field.
For example:
struct Foo(Cow<'static, [u32]>);
impl Foo {
// Initialize with heap-allocated data at runtime.
fn heap(data: Vec<u32>) -> Self {
Foo(Cow::Owned(data))
}
// Initialize with static data at compile-time.
const fn static(data: &'static [u32]) -> Self {
Foo(Cow::Borrowed(data))
}
// Access the data, possibly at compile-time, possibly at runtime.
const fn data(&self) -> &[u32] {
match self.0 {
Cow::Borrowed(slice) => slice,
Cow::Owned(vec) => vec.as_slice(),
}
}
}
@rust-lang/libs-api from a const-eval perspective, these functions all look totally harmless. One can't actually construct non-trivial Vec
/String
in const
, but according to the examples above it could still be useful to have these as const fn
. So, I propose we move ahead with stabilizing these.
@rfcbot fcp merge
Team member @dtolnay has proposed to merge this. The next step is review by the rest of the tagged team members:
No concerns currently listed.
Once a majority of reviewers approve (and at most 2 approvals are outstanding), this will enter its final comment period. If you spot a major issue that hasn't been raised at any point in this process, please speak up!
See this document for info about what commands tagged team members can give me.
Feature gate:
#![feature(const_vec_string_slice)]
This is a tracking issue for making a bunch of
String
andVec
methodsconst
.Public API
The following methods are now
const
:Steps / History
Unresolved Questions
@rustbot label A-str