[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Arithmetic overflow [was Re: the benefits of immutability]
On Tuesday, August 19, 2003, at 04:09 PM, Perry E. Metzger wrote:
> The pathetic thing about Java is that not only is it crippled to make
> it safe, but it isn't even safe. Overflows, for example, are ignored,
> presumably to make it look more like C. Yuck.
You're talking about a different definition of safe. Java is safe in
that you can safely run random code downloaded off the internet on your
local machine without it being able to send out spam to everyone on the
planet, upload all your personal information to the author, and then
erase your hard drive. It is not safe against writing incorrect code.
However, it does have many features that make it *easier* to write
correct code (e.g. garbage collection, required exception handling).
Perhaps arithmetic overflow detection should have been added. It
certainly could be nice. However, I suspect Sun decided the cost was
too great, since, AFAIK current processors don't have the ability to
trap on integer overflow. Thus, after every single integer operation,
it would need to do a conditional jump on the overflow condition
register flag. Certainly doable, though not very efficient.
However, the big question is: what should it do when there is an
overflow? If it throws an exception (RuntimeException subtype
presumably so you don't need to declare it on every function), at least
programs will fail loudly, but you'll have to write your code much more
carefully to actually be able to continue working as there are now many
more possible sites for an exception to occur. Silently truncating the
number to INT_MAX/INT_MIN is not any better than wraparound. Of course,
the best answer would be to not ever use int/long and always use
BigInteger, but that's currently impractical in Java due to the poor
speed of BigInteger and the excess code you'd have to insert everywhere
to convert the BigInteger back to an int/long.
James