4 ms·
I saw this a few days ago, at first I thought it was an easter egg on youtube's part - saying "so many views we overflow!" But it's real?! It seems incredibly
by rkachowski 12y ago
I saw this a few days ago, at first I thought it was an easter egg on youtube's part - saying "so many views we overflow!"
But it's real?! It seems incredibly absurd that it could actually overflow, how are signed values useful for a count of views? How are you going to have negative views?
- spb 12y agoSay you're comparing the number of views between two different videos as (video_A.views - video_B.views). How do you represent that the second video has more views than the first?
- nly 12y agovideo_B.views > video_A.views
- tempestn 12y agoAnd what if you want to say how many more? You'd have to first check which one is greater, and then subtract in the right direction. The code is simpler if you just use signed integers.
- vegedor 12y agoYou could still typecast. The code may be simpler, but less explicit. In a storage heavy application it's still sensible to save bytes. Even if it is not a remarkable saving in this case, especially with compression algorithms reducing the impact. Assert will stop the program immediately, so you want to sensibly catch the error, at which point you need to know as much about the error condition as you need to know to use unsigned or casts correctly. So it's rather a question of taste, isn't it?
- bobbykjack 12y agoTo say "b has n more views than a", you need two operations whether you use signed or unsigned ints. Signed let's you say "these two videos have n different views" but, to be honest, it seems unlikely that you be doing either in so many places in your codebase, or so frequently during execution, to make the extra operation that significant.
- tempestn 12y agoYes, in this specific example you still need the same number of operations. My point was, when you just use signed integers, it's easier to conceptualize and harder to screw up. It's more flexible for unforeseen future use cases. Also, this is a very simplified example case; in most scenarios those unforeseen possibilities will be more significant. Given that switching to unsigned saves you exactly one bit, it's just not usually worth it. How often do you need exactly 32 bits of unsigned space, when 31 isn't enough, and you can't use 63? (I'm talking about standard-length integers here, not extreme situations where you're trying to make maximum use of 8 bits of storage or similar.)
- xxxyy 12y agoLegacy code I guess (from some really ancient times). Also tiny bugs like this make great content for blog posts, just like the 301+ views thing.
- hk__2 12y agoIt is an easter egg: http://www.reddit.com/r/compsci/comments/2nrjc7/gangnam_style_has_exceeded_the_maximum_length_of/cmg7u87 http://www.reddit.com/r/compsci/comments/2nrjc7/gangnam_styl...
- rkachowski 12y agoAh i see, i didn't expect Google to back up an easter egg with an associated G+ post
- srtjstjsj 12y agoUsually it's not cool to advertise an easter egg, but when you are a big corporation, you try hard.
- divegeek 12y agoJava doesn't have unsigned integer types. Google is mostly a Java shop.
- hobo_mark 12y agoThat is mostly false.
- fishnchips 12y agoJava is mostly confined to Android and the frontend (think GWT) which do not constitute a large proportion of the Google internal code as far as I can recall.
- Someone 12y agoJava's char is unsigned.
- exo762 12y agoIf anything, google is mostly c++ shop.
- lmm 12y agoLots of languages don't bother with a separate unsigned type. Maybe the backend is written in Java.
- IvyMike 12y agoIn C/C++, unsigned ints can result in a few very subtle bugs--more details here: http://stackoverflow.com/a/1555186/67591 http://stackoverflow.com/a/1555186/67591 TL;DR: Google's C++ coding standard says: "Document that a variable is non-negative using assertions. Don't use an unsigned type." As someone who has written a lot of C++ code to interact with hardware: I view an unsigned as a bucket of bits, and a signed as a number.