Moderator note: split from Allow use as and try as for From and TryFrom traits
There may have been a better way to develop basic guidelines when developing a language, but time is up.
There should be only one "default" integer which can be used in most cases and recommended everywhere, and other types only for cases where bit representation matters. But in real Rust we have a terrible zoo of different types. The standard slice has size as the length and index, bmp crate uses u32 (and there is no good reason to use this type instead of usize: u32 as index is incompatible with rust vectors · Issue #31 · sondrele/rust-bmp · GitHub ), if you are writing an image processing library, you should use signed numbers to represent negative values.
Rust developers have not heard of the Stroustrop article: https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1428r0.pdf , they haven't heard of the experience of a C++ programmer (never use unsigned numbers until you really need bit representation and bitwise operations), and still use dangerous unsigned types that can cause your program to crash with simple subtraction. Some Rust programmers use trimmed types and think they use a "domain-oriented type", but Rust does not support domain-oriented types such as "[0..256) of isize", but in Rust there are "types that create problems" like "u8" which should be used only for FFI, but are used everywhere and creates a problem for developers, as well as a lot of wrap and cast boilerplates.