It seems to me that the core problem here is that I don't think that maximum performance for CPU-bound programs is the only use-case for Rust. As a result, I see a large swath of cases where "I need an integer, but I'm not sure what size yet" is a reasonable state of mind.
In contrast, a number of people here have said that that state of mind is essentially incompatible with the goals of Rust. The idea is that if you're using Rust, you should always be ready and willing to think carefully about whether you really need those 64-bits, because using them unnecessarily isn't free. Especially when writing IO-bound programs, taking the time to carefully consider the size of every integer, especially early on in the lifetime of a program, is just not worth it in my opinion.
I think that's what this argument is about. I don't like Design 1, because it's a de facto rejection of this state of mind, which I find myself in regularly.
If someone is writing an IO-bound program and doesn't yet know how big his integers will be, Design 1 throws him directly into the middle of this argument, for a small benefit. On the flip side, if someone is writing a CPU-bound program, the answer ("you should think carefully about the size of your integers") is pretty easy to arrive at no matter what we do here.
As someone who writes both kinds of programs, I find myself using smaller, fixed-sized integers in CPU-bound code, even though the current state has an int
type.