Skip to content

Remove MaybeUninit::slice_as_(mut_)ptr and optionally add *const/*mut MaybeUninit<T> -> *const/*mut T type safe conversions #245

Closed
@SUPERCILEX

Description

@SUPERCILEX

Proposal

This ACP breaks off a small piece of #122 that wasn't discussed in depth.

Problem statement

The MaybeUninit::slice_as_(mut_)ptr methods force you to elide bounds checks to go from MaybeUninit<T> to T.

fn slice_as_ptr(this: &[MaybeUninit<T>]) -> *const T

Motivating examples or use cases

There is evidence of unnecessary bounds elision occurring in the stdlib: notice the places that were switched to using array indexing in rust-lang/rust@f2e9b40.

Solution sketch

Remove MaybeUninit::slice_as_(mut_)ptr.

Optionally, I'd like to add methods for *const/*mut MaybeUninit<T> -> *const/*mut T. This restores the type safety provided by slice_as_ptr and enables improved type safety in other cases where one has a raw pointer to a MaybeUninit and wishes to get at the wrapped type. Without these methods, you'd just have to do the cast manually which isn't the end of the world.

impl<T> *const MaybeUninit<T> {
    pub const fn raw_as_ptr(self) -> *const T
}

impl<T> *mut MaybeUninit<T> {
    pub const fn raw_as_mut_ptr(self) -> *mut T
}

Links and related work

rust-lang/rust#103133

Activity

m-ou-se

m-ou-se commented on Jun 27, 2023

@m-ou-se
Member

We discussed this in the libs-api meeting. We're on board with removing MaybeUninit::slice_as_ptr.

We did not reach consensus on adding the newly proposed methods, so that part of this ACP is not accepted.

SUPERCILEX

SUPERCILEX commented on Jun 27, 2023

@SUPERCILEX
Author

Sounds good! Will update the PR.

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

    T-libs-apiapi-change-proposalA proposal to add or alter unstable APIs in the standard libraries

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @m-ou-se@SUPERCILEX

        Issue actions

          Remove `MaybeUninit::slice_as_(mut_)ptr` and optionally add `*const/*mut MaybeUninit<T> -> *const/*mut T` type safe conversions · Issue #245 · rust-lang/libs-team