Tracking Issue for `string_replace_in_place`
Feature gate: #![feature(string_replace_in_place)]
This is a tracking issue for String::replace_first and String::replace_last
Public API
// alloc::string
impl String {
pub fn replace_first<P: Pattern>(&mut self, from: P, to: &str);
pub fn replace_last<P: Pattern>(&mut self, from: P, to: &str)
where for<'a> P::Searcher<'a>: ReverseSearcher<'a>;
}
Steps / History
(Remember to update the S-tracking-* label when checking boxes.)
- ACP: rust-lang/libs-team#506
- Implementation: #134316
- Final comment period (FCP)^1
- Stabilization PR
Unresolved Questions
(copied from ACP "Alternatives" section)
The method names could include
in_placeor similar, to distinguish them fromreplace/replacenmethods onstrthat are not in-place. There is alreadyString::replace_rangethough, that is in-place but does not explicitly indicate this in its name.@tgross35 mentioned on the implementation PR that it would make sense for there to also be an in-place
str::replacealternative. If these are namedreplace_first_in_place, that would match nicely with a possibleString::replace_in_placeand/orString::replacen_in_placethat do whatstr::replace/str::replacendo, but in-place.Users could use the more general
str::replacenif allocation is not a bottleneck, or if the needle and replacement are not the same length and copying the haystack to a new allocation is faster than shuffling data around in one allocation.Users could implement these manually in terms of existing
String/strAPIs (the implementation uses only the existing safe, stable APIsstr::(r)match_indicesandString::replace_range).These could be
fn(self) -> Selfinstead offn(&mut self). This would make it difficult to perform on a mutably borrowedString:*string = std::mem::take(string).replace_first(...);vsstring.replace_first(...);These could be
fn(&mut self) -> &mut Selfto allow chaining multiple calls, but this might be less clear that it does not return a newStringallocation.These could return a
boolindicating whether a match was found, avoiding the need to search twice https://github.com/rust-lang/rust/issues/147949#issuecomment-3446645296
Source: rust-lang/rust