---
# System prepended metadata

title: Libs-API Meeting 2024-02-20
tags: [Minutes, Libs Meetings]

---

# Libs-API Meeting 2024-02-20

###### tags: `Libs Meetings` `Minutes`

**Meeting Link**: https://meet.jit.si/rust-libs-meeting-crxoz2at8hiccp7b3ixf89qgxfymlbwr
**Attendees**: ...

## Agenda

- Triage
- Anything else?

## Triage

### FCPs

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

  - merge rust.tf/rfc3550 *RFC: New range types for Edition 2024* - (5 checkboxes left)

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

  - merge rust.tf/80437 *Tracking Issue for \`box\_into\_inner\`* - (1 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/120257 *Tracking Issue for generic \`NonZero\`* - (4 checkboxes left)
  - merge rust.tf/98934 *Add \`Option::take\_if\`* - (3 checkboxes left)
  - merge rust.tf/116016 *Soft\-destabilize \`RustcEncodable\` & \`RustcDecodable\`, remove from prelude in next edition* - (3 checkboxes left)
  - merge rust.tf/100824 *use \`confstr(\_CS\_DARWIN\_USER\_TEMP\_DIR, ...)\` as a \`TMPDIR\` fallback on Darwin* - (3 checkboxes left)
  - merge rust.tf/99969 *alloc: implement FromIterator for Box\<str\>* - (3 checkboxes left)
  - merge rust.tf/118741 *Added Default impl for Ipv4 and Ipv6 struct* - (3 checkboxes left)
  - merge rust.tf/114655 *Make \`impl\<Fd: AsFd\>\` impl take \`?Sized\`* - (3 checkboxes left)
  - merge rust.tf/102012 *Tracking Issue for \`const\_waker\`* - (3 checkboxes left)
  - merge rust.tf/106943 *Implement DoubleEnded and ExactSize for Take\<Repeat\> and Take\<RepeatWith\>* - (3 checkboxes left)
  - merge rust.tf/117215 *Tracking Issue for ARM CRC32 intrinsics* - (3 checkboxes left)
  - merge rust.tf/99262 *Tracking Issue for \`io\_error\_downcast\`* - (3 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/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/115974 *Split core's PanicInfo and std's PanicInfo* - (2 checkboxes left)
  - merge rust.tf/117468 *Stabilize Wasm relaxed SIMD* - (4 checkboxes left)
  - merge rust.tf/101196 *Tracking Issue for \`Ready::into\_inner()\`* - (1 checkboxes left)
  - merge rust.tf/119131 *Tracking Issue for \`hint::assert\_unchecked\`* - (3 checkboxes left)

[BurntSushi (12)](https://rfcbot.rs/fcp/BurntSushi), [Amanieu (12)](https://rfcbot.rs/fcp/Amanieu), [dtolnay (1)](https://rfcbot.rs/fcp/dtolnay), [m-ou-se (16)](https://rfcbot.rs/fcp/m-ou-se), [joshtriplett (18)](https://rfcbot.rs/fcp/joshtriplett)

### (nominated) rust.tf/libs193 *Add \`sync::ReentrantLock\`*

Mara: Any objections?

Amanieu: fine with me. but there are unresolved questions: poison, fallible locking, naming.

Amanieu: prefer ReentrantMutex.

Mara: Agree with the point on poison, to not have it.

David: Would people use this instead of Mutex if this doesn't have poison?

Mara: No, because this provide mutable access, so can't replace Mutex.

The 8472: This could use a good example.

Amanieu: Example is a `ReentrantMutex<RefCell>`

Mara: Implementation PR has good examples: https://github.com/rust-lang/rust/pull/110543/files

Mara replied.

### (nominated) rust.tf/76014 *Tracking Issue for slice::split\_at\_unchecked() and split\_at\_mut\_unchecked()*

Mara: Someone submitted a PR to stabilize this. Not sure how much we want this. I feel very neutral.

David: I think it's fine.

..: the non-mut version is a bit useless, but so is split_at (already stable).

Mara proposed FCP.

### (nominated) rust.tf/106418 *Implement \`PartialOrd\` and \`Ord\` for \`Discriminant\`*

David: We considered two options: Implement it for all enums, or only for some with a marker. We were okay with doing it for all enums, as long as we set clear expectations on stability. Lots of discussion since then.

David: Want to make sure we're all on board with continuing with implementing this for all enums.

Amanieu: On board with that. Stability is same as transmuting etc.

Josh: To the extent there would be any complaints, it seems like many of them would apply to the concept of having `Discriminant` in the first place. Since we have `Discriminant`, let's make it maximally useful. No objections.

David to pass the issue on to lang. Eventually will FCP with both teams.


### (nominated) rust.tf/107462 *Implement \`FromIterator\` for \`(impl Default + Extend, impl Default + Extend)\`*

The 8472: This already exists: https://doc.rust-lang.org/nightly/std/iter/trait.Iterator.html#method.unzip

David: .collect() wouldn't automatically use that.

David: This adds unzip behaviour to .collect().

Mara: Ideally the bounds would be both `: FromIterator`, but that cannot work.

David: One could be `: FromIterator`?

Mara: Hm yes, but then it's asymetrical. :(

David: I think it's fine to add as proposed.

Amanieu to propose FCP.

### (nominated) rust.tf/117658 *rename ptr::invalid \-\> ptr::without\_provenance*

Amanieu: I think invalid() is fine

Mara: https://github.com/rust-lang/rfcs/pull/3559 was merged, so that removes some barrier for using the word "provenance" here.

David: ptr::zero_bytes_at?

Mara: That makes sense for ZST, but is very confusing for most usages of ptr::invalid like stuffing flags into pointers.

David: I think `invalid` was fine, but don't care too much.

David: It's not removing provenance from something that had provenance. It's not adding it.

Mara: no_provenance?

David: I like that better.

David: Though, it's not turning off the concept of provenance.

Josh: Lol, if only.

Amanieu: let's just merge this? it remains unstable..

Mara to merge.

### (nominated) rust.tf/120219 *core: implement Add and AddAssign for ascii::Char*

Josh: Am i right that the issue is the wrapping behaviour, not the concept of addition for ascii chars?

Amanieu: my objection is with the concept of ascii::Char.

Mara: For `char` we also don't have addition.

The 8472: For base64 implementations or w/e you want to offset ascii chars.. conversion would make it inefficient

Amanieu: You'd need to check anyway. Addition for ascii::Char would still need to check/mask.

The 8472: Masking is faster than other options though.

Josh: I think to some extent if you argue that you shouldn't be able to do math on this directly (only by converting to/from u8), that defeats some of the purpose of having this (giving people something better to use than u8). If we don't want this to exist at *all*, fine, but if we want this to exist then we should implement arithmetic for it.

Mara: Note that `char` implements `Step`. but that's something different than allowing addition.

Amanieu: original motivation was zero-cost conversion from `&[ascii::Char]` to `&str`. not do do easy arithmetic on chars.

Amanieu: you can mask and use unsafe conversion manually

The 8472: but then you don't get the debug/release panic/mask behaviour.

Josh: Should we reevaluate whether we want ascii::Char?

Amanieu: ascii::Char has merits for conversion to &str. not sure i like ascii::Char, but don't want to add Add to it regardless.

Mara: There are only ~three useful ranges in the ascii table: digits, and (upper/lower) alphabet. Maybe just have methods for those, leaving other usage to unsafe {}.

The 8472: Aren't the base64 special characters adjacent?

Mara: No?

Josh: There are other bit twiddling things you can do, e.g. to or from lower case.

Mara: My point is that we can have methods for each of those. (We already do?)

Mara: digit(8) is more readable than '0' + 8 anyway.

Josh: The result of not adding Add ascii::Char if it's less convenient than u8 is people not using it. But that's fine.

Mara: That's the same as NonZero being less convenient for not having Add.

Mara: Similar to `[NonZero<u8>]` being useful for CStr, `[ascii::Char]` is useful for str.
Not everyone uses NonZero, but it's still useful.

Amanieu: conclusion?

Josh: There are objections to adding it, so that means not adding it.

Amanieu: I can summarize the discussion.

### (nominated) rust.tf/120234 *stabilise assert\_matches*

Amanieu: in 2021, this wasn't done because Mara wanted a migration lint

David: that should work out of the box today right?

..

Mara: This PR doesn't do something with editions

Mara: Currently, it is in std::assert_matches::assert_matches, which is terrible.

Mara: std::assert::assert_matches didn't work because of std::assert

David: Would `use std::assert;` work fine if std::assert was a *stable* module (and a macro)?

David: Maybe `use std::assert; mod assert {} assert::thing()` was the issue.

Mara: Also an issue was brouht up on the `if`. Don't think it's a problem.

Amanieu: Also don't think it's a problem.

David: Agree.

Amanieu: i think we're all happy with assert_matches itself. Question is if we can put it in std's root, like the other macros.

Mara: If not the root, we need a good module name. std::assert won't work.

Mara: We could put it in std::panic.

Amanieu: all assert macros are already in the root. we should put it with the others.

Mara: But then things will break.

Amanieu: is std imported with #[macro_use]?

Mara: Yes.

Amanieu: Ah. :(

Amanieu: if we put all of the macros in the prelude, and remove the macro_use attribute, ..

David: no_implicit_prelude is stable.

Amanieu: postpone till next week.

---

### (nominated) rust.tf/120580 *Add \`MAX\_LEN\_UTF8\` and \`MAX\_LEN\_UTF16\` Constants*

### (nominated) rust.tf/121201 *align\_offset, align\_to: no longer allow implementations to spuriously fail to align*


### (waiting on team) rust.tf/119550 *Rename \`AsyncIterator\` back to \`Stream\`, introduce an AFIT\-based \`AsyncIterator\` trait*



### (new change proposal) rust.tf/libs334 *Customizing \`#\[derive(Debug)\]\`*

### (new change proposal) rust.tf/libs335 *ACP: \`PathBuf::make\_dir\`*

### (new change proposal) rust.tf/libs336 *Add \`or\_try\_\*\` variants for HashMap and BTreeMap Entry APIs*

### (new change proposal) rust.tf/libs337 *Add \`(checked\_)norem\_div\` methods for integer types*

### (new change proposal) rust.tf/libs338 *RefInit: RAII wrapper for initialized MaybeUninit references*


### (stalled change proposal) rust.tf/libs142 *Add \`take\_while\_inclusive\` method to \`Iterator\`*

### (stalled change proposal) rust.tf/libs114 *ACP: Method to split OsStr into \`(str, OsStr)\`*

### (stalled change proposal) rust.tf/libs190 *Move \`Utf8Chunks::new\` to be inherent on \`\[u8\]\`*

### (stalled change proposal) rust.tf/libs157 *fold\_first API Change Proposal*

### (stalled change proposal) rust.tf/libs203 *ACP: \`std::os::windows::fs::junction\_point\`*


_Generated by [fully-automatic-rust-libs-team-triage-meeting-agenda-generator](https://github.com/rust-lang/libs-team/tree/main/tools/agenda-generator)_
