---
date: 2025-03-25
url: https://hackmd.io/z0P2i6JNTlaazQURrc7idQ
---
# Libs-API Meeting 2025-03-25
###### tags: `Libs Meetings` `Minutes`
**Meeting Link**: https://meet.jit.si/rust-libs-meeting-crxoz2at8hiccp7b3ixf89qgxfymlbwr
**Attendees**: Amanieu, David, JoshT, Mara, Eric Holk, TC
## Agenda
- Triage
- Anything else?
## Triage
### FCPs
11 rust-lang/rust T-libs-api FCPs
- merge rust.tf/80437 *Tracking Issue for \`box\_into\_inner\`* - (1 checkboxes left)
- merge rust.tf/138498 *Implement Deref\<Target=ByteStr\> for CStr* - (3 checkboxes left)
- merge rust.tf/106418 *Implement \`PartialOrd\` and \`Ord\` for \`Discriminant\`* - (2 checkboxes left)
- merge rust.tf/130823 *Tracking Issue for \`non\_null\_from\_ref\`* - (3 checkboxes left)
- merge rust.tf/137280 *stabilize ptr::swap\_nonoverlapping in const* - (3 checkboxes left)
- merge rust.tf/115585 *Tracking issue for \`cfg\_match\`* - (4 checkboxes left)
- merge rust.tf/134213 *Stabilize \`naked\_functions\`* - (2 checkboxes left)
- merge rust.tf/122661 *Change the desugaring of \`assert!\` for better error output* - (3 checkboxes left)
- merge rust.tf/136877 *Fix missing const for inherent pointer \`replace\` methods* - (3 checkboxes left)
- merge rust.tf/137992 *Stabilise \`os\_string\_pathbuf\_leak\`* - (4 checkboxes left)
- merge rust.tf/138016 *Added \`Clone\` implementation for \`ChunkBy\`* - (3 checkboxes left)
[nikomatsakis (2)](https://rfcbot.rs/fcp/nikomatsakis), [scottmcm (2)](https://rfcbot.rs/fcp/scottmcm), [BurntSushi (8)](https://rfcbot.rs/fcp/BurntSushi), [joshtriplett (5)](https://rfcbot.rs/fcp/joshtriplett), [m-ou-se (4)](https://rfcbot.rs/fcp/m-ou-se), [dtolnay (2)](https://rfcbot.rs/fcp/dtolnay), [tmandry (1)](https://rfcbot.rs/fcp/tmandry), [Amanieu (7)](https://rfcbot.rs/fcp/Amanieu)
### (nominated) rust.tf/libs358 *Update Windows exe search order (phase 2)*
Amanieu: we discussed this previously. not coming to any conclusion
Amanieu: skip this one for now? since chris isn't here
JoshT: even with chris we might not be able to make progress
### (nominated) rust.tf/libs466 *ACP: Add nul\-terminated version of \`core::panic::Location::file\`*
Amanieu: prefer to push back on this. push linux to support ptr+len
Mara: acp seems fine to me
JoshT: our previous argument against this was overhead, but it looks like it has no overhead..
Amanieu: could be come a sliding scale. e.g. if we provide function name, should that also be nul terminated?
JoshT: can we make it flexible somehow, such that the kernel people can provide this themselves?
Mara: With nul terminated paths in Location, we could make Location smaller on our side too.
JoshT: Nora tried that. (Tiny performance improvement)
Mara: Are there any platforms that allow nul bytes inside paths?
Amanieu: No, all platforms support C.
JoshT: To my knowledge, no.
Mara: Seems fine to me
JoshT: I'd check my box, no objection
https://github.com/rust-lang/libs-team/issues/466#issuecomment-2461603806
Amanieu: bit of a weak argument
Amanieu: Somewhat opposed, but wouldn't block it if everyone else wanted it.
David: Same opinion as Amanieu. Not worried about performance. Bit worried about lack of pushback, could result in more requests
Mara: It seems reasonable to use FFI in a panic handler, to integrate Rust in an existing program.
David: Would like clear examples of that.
JoshT: Sounds like nobody has hard objections but the overall conclusion is 'meh', and there isn't a sufficiently compelling case for enthusiastic support.
David: We should have a higher bar for ACPs.
Mara: sgtm.
David: The bar can be low. but that bar hasn't been met. e.g. show that it requires a 2000 line kernel patch or something. or showing that their community is very opposed.
Amanieu: we would have to support this foverer. linux kernel doesn't have internal stability guarantees.
Mara: Even without FFI, i think it makes sense to use a nul terminated string here, considering paths can't contain nul. but maybe i'm a bigger fan of nul terminated strings than most rustaceans.
TC: Maybe we should hear from other people doing C/C++ interop.
JoshT: It would be good to have at least N==2 here.
Mara: Here's an example where we copy an entire string just to add a 0 byte. This is for the panic message, not the file location. https://github.com/rust-lang/rust/blob/master/library/panic_abort/src/android.rs
David: I don't know if there's a consensus in software engineering if ptr+size is 'better'.
Josh / Mara: Doesn't seem to be such a consensus. (but also no consensus for the opposite)
Josh: Also not clear that it's a win for a few C libraries to unilaterally switch if that means having to convert back and forth.
Conclusion: we need more compelling evidence (N=2 for people other than the Linux kernel wanting this, and evidence that this is sufficiently painful to work around in Linux)
Amanieu to reply
### (nominated) rust.tf/74985 *Tracking Issue for slice::array\_chunks*
Still stuck on the 0 thing.
TC: Shame it's stuck on this. Super useful function.
Poll from last time: https://hackmd.io/@rust-libs/SJWKrCToyx#nominated-rusttf74985-Tracking-Issue-for-slicearray_chunks
TC: Maybe we just resolve this in favor of doing a runtime panic. Then when on the lang side we add a `const match` feature for this, we deprecate this one and add the one we really want.
JoshT: Do we actually know of any case where someone does this on N with a runtime N!=0 check?
JoshT: Once we ship this as a runtime error, people can rely on it not being a compile time error.
David: I see the opposite as more 'two way': we can always add a warning. Almost as good, if not better, than an error.
Mara: +1. runtime check + lint
David: Yup, that's always been my preference.
Mara: we already have lints for similar cases, where we lint for things that will always panic, no?
David: The lint doesn't need to be perfect. If it catches basic cases, that's fine.
JoshT: I'd be happy, whatever is easiest to ship.
Amanieu: I don't think the compile time warning will be very useful. If the size is known in non-generic context, it doesn't add a lot of value. More likely to have bugs when you're forwarding some generic parameter. That's not something we have a warning for.
David: I agree that the lint isn't going to be super helpful. There's people interested in always improving diagnostics, but in general I don't think this is high on the list of worth putting effort in.
David: Wouldn't want to block stabilizing this.
Amanieu: So, start FCP? Current impl uses runtime panic
Amanieu to start FCP on tracking issue
### (nominated) rust.tf/134446 *Stabilize the \`cell\_update\` feature*
Mara: If this only accepts T: Copy anyway, Cell::get() before or afterwards is basically free (and no other thread can interfere anyway), so maybe just return nothing for clarity?
David: Fine either way
Amanieu: Returning nothing sounds good. need new FCP
TC: What's the advantage of returning nothing?
Mara: Avoiding confusion. might be unclear if we're giving the new or old value back.
David: The point of .update() is to make code more obvious.
Mara to (re)start FCP.
### (nominated) rust.tf/137198 *Rename \`cfg\_match!\` to \`cfg\_select!\`*
Mara: not convinced
JoshT: not convinced either. it feels closer to match than select. select works on multiple objects.
TC: Fine with `match`. From a programming theory perspective, `cfg_cond` might be more correct.
JoshT: Non-lisp people might not like that.
Amanieu: How about we make everyone unhappy and call it `switch`.
Conclusion: FCP for `cfg_match`.
### (nominated) rust.tf/137487 *Stabilize \`assert\_matches\` and move it to \`core::macros\`*
Amanieu: put it in the crate root, like the others?
Josht: Breaks some ecosystem.
Amanieu: Has the ecosystem fixed itself?
David: Should format!() and assert_eq!() be in the same module? Shouldn't `format!()` be in `std::fmt`?
Amanieu: don't care much about modules nowadays. mostly relevant for rustdoc.
### (nominated) rust.tf/137654 *Debug impls of ExtractIf have inconsistent trait bounds*
David: We need you, Amanieu, for this one, as it needs changes in `hashbrown`.
Amanieu: Let's change it as proposed here. I'm happy to make the change in `hashbrown`.
David: What we need is to remove the bound on the struct. https://docs.rs/hashbrown/0.15.2/hashbrown/hash_map/struct.ExtractIf.html
### (nominated) rust.tf/137738 *Make slice iterator constructors unstably const*
Sounds good.
David to respond.
### (waiting on team) rust.tf/136687 *Improve the documentation of \`Display\` and \`FromStr\`, and their interactions*
Josh: Propose skipping for now, it's a long discussion with context, let's go through a bunch of ACPs instead.
### (waiting on team) rust.tf/136912 *Add missing trait implementations for ScopedJoinHandle*
Josh to reply.
### (new change proposal) rust.tf/libs564 *Safe aligning of \`MaybeUninit\` mutable slices*
Approved. David to respond.
### (new change proposal) rust.tf/libs563 *Replace \`Debug::{key\_with, value\_with}\` with \`DebugMap::entry\_with\`*
Agreed to close. David to respond.
### (new change proposal) rust.tf/libs562 *Add ability to customize STARTUPINFO structure in Command API*
Waiting on ACP author to incorporate Josh's feedback.
### (new change proposal) rust.tf/libs561 *Add a function to convert \`&T\` to \`&MaybeUninit\<T\>\`*
We agree that `as_bytes` should have a `T: Freeze` bound, so we'd like to approve this conditional on that.
### (new change proposal) rust.tf/libs560 *Expose \`Arc::is\_unique\`*
Josh to respond with details.
(The meeting ended here.)
---
### (new change proposal) rust.tf/libs559 *Expose \`.set\_flags()\` on Posix \`CommandExt \`*
### (new change proposal) rust.tf/libs558 *Use \`TEB\` to get process information on Windows*
### (new change proposal) rust.tf/libs557 *Add \`iter::Peekable::next\_unpeek\`*
### (new change proposal) rust.tf/libs556 *fs::append*
### (new change proposal) rust.tf/libs555 *Add \`std::io::Seek\` instance for \`std::io::Take\<T\>\` when \`T: Seek\`*
### (stalled change proposal) rust.tf/libs333 *\`NonNull::{from\_ref, from\_mut}\`*
### (stalled change proposal) rust.tf/libs347 *Context reactor hook*
### (stalled change proposal) rust.tf/libs379 *Combine, an iterator adapter which statefully maps multiple input iterations to a single output iteration*
### (stalled change proposal) rust.tf/libs364 *ACP: Add {Box, Rc, Arc}::map and {Box, Rc, Arc}::try\_map*
### (stalled change proposal) rust.tf/libs181 *\`Cow::map\_borrowed\`, \`Cow::map\_owned\`, and \`Cow::map\`*
### (stalled change proposal) rust.tf/libs262 *Add infallible variant of RangeFrom::next()*
### (stalled change proposal) rust.tf/libs124 *Integrate \`Error\` trait with panic interfaces*
### (stalled change proposal) rust.tf/libs372 *ACP: env::home\_dir replacement*
### (stalled change proposal) rust.tf/libs295 *Create iterator function in std libs: split\_item\_mut()*
### (stalled change proposal) rust.tf/libs194 *Fix:Introduce an interface to expose the current \`Command\` captured env var logic*
_Generated by [fully-automatic-rust-libs-team-triage-meeting-agenda-generator](https://github.com/rust-lang/libs-team/tree/main/tools/agenda-generator)_