length's type.

Ivan Kazmenko gassa at mail.ru
Tue Feb 13 23:57:12 UTC 2024


On Monday, 12 February 2024 at 19:56:09 UTC, H. S. Teoh wrote:
> But regardless, IMNSHO any programmer worth his wages ought to 
> learn what an unsigned type is and how it works. A person 
> should not be writing code if he can't even be bothered to 
> learn how the machine that's he's programming actually works.

I'd like to note that even C++20 onwards has `.ssize`, which is 
signed size.

I do use lengths in arithmetic sometimes, and that leads to 
silent bugs currently.  On the other hand, since going from 16 
bits to 32 and then 64, in my user-side programs, I had a flat 
zero bugs because some length was 2^{31} or greater -- but at the 
same time not 2^{32} or greater.  So, in D, I usually `to!int` or 
`to!long` them anyway.  Or cast in performance-critical places.

Another perspective.  Imagine a different perfect world, where 
programmers just had 64-bit integers and 64-bit address space, 
everywhere, from the start.  A clean slate, engineers and 
programmers designing their first hardware and languages, but 
with such sizes already feasible.  Kinda weird, but bear with me 
a bit.  Now, imagine someone proposing to make sizes unsigned.  
Wouldn't that be a strange thing to do?  The benefit of having a 
universal arithmetic type for everything, from the ground up -- 
instead of two competing types producing bugs at glue points -- 
seems to far outweigh any potential gains.  Unsigned integers 
could have their small place, too, for bit masks and 
microoptimizations and whatnot, but why sizes?  The few 
applications that really benefit from sizes of [2^{63}..2^{64}) 
would be the most odd ones, deserving some workarounds.

Right now though, we just have to deal with the legacy, in 
software, hardware, and mind -- and with the fact that quite some 
environments are not 64-bit.

Ivan Kazmenko.



More information about the Digitalmars-d-learn mailing list