(You may want to check your system's date, unless of course you traveled in time.)

Russell Lewis wrote:
I'm of the opinion that we should make mixed-sign operations a compile-time error. I know that it would be annoying in some situations, but IMHO it gives you clearer, more reliable code.

The problem is, it's much more annoying than one might imagine. Even array.length - 1 is up for scrutiny. Technically, even array.length + 1 is a problem because 1 is really a signed int. We could provide exceptions for constants, but exceptions are generally not solving the core issue.

IMHO, it's a mistake to have implicit casts that lose information.

Hear, hear.

Want to hear a funny/sad, but somewhat related story? I was chasing down a segfault recently at work. I hunted and hunted, and finally found out that the pointer returned from malloc() was bad. I figured that I was overwriting the heap, right? So I added tracing and debugging everywhere...no luck.

I finally, in desperation, included <stdlib.h> to the source file (there was a warning about malloc() not being prototyped)...and the segfaults vanished!!!

The problem was that the xlc compiler, when it doesn't have the prototype for a function, assumes that it returns int...but int is 32 bits. Moreover, the compiler was happily implicitly casting that int to a pointer...which was 64 bits.

The compiler was silently cropping the top 32 bits off my pointers.

And it all was a "feature" to make programming "easier."

Good story for reminding ourselves of the advantages of type safety!


Andrei

Reply via email to