Try   HackMD

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), scottmcm (2), BurntSushi (8), joshtriplett (5), m-ou-se (4), dtolnay (2), tmandry (1), Amanieu (7)

(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