D arithmetic problem

Walter Bright newshound1 at digitalmars.com
Wed Jun 3 00:23:45 PDT 2009


Don wrote:
> I agree, it's bug-prone.

Any two's complement arithmetic system, with types of different sizes 
and signed-ness, is going to have quirks. It's inescapable. Back when C 
was standardized in the 80's, there was a huge debate about whether to 
use signed-preserving rules or value-preserving rules. After much 
debate, it came down to pick set A of problems or set B of problems. The 
committee picked one (value preserving) and moved on.

http://books.google.com/books?id=yxLISD0TAbEC&pg=PA35&lpg=PA35&dq=signed+preserving+versus+value+preserving+integral+promotion+rules&source=bl&ots=tCRBjyS4jC&sig=VCVgyAr9u0ItJbcZ5r-fLnxGmX4&hl=en&ei=riMmSufaCafcswO4vbWUBg&sa=X&oi=book_result&ct=result&resnum=9


> Ideally, we'd disallow implicit widening casts for signed types in 
> logical operations. But can that be done without creating too many 
> language quirks?


The problem with changing the rules is that the value preserving rules 
are now deeply ingrained into how C (and C++) code is written. Changing 
them would mean that translating complex code from C to D may produce 
silent changes in behavior. I believe this would be very bad for D 
because it means people would not be able to translate such code to D.

(After all, it's one thing to translate, say, an encryption program from 
C to D. It's quite another thing to understand it well enough to be able 
to debug it, or even verify that it is working correctly.)



More information about the Digitalmars-d mailing list