# Libs-API Meeting 2024-01-16 ###### tags: `Libs Meetings` `Minutes` **Meeting Link**: https://meet.jit.si/rust-libs-meeting-crxoz2at8hiccp7b3ixf89qgxfymlbwr **Attendees**: Amanieu, Mara, David, Josh, Chris Denton, The8472, Urgau ## Agenda - Triage - Anything else? ## Triage ### FCPs 18 rust-lang/rust T-libs-api FCPs - merge rust.tf/80437 *Tracking Issue for \`box\_into\_inner\`* - (1 checkboxes left) - merge rust.tf/52331 *Correcting Path::components on Redox* - (5 checkboxes left) - merge rust.tf/82901 *Tracking Issue for \`Option::get\_or\_insert\_default\`* - (2 checkboxes left) - merge rust.tf/83871 *Tracking Issue for CharIndices::offset function* - (3 checkboxes left) - merge rust.tf/98934 *Add \`Option::take\_if\`* - (3 checkboxes left) - merge rust.tf/115386 *PartialEq, PartialOrd: update and synchronize handling of transitive chains* - (3 checkboxes left) - merge rust.tf/113489 *impl \`From\<&\[T; N\]\>\` for \`Cow\<\[T\]\>\`* - (3 checkboxes left) - merge rust.tf/99262 *Tracking Issue for \`io\_error\_downcast\`* - (4 checkboxes left) - merge rust.tf/106655 *Tracking Issue for \`#!\[feature(offset\_of)\]\`* - (0 checkboxes left) - merge rust.tf/62726 *Tracking issue for io\_slice\_advance* - (3 checkboxes left) - merge rust.tf/106418 *Implement \`PartialOrd\` and \`Ord\` for \`Discriminant\`* - (0 checkboxes left) - merge rust.tf/76118 *Tracking Issue for \`array\_methods\`* - (3 checkboxes left) - merge rust.tf/109402 *Implement owned ops for \`HashSet\` and \`BTreeSet\`* - (4 checkboxes left) - merge rust.tf/116113 * Generalize \`{Rc,Arc}::make\_mut()\` to unsized types.* - (4 checkboxes left) - merge rust.tf/113833 *\`std::error::Error\` \-\> Trait Implementations: lifetimes consistency improvement* - (3 checkboxes left) - merge rust.tf/115974 *Split core's PanicInfo and std's PanicInfo* - (3 checkboxes left) - merge rust.tf/117468 *Stabilize Wasm relaxed SIMD* - (5 checkboxes left) - merge rust.tf/101196 *Tracking Issue for \`Ready::into\_inner()\`* - (2 checkboxes left) [Amanieu (11)](https://rfcbot.rs/fcp/Amanieu), [joshtriplett (13)](https://rfcbot.rs/fcp/joshtriplett), [dtolnay (2)](https://rfcbot.rs/fcp/dtolnay), [BurntSushi (8)](https://rfcbot.rs/fcp/BurntSushi), [m-ou-se (10)](https://rfcbot.rs/fcp/m-ou-se) ### (nominated) rust.tf/libs320 *Libs\-team RFC guidelines appear to be out of date* Amanieu to follow up. ### (nominated) rust.tf/96710 *Tracking Issue for \`round\_ties\_even\`* FCP started, unnominating. ### (nominated) rust.tf/99262 *Tracking Issue for \`io\_error\_downcast\`* Josh: one concern about Box in the signature was related to a push to move io::Error into core, which seemed feasible except for io::Error being able to hold a Box. But it turns out there is Box in several other methods, so we don't need to block adding more. Amanieu: why can't it return `E` directly as opposed to `Box<E>`? Mara: that would potentially involve large memcpy Mara: if in the future we introduce a specialization to avoid double boxing things like String, then downcast would need to needlessly invent a new Box to return Box\<String\> Amanieu: considering this is all related to an error codepath, double boxing String doesn't seem bad Josh: Tradeoff seems like: if you wanted it in a box, Josh: In theory if we're already pulling specialization stunts, we *could* let you call `downcast::<Box<SomeError>>` if you want it boxed. Mara: Rename to `downcast_box`? David: I like the downcast::<Box<..>> idea. Mara: Can we do that? What about `downcast::<Box<Box<Box<..>>>>` David: We'd store the typeid of the box, not of the E. but that would require storing extra info. Amanieu: Just returning `E` without Box seems fine, because all other use cases are covered by into_inner, i think Amanieu: Let's ask to update the docs, remove the Box, and then start the FCP Mara: Sounds good Amanieu to reply. ### (nominated) rust.tf/117561 *Stabilize \`slice\_first\_last\_chunk\`* In FCP. Do we want to reserve the same names on `[T; N]`? Talked about that last week: No, don't under the same names. Removed nominated label. ### (nominated) rust.tf/118580 *Provide a way for custom derives to know if they were invoked via \`#\[derive\_const\]\`* Mara: As unstable, seems fine. Amanieu: Needs tracking issue. Mara: Go ahead as long as we get an FCP for stabilzation? Mara replied. ### (waiting on team) rust.tf/119550 *Rename \`AsyncIterator\` back to \`Stream\`, introduce an AFIT\-based \`AsyncIterator\` trait* _"After some offline conversations I'm converting this to a draft PR until we have consensus within WG Async how we want to proceed"_ Mara: Not nominated for us, waiting-on-team is for wg async i think? ### (new change proposal) rust.tf/libs323 *Add \`ptr::fn\_addr\_eq\` to compare functions pointers.* ### (new change proposal) rust.tf/libs325 *Add macro \`static\_assert\` to perform compile\-time assertion checking* ### (new change proposal) rust.tf/libs326 *ACP: Add \`OsStr::display\` (similar to \`Path::display\`)* Mara: ship it Josh: yes please Mara: should there be separate Display *type* for OsStr vs Path? Or reuse the same type David: related PR https://github.com/rust-lang/rust/pull/112136 adding std::ffi::c_str Let's put the type in std::ffi::os_str::Display, and make std::path::Display an alias 8472: will path::Display ever need to do different normalization like stripping `..`? Amanieu: it doesn't cost us much to just have separate Display types 8472: we have enough problems with Path that I don't feel comfortable coupling Path's internals into other types Amanieu to reply accepting ACP ### (new change proposal) rust.tf/libs327 *Add Wrapping/Saturating::from\_mut reference conversions* ### (new change proposal) rust.tf/libs328 *Add \`Option::merge\`* Mara: Iterator::reduce? Amanieu: zip_with? David: Not zip_with, that is None if either is None. Josh: Is `merge` any clearer than just a if-let or match? Mara: Let's ask them why `Iterator::reduce` is not good enough. If that's not good enough, we can re consider. Mara replied. ### (stalled change proposal) rust.tf/libs120 *ACP: Uplift \`iter::repeat\_n\` from itertools* Amanieu: seems fine David/Josh/Mara: looks good Amanieu: can we make .repeat(x).take(n) more optimal? Josh: even if so, repeat_n still seems clearer Related: https://github.com/rust-lang/rust/pull/106943 "Implement DoubleEnded and ExactSize for Take<Repeat> and Take<RepeatWith>" Josh to reply accepting the ACP ### ACP: Add OsStr::display (similar to Path::display) #326 Amanieu: Fine, with a separate Display type Mara: Slightly prefer reusing the existing path::Display type with an alias. David: Name? std::ffi::os_str::Display David: Prefer making it an alias for std::path::Display The 8472: We might want path::Display to do something more? Mara: That should then be a different method on path. Path::display() and OsStr::display() should show the same. Mara: Separate types also fine. Amanieu to reply ### (stalled change proposal) rust.tf/libs164 *Add methods for use cases that \`align\_to\` does not cover* ### (stalled change proposal) rust.tf/libs155 *Arbitrary alternate flags in \`std::fmt::Formatter\`* ### (stalled change proposal) rust.tf/libs124 *Integrate \`Error\` trait with panic interfaces* ### (stalled change proposal) rust.tf/libs111 *Restructure ptr\_metadata to minimal support* _Generated by [fully-automatic-rust-libs-team-triage-meeting-agenda-generator](https://github.com/rust-lang/libs-team/tree/main/tools/agenda-generator)_