rust-lang / rust-lang/rfcs

WrappingAdd, WrappingSub, WrappingMul, WrappingDiv, etc

Open
#1,530 6 comments 4 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

T-libs
Dominant language
Markdown
Stars
6.6k
Forks
1.7k
Avg merge
16h 14m
Merged PRs (30d)
1

Description

Currently we have i32::wrapping_add, i32::wrapping_sub, i32::wrapping_div etc bound to i32, that is, there is no trait for them. We also have Wrapping<T>, and an impl for each number type. (source)

I want this to be changed, so that we instead have WrappingAdd which defines wrapping_add(self, RHS) -> Self::Output, WrappingSub which defines wrapping_sub(self, RHS) -> Self::Output and so on, and Wrapping<T> which uses them. This would hopefully simplify the language, and it would also be possible to create Wrapping<T>-compatible types. (You can't impl stuff for Wrapping currently.)

They would probably be placed in std::num.

(Side note: If it goes into std::ops we could also have wrapping ops in the form of |+|, |-|, etc.)

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reviewing the existing i32 wrapping methods and the std::num::Wrapping implementation referenced in the issue. Compare the proposed trait placement in std::num with the alternative std::ops design. Done means producing an agreed RFC-level design for the traits, their outputs, and Wrapping integration.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust
Domain
compilers
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.