--- date: 2024-11-19 url: https://hackmd.io/OPtt-kGFQuaU8HmMHjZupg --- # Libs-API Meeting 2024-11-19 ###### tags: `Libs Meetings` `Minutes` **Meeting Link**: https://meet.jit.si/rust-libs-meeting-crxoz2at8hiccp7b3ixf89qgxfymlbwr **Attendees**: Amanieu, David, JoshT, Mara, The 8472, Eric Holk, TC ## Agenda - Triage - Anything else? ## Triage ### FCPs 16 rust-lang/rust T-libs-api FCPs - merge rust.tf/97601 *Tracking Issue for map\_many\_mut* - (3 checkboxes left) - merge rust.tf/80437 *Tracking Issue for \`box\_into\_inner\`* - (1 checkboxes left) - merge rust.tf/106418 *Implement \`PartialOrd\` and \`Ord\` for \`Discriminant\`* - (2 checkboxes left) - merge rust.tf/131713 *Stabilize \`const\_maybe\_uninit\_write\`* - (3 checkboxes left) - merge rust.tf/120141 *Tracking Issue for enum access in offset\_of* - (6 checkboxes left) - merge rust.tf/130191 *\[discussion\] \`ErrorKind::CrossesDevices\` from \`io\_error\_more\`* - (3 checkboxes left) - merge rust.tf/130190 *\[discussion\] \`ErrorKind::FilesystemQuotaExceeded\` from \`io\_error\_more\`* - (3 checkboxes left) - merge rust.tf/131784 *Stabilize unsigned and float variants of \`num\_midpoint\` feature* - (3 checkboxes left) - merge rust.tf/129322 *Tracking Issue for \`ptr::fn\_addr\_eq\`* - (3 checkboxes left) - merge rust.tf/130192 *\[discussion\] \`ErrorKind::InvalidFilename\` from \`io\_error\_more\`* - (3 checkboxes left) - merge rust.tf/132187 *Add Extend impls for tuples of arity 1 through 12* - (3 checkboxes left) - merge rust.tf/129375 *Tracking Issue for unbounded\_shifts* - (3 checkboxes left) - merge rust.tf/132515 *Fix and undeprecate home\_dir()* - (3 checkboxes left) - merge rust.tf/132431 *From iterator more tuples* - (3 checkboxes left) - merge rust.tf/93235 *Tracking Issue for \`const\_nonnull\_new\`* - (3 checkboxes left) - merge rust.tf/127534 *feat(core): impl Step for NonZero\<u\*\>* - (3 checkboxes left) [scottmcm (2)](https://rfcbot.rs/fcp/scottmcm), [dtolnay (1)](https://rfcbot.rs/fcp/dtolnay), [tmandry (1)](https://rfcbot.rs/fcp/tmandry), [m-ou-se (13)](https://rfcbot.rs/fcp/m-ou-se), [pnkfelix (1)](https://rfcbot.rs/fcp/pnkfelix), [joshtriplett (6)](https://rfcbot.rs/fcp/joshtriplett), [Amanieu (8)](https://rfcbot.rs/fcp/Amanieu), [nikomatsakis (2)](https://rfcbot.rs/fcp/nikomatsakis), [BurntSushi (14)](https://rfcbot.rs/fcp/BurntSushi) ### (nominated) rust.tf/43244 *Tracking issue for Vec::extract\_if and LinkedList::extract\_if* The 8472: Would like the Vec variant to also take a range as extra argument. Not sure if everyone agrees. Mara: Sounds fine. For the usual case you just have to add `.., `. The 8472: Could be implemented on subranges of btreemap. Amanieu: relevant tracking issues: - HashMap::extract_if: https://github.com/rust-lang/rust/issues/59618 - BTreeMap::extract_if: https://github.com/rust-lang/rust/issues/70530 Amanieu: We can defer the stabilization of the method on maps. David: Sets don't have a range_mut, because you can't mutate the keys. Amanieu: BTree* should take a range, Hash* not. David: Okay. On board with all of them. With or without the range. JoshT: Design of this method on maps shouldn't block adding it to Vec and LinkedList. The 8472: Adding a range to Vec should be easy. Mara: So, add range to the Vec method and then start FCP? JoshT: Also a naming question. Mara: Oh, I thought we converged to extract_if. David: Happy with extract_if. David: Could also be method on the Drain type, so a second function call. Amanieu: ExtractIf doesn't consume on drop David: It'd take Drain by value. Amanieu/The 8472: Confusing. Mara: Kind of feels like .drain(..).dont_actually_drain(). Confusing that the effect of .drain() is partially cancelled. The 8472: There is a .keep_rest() method on Drain already. JoshT: That's very explicit though. The 8472: Could work with .drain(..).extract_only(..) David: .drain(..).only_if(|| ...) JoshT: Prefer extract_if. Might not object if someone also suggests Drain::extract_only as a separate thing. David: sgtm. JoshT: naming. drain_if The 8472: Issue is that the behaviour is different on Drop. Drain drains on drop. That's why I renamed it. JoshT: Either name is fine. Amanieu: Happy with extract_if. Consensus: extract_if, but add range to Vec version. No stabilization for the map version yet. David: Does the range type appear in the type of the ExtractIf type? Amanieu: No, we don't do that for Drain either. Range is only used to calculate bounds, the type isn't relevant. David: Makes sense for Vec. But for BTreeMap it could go either way. Mara: Good reason to not stabilize the method on maps yet. [discussion about [`extract_mapped`](https://github.com/rust-lang/rust/issues/43244#issuecomment-1683805752) which is not covered by the current API] David: std::vec::Cursor that exposes filtering and removal (and possibly insertion)? Amanieu: still need Vec::extract_if if Cursor exists? 8472: ExtractIf is usable as Iterator while Cursor would not be ### (impromptu nominated) rust.tf/101122 *Tracking Issue for vec::Drain{,Filter}::keep_rest* First unresolved question about DrainFilter no longer relevant Second unresolved question: Amanieu: propose deleting `keep_rest`, users should use `extract_if` if they want to keep rest after iteration Defer until `extract_if` is stable and in use, to see whether a use case for `keep_rest` remains ### (nominated) rust.tf/86319 *Tracking Issue for Path::file\_prefix* Good enough. Let's FCP. ### (nominated) rust.tf/95892 *Tracking Issue for \`sub\_ptr\` (feature \`ptr\_sub\_ptr\`)* Not actionable in this meeting right now. ### (nominated) rust.tf/97601 *Tracking Issue for map\_many\_mut* Waiting on checkboxes ### (nominated) rust.tf/104642 *Tracking Issue for get\_many\_mut* Recall that we asked for support for ranges (not implemented yet) Error type: agreement on exposing a 2-value exhaustive enum with no accompanying information about index or len Amanieu: we had proposed accepting an array of ranges, all of which would need to be the same range type. should we consider accepting a tuple of ranges, allowing different range types? Josh: I am open to a separate method that does tuples, but let's stabilize this one sooner with just array of ranges Amanieu: I think we can decide now to rule out supporting tuple of ranges 8472: if it may be possible to adapt later to support a tuple of ranges as a non-breaking change, should we really rule it out? ### (nominated) rust.tf/133089 *Stabilize noop\_waker* Ready for FCP ### (nominated) rust.tf/105877 *\`impl PartialEq\<{str,String}\> for {Path,PathBuf}\` (and reversed)* ### (nominated) rust.tf/123947 *Add vec\_deque::Iter::as\_slices and friends* ### (nominated) rust.tf/127753 *Implement \`Clone\` for \`BufReader\`, \`BufWriter\` and \`LineWriter\`* ### (nominated) rust.tf/128375 *Derive Copy on core::ffi::c\_str types* ### (nominated) rust.tf/129322 *Tracking Issue for \`ptr::fn\_addr\_eq\`* ### (nominated) rust.tf/131784 *Stabilize unsigned and float variants of \`num\_midpoint\` feature* ### (new change proposal) rust.tf/libs489 *ACP: \`#\[derive(Debug)\]\` on unions to print \`MyUnion { ... }\`* Reject in favor of #334 Josh to reply to #334 ### (new change proposal) rust.tf/libs488 *Phantom variance ZSTs* ### (new change proposal) rust.tf/libs487 *Path::is\_trivial* ### (new change proposal) rust.tf/libs486 *OsString::truncate* ### (new change proposal) rust.tf/libs485 *Add \`get\`, \`set\` and \`replace\` methods to \`Mutex\` and \`RwLock\`* ### (new change proposal) rust.tf/libs484 *Support \`vec!\[const { expr }; N\]\` syntax for creating a \`Vec\` of non\-\`Clone\` values* TC: This has some similarity to what I filed here: https://github.com/rust-lang/rust/issues/133081 ```rust assert_eq!(const { 0 }, 0); // The above produces the same error as: vec![const { 0 }; 0]; ``` ### (new change proposal) rust.tf/libs483 *\`Box::new\_from\_ref\` for making a \`Box\<T\>\` from a \`&T\` where \`T: CloneToUninit + ?Sized\` (and \`Rc\` and \`Arc\`)* ### (new change proposal) rust.tf/libs482 *Docs \- type guarantees update* ### (new change proposal) rust.tf/libs478 *\`file\_absolute!\` macro* ### (new change proposal) rust.tf/libs476 *Parse IPv6 zone identifiers* ### (stalled change proposal) rust.tf/libs181 *\`Cow::map\_borrowed\`, \`Cow::map\_owned\`, and \`Cow::map\`* ### (stalled change proposal) rust.tf/libs210 *Add associated consts to f32, f64 for mathematical constants* ### (stalled change proposal) rust.tf/libs360 *make FromResidual #\[fundamental\]* ### (stalled change proposal) rust.tf/libs201 *ACP: Provide \`TryFrom\<&\[T\]\>\` implementation for \`&\[\[T; N\]\]\`* ### (stalled change proposal) rust.tf/libs184 *Add \`setsid\` method to \`CommandExt\` trait* ### (stalled change proposal) rust.tf/libs111 *Restructure ptr\_metadata to minimal support* ### (stalled change proposal) rust.tf/libs347 *Context reactor hook* ### (stalled change proposal) rust.tf/libs207 *\`parse\_line\` method for \`Stdin\`* ### (stalled change proposal) rust.tf/libs124 *Integrate \`Error\` trait with panic interfaces* ### (stalled change proposal) rust.tf/libs337 *Add \`(checked\_)norem\_div\` methods for integer types* _Generated by [fully-automatic-rust-libs-team-triage-meeting-agenda-generator](https://github.com/rust-lang/libs-team/tree/main/tools/agenda-generator)_