Try   HackMD

Libs-API Meeting 2025-07-15

tags: Libs Meetings Minutes

Meeting Link: https://meet.jit.si/rust-libs-meeting-crxoz2at8hiccp7b3ixf89qgxfymlbwr
Attendees: Amanieu, David, The 8472, TC, Chris Denton, Martin

Agenda

  • Triage
  • Anything else?

Triage

FCPs

1 rust-lang/rfcs T-libs-api FCPs

  • merge rust.tf/rfc3809 RFC: enable `derive(From)` for single-field structs - (2 checkboxes left)

17 rust-lang/rust T-libs-api FCPs

  • merge rust.tf/80437 Tracking Issue for `box_into_inner` - (1 checkboxes left)
  • merge rust.tf/140808 Implement Default for &Option - (3 checkboxes left)
  • merge rust.tf/133289 Tracking Issue for `const_array_each_ref` - (4 checkboxes left)
  • merge rust.tf/143191 Stabilize `rwlock_downgrade` library feature - (3 checkboxes left)
  • merge rust.tf/143289 Remove `[T]::array_chunks(_mut)` - (3 checkboxes left)
  • merge rust.tf/106418 Implement `PartialOrd` and `Ord` for `Discriminant` - (2 checkboxes left)
  • merge rust.tf/65816 Tracking issue for `vec_into_raw_parts` - (3 checkboxes left)
  • merge rust.tf/132968 Tracking Issue for `NonZero<u*>::div_ceil` - (4 checkboxes left)
  • merge rust.tf/139087 Fallback `{float}` to `f32` when `f32: From<{float}>` and add `impl From<f16> for f32` - (5 checkboxes left)
  • merge rust.tf/129333 Tracking Issue for `lazy_get` - (3 checkboxes left)
  • merge rust.tf/127213 Tracking Issue for AVX512_FP16 intrinsics - (3 checkboxes left)
  • merge rust.tf/136306 Tracking Issue for NEON fp16 intrinsics - (3 checkboxes left)
  • merge rust.tf/141520 Tracking Issue for const {OsString, PathBuf}::new - (3 checkboxes left)
  • merge rust.tf/70530 Tracking Issue for {BTreeMap,BTreeSet}::extract_if - (3 checkboxes left)
  • merge rust.tf/141994 add Iterator::contains - (4 checkboxes left)
  • merge rust.tf/141744 Stabilize `ip_from` - (3 checkboxes left)
  • merge rust.tf/140956 `impl PartialEq<{str,String}> for {Path,PathBuf}` - (3 checkboxes left)

dtolnay (2), tmandry (1), BurntSushi (15), m-ou-se (15), Amanieu (3), joshtriplett (14), nikomatsakis (3), scottmcm (1), jackh726 (1)

(nominated) rust.tf/libs363 Un-specialize impl ToString

(nominated) rust.tf/libs615 Remove overriding impls of deprecated `Error::description`.

In favor

Widely used libraries for example serde_json::Error have removed it a long time ago

This simplifies our other discussion about deprecating description separately for deprecated-to-call vs deprecated-to-implement. We should be fine to simultaneously deprecate both

(nominated) rust.tf/143471 Is mutex poisoning guaranteed to always work properly?

Options:

  • declare poisoning as not guaranteed
  • replace panicking flag with a counter + fix foreign exceptions

See also:

Amanieu worked out how this could maybe be made reliable and will post a reply with details.

(nominated) rust.tf/143636 Make `int_format_into` API more flexible

TC: Looking at this diff, as proposed, this would have the same problem as with array_chunks, in that due to the assertion in the const block, one could not write a checked wrapper for the applicable const generic without const if.

Counterproposal:

impl<T> NumBuffer<T> {
    pub fn shorten<U>(&mut self) -> &mut NumBuffer<U> {
        const { assert }
        ...
    }
}

let mut big_buffer = NumBuffer::<u128>::new();
1u8.format_into(big_buffer.shorten());

(nominated) rust.tf/143717 Add `Default` impls for `Pin`ned `Box`, `Rc`, `Arc`

