B
BGB
Almost every integer should be int. Since integers usually end up indexing
arrays (even a char, when you think about it, will probably eventually
end up as an index into a glyph table of some sort), that means that int
needs to be able to index an arbitrary array. Then you don't need any other
types, except to save memory, or for a few algorithms that need huge integers.
We don't need twenty plus integer types in C.
well, there is a problem:
often the size of these integer types is relevant for things like
file-formats, and often for memory use.
there is actually lots of code which will break at present if 'int' is
anything other than 32 bits.
but, OTOH, sometimes one may need to deal with arrays larger than 2 or
4G on 64-bit targets, and it is still mostly overkill for characters.
also annoying is the still not yet universal availability of 'stdint.h', ...
then there are other annoyances:
there is still no good way to have 'specific' format integer types, for
example:
"32-bit signed twos complement big-endian" or "64-bit unsigned twos
complement little-endian".
as-is, the majority of code for reading/writing data from files often
ends up with code for jerking around with getting numbers into the
correct endianess, where if the exactly format of the numbers was
settled, a person could safely read/write structs more directly, and not
need a bunch of logic for encoding/decoding any contained integers.
but, even if added to the standards, it would probably be a decade or
more before it had widespread implementation support, ...
so, alas, no good solutions to the problems of integers.
FWIW: in my scripting language, it is possible to qualify the endianess
of integer types, but made partly pointless in that I don't generally
use it for file IO (and the VM still falls a fair bit short of being
performance competitive with a C compiler, *1). nevermind some still
ugly language-design issues (*2), ...
*1: the current JIT also mostly just spits out threaded code, and the
current IR still isn't really ideal for what is needed for good
performance (mostly it is a time/priority issue).
*2: ugly AS3-like declaration syntax, semantics issues, sometimes
excessive verbosity, ...
or such...