primitive value overflow
Mr. Anonymous
mailnew4ster at gmail.com
Thu May 16 14:17:59 PDT 2013
On Thursday, 16 May 2013 at 21:04:38 UTC, Jonathan M Davis wrote:
> On Thursday, May 16, 2013 22:42:23 luka8088 wrote:
>> I agree that it is exactly the same as checking if
>> (text1.length >
>> text2.length). And I don't think that this is an issues if you
>> are aware
>> of the fact that you are working with unsigned values. But in
>> the code
>> that I wrote there was no mentioning of unsigned so the
>> possibility of
>> that kind of issue never came to mind until I actually printed
>> the
>> values. And that is what I wanted to emphasize.
>
> Well, I'm not sure what can be done about that. length is
> size_t, which is the
> unsigned integral value which matches the architecture (uint
> for 32-bit and
> ulong for 64-bit). AFAIK, the documentation is clear on this
> (though I haven't
> read it recently). If it's not, then it should be made clearer,
> but using
> size_t for length is pervasive in D as it is in C++, and if you
> know the
> standard types, you know what size_t is.
>
> As for overflow checking, it's come up quite a few times, and
> Walter is
> completely against it. The hardware doesn't support it, and it
> would definitely
> be slow if it were added. The standard way to handle that if
> you want it is to
> create user-defined integral type which does the checks (though
> that obviously
> won't help you when you can't control the types that you're
> dealing with). But
> if you want to add checks in your code, you can always create a
> wrapper
> function for doing the subtraction. And if you wanted the
> checks to only be
> there in non-release mode, then you could even put the checks
> in a
> version(assert) block. So, you can add checks if you want them,
> but there's
> pretty much no way that how unsigned or overlflow are handled
> in the language
> is going to change.
>
> - Jonathan M Davis
I agree with Walter if we're talking about production code, but I
think it could be very helpful for debug builds.
P.S.
> The hardware doesn't support it
That's not completely true.
e.g. x86, while it doesn't throw an exception on an overflow, it
does set a flag, which could be relatively cheaply checked.
More information about the Digitalmars-d
mailing list