Looks good. FCP proposed.

(nominated) rust.tf/143829 Trim `BorrowedCursor` API

Seems OK. The8472 to reply.

(nominated) rust.tf/143832 Regression: intrinsics::drop_in_place removed

Seems still OK to go forward.

(waiting on team) rust.tf/139087 Fallback `{float}` to `f32` when `f32: From<{float}>` and add `impl From<f16> for f32`

Not waiting on us necessarily.

(waiting on team) rust.tf/143859 Guarantee 8 bytes of alignment in Thread::into_raw

Proposed FCP

(new change proposal) rust.tf/libs621 ACP: Add Waker::with_arc_wake

Nominated for wg-async.

(new change proposal) rust.tf/libs620 Simple `fill_bytes` function for platform provided secure random generation

We'll let this soak for another week for the discussion to continue.

(new change proposal) rust.tf/libs619 slice::get_clamped

We're asking for a more fleshed-out motivation.

(new change proposal) rust.tf/libs618 ACP: Implement fmt::Binary for [u8] and friends

We actually want this to work with Debug, e.g. println!("{x:b?}"). That requires updating the format string parsing. That's OK; we'll do that.

(new change proposal) rust.tf/libs617 Add `LocalKey<Cell>::update`

ACP accepted.

(new change proposal) rust.tf/libs616 API Proposal: Slice iterator helpers for taking chunks of data

We'll ask for benchmarks.

Also, scottmcm had mentioned that https://github.com/rust-lang/rust/pull/122971 could solve this in a different way. It seems maybe this could land now that an LLVM issue has been fixed. The8472 is the reviewer and will have a look.

(new change proposal) rust.tf/libs603 A `Static` receiver type for dyn-trait methods that do not take values

(new change proposal) rust.tf/libs587 ACP: `try_exact_div` method on `NonZero<{integer}>`

(new change proposal) rust.tf/libs578 ACP: hash_map! macro to create `HashMap`s such as `vec!`

We're going to accept this on nightly with => and leave an open question about the syntax.

This has lang overlap, as we may want to take a more lang-oriented approach to this. E.g., David suggests HashMap::from([ a => b ]). David proposes that we're underusing => in the language, and that perhaps we should lean into => for key/value pairs. In that model, => makes sense as the more preferred alternative in any case. a => b can desugar to (a, b) (only inside of [ ]?) or to some other struct, the way infix .. desugars to Range.

There are also open questions on the lang side about whether we want to continue using : for struct initialization forever.

(new change proposal) rust.tf/libs575 ACP: Add Entry-like API for Option

impl Option<T> {
    // Already stable
    fn inspect(self, f: impl FnOnce(&T)) -> Option<T>;
    fn replace(&mut self, value: T) -> Option<T>;

    fn update(&mut self, f: impl FnOnce(&mut T)) -> &mut Self;
    fn update(self, f: impl FnOnce(&mut T)) -> Self;
    
    // returns old value
    fn replace_with(&mut self, f: impl FnOnce(&mut T) -> T) -> Option<T>;
}

impl Cell<T> {
    fn update(&self, f: impl FnOnce(T) -> T);
}

We decided we needed to sleep on this one.

(stalled change proposal) rust.tf/libs296 ACP: Designing an alternative `FromStr`

(stalled change proposal) rust.tf/libs295 Create iterator function in std libs: split_item_mut()

(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/libs360 make FromResidual #[fundamental]

(stalled change proposal) rust.tf/libs304 ACP: Avoid the common mistake of `for x in 0u8..`

(stalled change proposal) rust.tf/libs262 Add infallible variant of RangeFrom::next()

(stalled change proposal) rust.tf/libs456 Add Option::todo and Result::todo

(stalled change proposal) rust.tf/libs347 Context reactor hook

(stalled change proposal) rust.tf/libs336 Add `or_try_*` variants for HashMap and BTreeMap Entry APIs

(stalled change proposal) rust.tf/libs348 std::os::unix::env::{argc, argv}

Generated by fully-automatic-rust-libs-team-triage-meeting-agenda-generator