Skip to content

Conversation

clarfonthey
Copy link
Contributor

@clarfonthey clarfonthey commented Aug 11, 2025

This is the first part of #144289 being split into smaller pieces. It adds/moves constness of several traits under the const_convert feature:

  • From
  • Into
  • TryFrom
  • TryInto
  • FromStr
  • AsRef
  • AsMut
  • Borrow
  • BorrowMut
  • Deref
  • DerefMut

There are a few methods that are intrinsically tied to these traits which I've included in the feature. Particularly, those which are wrappers over AsRef:

  • ByteStr::new (unstable under bstr feature)
  • OsStr::new
  • Path::new

Those which directly use Into:

  • Result::into_ok
  • Result::into_err

And those which use Deref and DerefMut:

  • Pin::as_ref
  • Pin::as_mut
  • Pin::as_deref_mut

The parts which are missing from this PR are:

  • Anything that involves heap-allocated types
  • Making any method const than the ones listed above
  • Anything that could rely on the above, or could rely on system-specific code for OsStr or Path (note: this mostly makes these methods useless since str doesn't implement AsRef<OsStr> yet, but it's better to track the method for now and add impls later, IMHO)

r? @tgross35 (who mostly already reviewed this)

@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. T-libs Relevant to the library team, which will review and decide on the PR/issue. labels Aug 11, 2025
#![feature(const_default)]
#![feature(const_eval_select)]
#![feature(const_heap)]
#![feature(const_trait_impl)]
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Was listed under library features, and is actually a language feature. Since the diff doesn't make that clear.

Comment on lines +117 to +121
// FIXME(const-hack): this should use map_err instead
match u8::try_from(u32::from(c)) {
Ok(b) => Ok(b),
Err(_) => Err(TryFromCharError(())),
}
Copy link
Contributor Author

@clarfonthey clarfonthey Aug 11, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You mentioned not wanting to add any more const-hacks, but I figured this one (+ for u16 below) was okay because we're already going to have to fix a lot of const code once things are stable, and I think that simple char <-> integer conversions are useful enough to get on nightly sooner. Especially since const closures seem pretty far off at the moment.

@bors
Copy link
Collaborator

bors commented Aug 13, 2025

☔ The latest upstream changes (presumably #145334) made this pull request unmergeable. Please resolve the merge conflicts.

@clarfonthey clarfonthey force-pushed the const-convert-initial branch from 365fcde to 97c330f Compare August 13, 2025 16:40
@clarfonthey
Copy link
Contributor Author

Rebasing over #144847 since that one conflicts with this one, which is why I was going to do this one before I got to that one, but, it's in the queue now, so, 🤷🏻.

Only changes with the rebase are eliminating more additions of const_from which is renamed to const_convert.

@clarfonthey clarfonthey force-pushed the const-convert-initial branch from 97c330f to 4ebb4b7 Compare August 17, 2025 18:58
@rustbot
Copy link
Collaborator

rustbot commented Aug 17, 2025

This PR was rebased onto a different master commit! Check out the changes with our range-diff.

@bors
Copy link
Collaborator

bors commented Aug 20, 2025

☔ The latest upstream changes (presumably #145644) made this pull request unmergeable. Please resolve the merge conflicts.

@clarfonthey
Copy link
Contributor Author

Will rebase once that PR gets merged. I can mark it as blocked, but it still can be reviewed before to verify you're comfortable with the changes.

@clarfonthey clarfonthey force-pushed the const-convert-initial branch from 4ebb4b7 to 4bcf7bd Compare August 21, 2025 00:47
@rustbot
Copy link
Collaborator

rustbot commented Aug 21, 2025

This PR was rebased onto a different master commit. Here's a range-diff highlighting what actually changed.

Rebasing is a normal part of keeping PRs up to date, so no action is needed—this note is just to help reviewers.

@clarfonthey
Copy link
Contributor Author

(Un-rebased over that PR since it's no longer in the queue.)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. T-libs Relevant to the library team, which will review and decide on the PR/issue.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants