---
# System prepended metadata

title: Libs-API Meeting 2024-01-16
tags: [Minutes, Libs Meetings]

---

# 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)_
