Skip to content

Tracking Issue for const_vec_string_slice #129041

Closed
@GrigorenkoPV

Description

@GrigorenkoPV
Contributor

Feature gate: #![feature(const_vec_string_slice)]

This is a tracking issue for making a bunch of String and Vec methods const.

Public API

The following methods are now const:

impl String {
    pub const fn into_bytes(self) -> Vec<u8>;
    pub const fn as_str(&self) -> &str;
    pub const fn capacity(&self) -> usize;
    pub const fn as_bytes(&self) -> &[u8];
    pub const fn len(&self) -> usize;
    pub const fn is_empty(&self) -> bool;
}

impl Vec<T> {
    pub const fn capacity(&self) -> usize;
    pub const fn as_slice(&self) -> &[T];
    pub const fn as_ptr(&self) -> *const T;
    pub const fn len(&self) -> usize;
    pub const fn is_empty(&self) -> bool;
}

A few additional methods are under this feature gate but were not included in the FCP at #129041 (comment); they got FCP'd in #137319 (comment):

impl String {
    pub const fn as_mut_str(&mut self) -> &mut str;
    pub const unsafe fn as_mut_vec(&mut self) -> &mut Vec<u8>;
}

impl Vec<T> {
    pub const fn as_mut_slice(&mut self) -> &mut [T];
    pub const fn as_mut_ptr(&mut self) -> *mut T;
}

Steps / History

Unresolved Questions

  • None yet.

@rustbot label A-str

Footnotes

  1. https://std-dev-guide.rust-lang.org/feature-lifecycle/stabilization.html

Activity

added
C-tracking-issueCategory: An issue tracking the progress of sth. like the implementation of an RFC
T-libs-apiRelevant to the library API team, which will review and decide on the PR/issue.
on Aug 13, 2024
Esper89

Esper89 commented on Aug 13, 2024

@Esper89

This would be very useful for const fns 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(),
        }
    }
}

36 remaining items

Loading
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-strArea: str and StringC-tracking-issueCategory: An issue tracking the progress of sth. like the implementation of an RFCT-libs-apiRelevant to the library API team, which will review and decide on the PR/issue.disposition-mergeThis issue / PR is in PFCP or FCP with a disposition to merge it.finished-final-comment-periodThe final comment period is finished for this PR / Issue.

    Projects

    No projects

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @cuviper@Amanieu@RalfJung@Kixunil@dtolnay

        Issue actions

          Tracking Issue for `const_vec_string_slice` · Issue #129041 · rust-lang/rust