[OT] The Usual Arithmetic Confusions

Ola Fosheim Grøstad ola.fosheim.grostad at gmail.com
Sat Jan 29 10:16:00 UTC 2022


On Friday, 28 January 2022 at 18:39:54 UTC, deadalnix wrote:
> On Friday, 28 January 2022 at 02:15:51 UTC, Paul Backus wrote:
>> https://shafik.github.io/c++/2021/12/30/usual_arithmetic_confusions.html
>>
>
> For what it is worth, the first exemple is fixed in D.

For C++ this is fixed with warnings, e.g. -Wconversion

People can choose their own level of strictness in C++. Of 
course, if you use templated libraries then you might get 
warnings you don't want. So having a good syntax for silencing 
warnings inline is an important language design issue, because 
then you are encouraged to turn on maximum strictness and just 
selectively disable it where it is convenient.

Warnings with inline-silencing is actually one of the main 
advantages of using TypeScript over javascript and Python with 
PyCharm as well.

Unfortunately the syntax for warning silencing is often just an 
afterthought... It should be part of language-design in my 
opinion.


> The multiplication one is particularly interesting. The other 
> ones really banal wrap around behavior, which your really can't 
> do without if youw ant to make anything fast, IMO.
>
> I'm surprised there aren't more exemple of signed -> unsigned 
> conversion because that one is a real mind fuck.

I actually can't remember having these issues in my own code, it 
isn't really all that difficult to get these right. But you have 
to pay special attention to these things when writing templates, 
fortunately you can restrict templated parameters based on 
signedness.

The only case that I can remember where this turned into a 
headache was with signed modulo operator, but it was resolved by 
writing my own overloaded "modulo(x,y)" function.

Of course, if you don't enable warnings you've basically said you 
are ok with the semantics of a lazy 1970s approach designed to 
make it possible to write really terse code. People get what they 
ask for by choosing terseness.





More information about the Digitalmars-d mailing list