Another novice piping in here. Coming from a few years years in C/C++, C#/Java, Haskell, etc. Just read this whole thread on-and-off throughout the day.
I support Design 1. From C/C++, int/unsigned have always caused a niggle in my mind every time I’ve used them, because I’m never quite sure what size they are/will be (and rapidly forget after looking it up). From C#/Java, I’ve liked int = i32, but had to remember, “Oh! I should consider the bounds.”
From Haskell, we have constructs like undefined (generic any-type placeholder; a compiler warning). This can be great: I can stop thinking about something while I’m working on it and then make a decision a bit later, without completely disrupting my workflow by stopping and thinking about what I should be doing. Plus, as a friend pointed out, it’s easily greppable. Similarly, I’m a huge fan of @Gankro’s idea:
Though it is beyond the topic of this thread if choosing Design 1, I would like to see more discussion along these lines. It allows Rust integers to be good for BOTH prototyping AND production, at a level-of-granularity where I can prototype a single function and work out the bounds a little later (i.e. before pushing a commit).
In fact, if int/uint were highly discouraged in this way, I think it would be okay to completely ignore performance, e.g. by using i128/u128 (or a bigint, which apparently isn’t possible).
If there was another thread about this (since you said it “wasn’t well-received”), I would love to read it!
EDIT: Oh, yeah, and: I believe a type like this could technically be a library, yes? Since it wraps a native type but has lints/warnings attached to it. Perhaps not excellent for beginners, but good for developers trying to get over the “what size do I use” block.