---
# System prepended metadata

title: Libs-API Meeting 2023-06-27
tags: [Libs Meetings, Minutes]

---


**Meeting Link**: https://meet.jit.si/rust-libs-meeting-crxoz2at8hiccp7b3ixf89qgxfymlbwr
**Attendees**: Amanieu, David, Josh, Mara, The 8472, Chris Denton, Urgau

## Agenda

- Triage
- Anything else?

## Triage

### FCPs

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

  - merge rust.tf/88581 *Tracking Issue for \`int\_roundings\`* - (1 checkboxes left)
  - merge rust.tf/80437 *Tracking Issue for \`box\_into\_inner\`* - (1 checkboxes left)
  - merge rust.tf/91946 *Tracking Issue for \`io::Error::other\`* - (3 checkboxes left)
  - merge rust.tf/98461 *Document lack of panic safety guarantees of \`Clone::clone\_from\`* - (0 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* - (4 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/107587 *Mark \`std\` integral modules as deprecated (\`std::u32\`, \`std::i16\`, etc.)* - (4 checkboxes left)

[dtolnay (3)](https://rfcbot.rs/fcp/dtolnay), [joshtriplett (3)](https://rfcbot.rs/fcp/joshtriplett), [Amanieu (3)](https://rfcbot.rs/fcp/Amanieu), [m-ou-se (5)](https://rfcbot.rs/fcp/m-ou-se), [yaahc (4)](https://rfcbot.rs/fcp/yaahc), [BurntSushi (6)](https://rfcbot.rs/fcp/BurntSushi)

### (nominated) rust.tf/73014 *Tracking issue for std::default::default()*

Mara: This has been open for a long time. Time to either stabilize or remove it?

Mara: Remove it? It doesn't seem worth it, and it has some subtle downsides. (E.g. recurison detection, see latest comments.)

Amanieu: Can we expect a lang solution for this any time soon-ish?

The 8472: `use Default::default`?

Josh: Afaik, it's more of an implementation question. Lang would probably be on board with importing trait methods, but implementation might be hard.

Mara: FCP was attempted before in september 2021, but didn't go anywhere.

Josh: That's because we wanted to wait for lang features, but those still didn't happen.

The 8472: If someone writes Default::default a lot, their own macro or own function also solves this, right?

Amanieu: In favor of closing this, push people towards developing the language feature.

Amanieu: I don't think we can do this in a backwards compatible way, with first a free function and later importing the trait associated function.

Josh: Difference would be turbofish, `default::<i32>()` won't work for `Default::default`.

(Non-turbofished default free function isn't possible to express today. `-> impl Default` isn't it.)

Amanieu: FCP postpone and explicitly ask for language proposal.

Mara: What does postpone mean? Rip it out of nightly or keep it? Prefer removing it.

Amanieu: Let's keep it in nightly?

David: Remove it?

Let's close and remove it.

Amanieu to respond.

### (nominated) rust.tf/111884 *Clarify intended use case for From/TryFrom/Into/TryInto*

Discussed in last meeting. Waiting on author.

### (nominated) rust.tf/112423 *std::process:\:Child::kill should not fail if process is terminated on Windows*

FCP started a week or two ago. Label removed.

### (nominated) rust.tf/112858 *Update Android system definitions and add riscv\-linux\-android as tier 3 target*

Mara: This adds a target, but also changes some u32 aliases tot u64, etc. In a deprecated module.

Amanieu: Should've been two PRs

It's breaking, but it seems like it was in a broken state before.

David: Not clear if it was already broken? What about other targets?

The 8472: Seems relevant for all Android targets.

Amanieu: The author is on the Android team at Google.

Mara: The os::android::raw module is deprecated. Depending on usage, we could maybe remove it instead of fixing it?

Mara: On github code search I only find "os::android::raw" in copies of `std` itself.

David: This was deprecated in 1.8. Did that version even support Android?

David: Alternative: We can mark them as `unstable` rather than fully removing them?

Josh: That's still breaking.

David: The delta to getting their code to work again is smaller.

Josh: That sounds like a breaking change with extra steps.

Josh: Prefer just fixing the types.

Mara: Sounds good to me, but if they were always incorrect, that's a strong indicator that they are probably unused.

Conclusion: Fixing these types :+1:

David: Curious how they got wrong though.

Seems to be a copy-paste error

Conclusion: Ask to split the PR and do an FCP for the type changes.

Amanieu to reply.

### (waiting on team) rust.tf/100455 *Implement RefUnwindSafe for Backtrace*

Amanieu: Dislike RefUnwindSafe.

Mara: Yes, we should remove it or something.

David: This PR seems fine, just FCP?

(some discussion on whether Backtrace is ref unwind safe. -> yes)

Amanieu: It's annoying that we have to do this for all types.

Mara: We already have types that implement (Ref)UnwindSafe that are not.

FCP proposed.

### (waiting on team) rust.tf/107587 *Mark \`std\` integral modules as deprecated (\`std::u32\`, \`std::i16\`, etc.)*

Mara: Last week we steered towards a clippy lint. Someone already implemented a first version of that.

We can snooze this and check back in a few months or so.

### (new change proposal) rust.tf/libs238 *ACP: \`NonNanFNN\` and \`FiniteFNN\` float wrappers*

Discussed recently. Resulted in more discussion on the thread, ongoing. Mara to continue the discussion. No team response required now.

### (new change proposal) rust.tf/libs241 *Make \`Box\` comparisons independent of allocator choice*

David: We did the same for Vec recently.

Mara: This doesn't affect stable

David: Is there ever a situation where you'd also want to compare the allocator itself instead of just the value in a Box?

Mara: No, don't think so. Same as comparing capacity for Vec.

David: Doesn't need an FCP, so we can accept the ACP and directly accept the PR.

The 8472: We should mention it on the allocator tracking issue, since it changes that feature.

Mara left a comment on the ACP.

Josh to review the PR.

### (new change proposal) rust.tf/libs242 *proc\_macro: Implementation of Extend (parameterized over Group, Ident, Punct, and Literal) for TokenStream*

Already accepted. Should've been closed.

### (new change proposal) rust.tf/libs244 *add wrapping\_offset\_from*

Mara: Tangent:  What's up with the new ACP policy?
Amanieu: Oh, will work on that and merge it.

Ths 8472: This still requires the pointers to be from the same allocation?

David: It's an unsafe function, unlike the other wrapping functions.

Mara: When would you call this function instead of just offset_from?

Amanieu: wrapping_offset_from doesn't require them to be in bounds, although it still requires them to be from the same allocation.

The 8472: It could be safe, by casting both pointers to usize and then subtracting. Why is that not used?

Josh: Pointer provenance?

The 8472 + David: This returns a usize, no pointer provenance involved.

Mara: Not convinced we should have an unsafe wrapping function, since all others are safe.

Amanieu: Requiring that both pointers are from the same allocation is necessary for const eval.

Mara: Would it be fine if it was safe, but const eval can still result in an error if the pointers are not from the same allocation?

Amanieu: There is also the alignment requirement.

Mara: Just round down?

Amanieu: That doesn't allow for the efficient llvm intrinsic.

David: Use case for ZST slices is mentioned: In an iterator with a start+end pointer pair, pretend the ZST elements are 1 byte and use a out-of-bounds pointer.

The 8472: Alternative is to use a union of pointer and usize, and use the usize for ZST types. Does const eval support unions?

[..] Or use pointer::invalid() to create that.

David: Ralf says you cannot iterate like that over a ZST slice today in const.

The 8472 + Mara: Seems like you can.

David: Question for Ralf then?

Main question seems basically "what's the use case and does that have a different solution?".

Mara to reply.

Let's talk more about it next week.

### (new change proposal) rust.tf/libs245 *Remove \`MaybeUninit::slice\_as\_(mut\_)ptr\` and optionally add \`\*const/\*mut MaybeUninit\<T\> \-\> \*const/\*mut T\` type safe conversions*

Mara: Removing :+1:

Amanieu: Removing seems fine.

Mara: The newly proposed methods: those are methods on pointers rather than on MaybeUninit, but perhaps that's just a rustdoc issue.

Mara: How would methods on pointers scale if we add this for other types in the future too? (UnsafeCell, Atomic, .. etc?)

Amanieu: The general problem seems to be casting pointers between repr(transparent) wrappers.

Amanieu: This is the projection stuff we talked about before.

Mara: Yup.

Amanieu: You can also just do .cast(). That'd just work.

David: But then you must get the type correct, though.

David: I don't see a strong motivation for adding methods on the pointer type. Maybe on the MaybeUninit type, but probably unnecessary. Additional type safety might not be worth it.

The 8472: The second part in the ACP is optional. So let's not accept the second part.

David: What about the first part? (Removing a method.)

Mara: Amanieu and I +1'd that.

Josh: Seems fine to me too.

The 8472: About part 2: Can we do it as `impl MaybeUninit { fn ..(self: *const Self) .. }`? Can arbitrary self types do that?

Mara: You might want to go through two wrappers or two slices, which is not covered by these methods. Maybe .cast() is enough.

{more discussion on alternative methods}

Mara: Let's just accept part 1 and not part 2.

Mara left a comment.

### (stalled change proposal) rust.tf/libs116 *Lossy UTF8 conversion of owned types (\`Vec::\<u8\>::into\_utf8\_lossy\`).*

Mara: Seems like this should go on String rather than Vec, but unfortunately String::from_utf8_lossy is already taken by the slice input version.

The 8472: See my comment about an alternative: It could be a method on FromUtf8Error, since FromUtf8Error still owns the Vec and knows where the first failure was.

Josh: Significantly more verbose though.

Mara: Wouldn't mind having both.

Amanieu: Original proposal seems fine.

Josh: Zero objection to also add it to FromUtf8Error. Not sure how often it'd be used though.

Mara: We'd use it in the implementation of Vec::into_utf8_lossy :)

David: Naming: Should it be "utf8" or "string"?

Mara: Agree that's an issue.

The 8472: Then maybe it should be on String, using "from utf8" naming?

Josh: Having it on Vec might be more convnient.

Amanieu: Could we *change* the existing from_utf8_lossy to take a Into Cow instead of a &[u8]?

Mara: That might be too generic; accept too much.

The 8472: Could be a custom trait rather than Into.

David: How about: String::from_utf8_lossy_owned? Currently you'd already write 'owned' as part of 'String::from_utf8_lossy().into_owned()'.

Mara: +1

Amanieu + Josh: from_owned_utf8_lossy?

David: Prefer `_owned` at the end. My justification is... weak. ^^'

David: I'd call this because i care that the output is owned, more than that the input is owned.

The 8472: Also nice for autocompletion, that from_utf8_lossy will also suggest the \_owned version.

~~David~~ Josh to comment

### (stalled change proposal) rust.tf/libs124 *Integrate \`Error\` trait with panic interfaces*

Skipped; too large to discuss right now.

### (stalled change proposal) rust.tf/libs119 *ACP: Add a constant for the golden ratio (phi) to the floating point types*

All of these exist in C++.

Seems fine.

Josh to comment.

### (stalled change proposal) rust.tf/libs115 *ACP: Range::cmp\_scalar; comparison (less/equal/greater) to a primitive of the Range*

`binary_search_by` example seemed compelling

There's more to discuss than we can fit in this meeting, but do we want something like this at all?

Mara: Yes

Josh: Yes

.. *silence*

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