Re: [PATCH 5/5] types: Add standard __ob_trap and __ob_wrap scalar types
From: Linus Torvalds
Date: Tue Mar 31 2026 - 14:20:59 EST
On Tue, 31 Mar 2026 at 10:48, Miguel Ojeda
<miguel.ojeda.sandonis@xxxxxxxxx> wrote:
>
> In the Rust side, even if those "explicit" types like the
> `wrapping_u32` you suggest exist, we generally use the methods on the
> normal integers instead, e.g.
In that case the types in question should always be very much opaque,
and not usable as-is by existing compilers that don't have attributes.
My feeling is that that will discourage use enormously for when people
want to just say "yes, I know this wraps, and it's ok".
That said, for the *trapping* types, I do think that we likely need an
opaque type, because I really feel like using
trapping_u32 x;
...
x++;
is a complete and utter mis-design. It makes the "x++' have random behavior that
(a) cannot be recovered from (maybe we're holding random locks)
(b) is completely invisible in the context of the code, because the
type may be somewhere very different
and I think both of those are fundamental design mistakes.
And no, "dead machine" is *still* not an acceptable form of "that's
not random behavior".
So I think wrapping and trapping are fundamentally very different. The
words may look the same. The semantics may often be discussed
together. But one is explicitly marking something as "overflow is safe
and expected", and that's the actual real SAFE case.
The other is saying "overflow needs special handling". And the key
here is that we need to have some way to *state* what said special
handling is, and we need to do it at the point where that special
handling is needed. Not some generic exception handler that has to
figure things out from some unknown context.
Very very different things, and they need very very different
interfaces and very very different infrastructure.
Anything that says "these are two faces of the same coin and are just
different attributes on the type" is simply broken by design.
Linus