-
Notifications
You must be signed in to change notification settings - Fork 19
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
ACP: impl From<&mut {slice}> for Rc<{slice}> and Arc<{slice}> #424
Labels
ACP-accepted
API Change Proposal is accepted (seconded with no objections)
api-change-proposal
A proposal to add or alter unstable APIs in the standard libraries
Comments
eduardosm
added
api-change-proposal
A proposal to add or alter unstable APIs in the standard libraries
T-libs-api
labels
Aug 10, 2024
Can't you just reborrow? let s: Rc<str> = (&*chr.encode_utf8(&mut [0; 4])).into(); |
That should work too. |
We discussed this in the libs-api meeting and are happy to add these. This should also include the implementation for Considering we've had recent breakage from new trait implementations, the PR for this should probably go through a crater run. |
Amanieu
added
ACP-accepted
API Change Proposal is accepted (seconded with no objections)
and removed
T-libs-api
labels
Aug 20, 2024
bors
added a commit
to rust-lang-ci/rust
that referenced
this issue
Aug 21, 2024
Implement `From<&mut {slice}>` for `Rc/Arc<{slice}>` ACP: rust-lang/libs-team#424 New API: ```rust impl<T: Clone> From<&mut [T]> for Rc<[T]> impl From<&mut str> for Rc<str> impl From<&mut CStr> for Rc<CStr> impl From<&mut OsStr> for Rc<OsStr> impl From<&mut Path> for Rc<Path> impl<T: Clone> From<&mut [T]> for Arc<[T]> impl From<&mut str> for Arc<str> impl From<&mut CStr> for Arc<CStr> impl From<&mut OsStr> for Arc<OsStr> impl From<&mut Path> for Arc<Path> ``` Since they are trait implementations, I think these are insta-stable. As mentioned in rust-lang/libs-team#424 (comment), a crater run might be needed.
workingjubilee
added a commit
to workingjubilee/rustc
that referenced
this issue
Nov 3, 2024
…lnay Implement `From<&mut {slice}>` for `Box/Rc/Arc<{slice}>` ACP: rust-lang/libs-team#424 New API: ```rust impl<T: Clone> From<&mut [T]> for Box<[T]> impl From<&mut str> for Box<str> impl From<&mut CStr> for Box<CStr> impl From<&mut OsStr> for Box<OsStr> impl From<&mut Path> for Box<Path> impl<T: Clone> From<&mut [T]> for Rc<[T]> impl From<&mut str> for Rc<str> impl From<&mut CStr> for Rc<CStr> impl From<&mut OsStr> for Rc<OsStr> impl From<&mut Path> for Rc<Path> impl<T: Clone> From<&mut [T]> for Arc<[T]> impl From<&mut str> for Arc<str> impl From<&mut CStr> for Arc<CStr> impl From<&mut OsStr> for Arc<OsStr> impl From<&mut Path> for Arc<Path> ``` Since they are trait implementations, I think these are insta-stable. As mentioned in rust-lang/libs-team#424 (comment), a crater run might be needed.
matthiaskrgr
added a commit
to matthiaskrgr/rust
that referenced
this issue
Nov 3, 2024
…lnay Implement `From<&mut {slice}>` for `Box/Rc/Arc<{slice}>` ACP: rust-lang/libs-team#424 New API: ```rust impl<T: Clone> From<&mut [T]> for Box<[T]> impl From<&mut str> for Box<str> impl From<&mut CStr> for Box<CStr> impl From<&mut OsStr> for Box<OsStr> impl From<&mut Path> for Box<Path> impl<T: Clone> From<&mut [T]> for Rc<[T]> impl From<&mut str> for Rc<str> impl From<&mut CStr> for Rc<CStr> impl From<&mut OsStr> for Rc<OsStr> impl From<&mut Path> for Rc<Path> impl<T: Clone> From<&mut [T]> for Arc<[T]> impl From<&mut str> for Arc<str> impl From<&mut CStr> for Arc<CStr> impl From<&mut OsStr> for Arc<OsStr> impl From<&mut Path> for Arc<Path> ``` Since they are trait implementations, I think these are insta-stable. As mentioned in rust-lang/libs-team#424 (comment), a crater run might be needed.
matthiaskrgr
added a commit
to matthiaskrgr/rust
that referenced
this issue
Nov 3, 2024
…lnay Implement `From<&mut {slice}>` for `Box/Rc/Arc<{slice}>` ACP: rust-lang/libs-team#424 New API: ```rust impl<T: Clone> From<&mut [T]> for Box<[T]> impl From<&mut str> for Box<str> impl From<&mut CStr> for Box<CStr> impl From<&mut OsStr> for Box<OsStr> impl From<&mut Path> for Box<Path> impl<T: Clone> From<&mut [T]> for Rc<[T]> impl From<&mut str> for Rc<str> impl From<&mut CStr> for Rc<CStr> impl From<&mut OsStr> for Rc<OsStr> impl From<&mut Path> for Rc<Path> impl<T: Clone> From<&mut [T]> for Arc<[T]> impl From<&mut str> for Arc<str> impl From<&mut CStr> for Arc<CStr> impl From<&mut OsStr> for Arc<OsStr> impl From<&mut Path> for Arc<Path> ``` Since they are trait implementations, I think these are insta-stable. As mentioned in rust-lang/libs-team#424 (comment), a crater run might be needed.
rust-timer
added a commit
to rust-lang-ci/rust
that referenced
this issue
Nov 3, 2024
Rollup merge of rust-lang#129329 - eduardosm:rc-from-mut-slice, r=dtolnay Implement `From<&mut {slice}>` for `Box/Rc/Arc<{slice}>` ACP: rust-lang/libs-team#424 New API: ```rust impl<T: Clone> From<&mut [T]> for Box<[T]> impl From<&mut str> for Box<str> impl From<&mut CStr> for Box<CStr> impl From<&mut OsStr> for Box<OsStr> impl From<&mut Path> for Box<Path> impl<T: Clone> From<&mut [T]> for Rc<[T]> impl From<&mut str> for Rc<str> impl From<&mut CStr> for Rc<CStr> impl From<&mut OsStr> for Rc<OsStr> impl From<&mut Path> for Rc<Path> impl<T: Clone> From<&mut [T]> for Arc<[T]> impl From<&mut str> for Arc<str> impl From<&mut CStr> for Arc<CStr> impl From<&mut OsStr> for Arc<OsStr> impl From<&mut Path> for Arc<Path> ``` Since they are trait implementations, I think these are insta-stable. As mentioned in rust-lang/libs-team#424 (comment), a crater run might be needed.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Labels
ACP-accepted
API Change Proposal is accepted (seconded with no objections)
api-change-proposal
A proposal to add or alter unstable APIs in the standard libraries
Proposal
Problem statement
Sometimes, I need to build reference counted slice (e.g.,
Rc<str>
,Rc<[u8]>
,Rc<Path>
... or theirArc
counterparts) from a borrowed sliced. If it is an immutable borrow (e.g.,&str
), I can useFrom<&str> for Rc<str>
. If it is a mutable borrow (e.g.,&mut str
), there is not aFrom<&mut str> for Rc<str>
.Motivating examples or use cases
Since
char::encode_utf8
returns a&mut str
, it fails to compile with "the trait boundRc<str>: From<&mut str>
is not satisfied"Solution sketch
The proposal is to add the following impls:
And their
Arc
counterparts.An easy implementation would consist on coercing the mutable slice to an immutable one and leverage the existing impls, which take immutable slices, to perform the conversion.
Alternatives
The alternative right now is to manually coerce the
&mut _
to&_
before creating theRc
.Links and related work
rust-lang/rust#128885
What happens now?
This issue contains an API change proposal (or ACP) and is part of the libs-api team feature lifecycle. Once this issue is filed, the libs-api team will review open proposals as capability becomes available. Current response times do not have a clear estimate, but may be up to several months.
Possible responses
The libs team may respond in various different ways. First, the team will consider the problem (this doesn't require any concrete solution or alternatives to have been proposed):
Second, if there's a concrete solution:
The text was updated successfully, but these errors were encountered: