So for what itâs worth, my preferences are:
First of all, for any names other than int/uint;
Second of all, within that, for names which put the emphasis on the âintegerâ half of things, rather than on the âpointerâ (or whatever) half;
And within that, for intp/uintp in particular. I like it for essentially the same reasons that others gave for liking iptr/uptr: itâs simple and precise. It does still carry some of the same hazard as those did (and which I raised as an objection to them), that people may interpret it as âpointer to intâ, or something of that nature. This is a subjective judgment call, but I personally feel that with these names it is now low enough, and that the âpâ is more clearly just a modifier on the âintâ. This also cleanly allows for adding e.g. intr/uintr for register-sized integers, or whatever, in the future.
A close second are intx/uintx; and out of the remainder, I like isize/usize. The only ones I actively dislike are ix/ux, which I feel are too cryptic. (Still better than int/uint, but now only a lesser evil.)
As far as the âconsistencyâ argument goes, I think that one way to think about it is that all of the names âstart outâ as int16, uint32, etc.; and then we notice that these can be abbreviated to just i16, u32, etc., without significant loss of clarity, because of the implicit separator between the âletters partâ and the ânumbers partâ, which makes it clear that it should be read as a âuâ and a â32â, which can then reasonably be intuited to mean âunsignedâ and â32 bitsâ. On the other hand, for intp/uintp or intx/uintx, this doesnât work, because in ix/ux or ip/up, itâs not clear that the letters are supposed to be taken separately, as âiâ and âxâ, rather than as a single, indivisible word. Intuiting that âuxâ means âunsignedâ and âvariable bitsâ takes quite a leap of imagination.