Michael,

"Now, for personal opinion, I would share a tremendous frustration that 
programmers often don't think at all about these issues and thereby allow 
their thinking to be shallow. My clearest example is code like "k=i+j" or 
"k = i*j" both of which are common."

Are you shocked—shocked—to find that this is going on? :-)


Programming Pearls, Second Edition by Jon Bentley. 

phrase = inputchars
for (wordsleft = 10000; wordsleft > 0; wordsleft--)
     l = -1
     u = nword
     while l+1 != u
         m = (l + u) / 2
         if wordncmp(word[m], phrase) < 0
            l = m
         else
             u = m
     for (i = 0; wordncmp(phrase, word[u+i]) == 0; i++)
         if rand() % (i+1) == 0
            p = word[u+i]
     phrase = skip(p, 1)
     if strlen(skip(phrase, k-1)) == 0
        break
     print skip(phrase, k-1)

Check the list of acknowledgments for the second Edition. :-)


Extra, Extra - Read All About It: Nearly All Binary Searches and Mergesorts 
are Broken
Joshua Bloch, Software Engineer

https://research.googleblog.com/2006/06/extra-extra-read-all-about-it-nearly.html


Peter

On Thursday, March 16, 2017 at 5:52:29 AM UTC-4, Michael Jones wrote:
>
> Yes, there are cases for integer domain wraparound just as there are cases 
> for exception at the limits.
>
> The argument FOR is that "computers work that way." Since ENIAC, there 
> have been overflow condition flags, but there have rarely been 
> overflow/underflow panic traps. (Either no support, or support but 
> universally disabled by high-level languages and their runtime 
> infrastructure.) The defining characteristic of BCPL / B / C is that the 
> machine virtualized by the language has the natural behaviors of the 
> underlying hardware. (This both overstates and understates the 'FOR' 
> argument--more below)
>
> The argument AGAINST is that mathematics does not work that way. Niklaus 
> Wirth was a champion of this mindset and you'll see that PASCAL and later 
> languages from him were more serious minded about the legitimacy of 
> computing as a mathematical abstraction. (0 - 1 => some giant number is 
> obviously illegitimate in this worldview.)
>
> Now, the FOR side has an interesting historical basis: very many 
> algorithms expect faulty-style computer arithmetic for their operation. 
> Imagine computing a hash code where multiplying, adding, or shifting a bt 
> off the high or low end caused a panic on the scale of divide by zero. 
> There are many tasks performed by computers where falling off the end, or 
> wrapping around, are the most natural and only workable meaning (multiple 
> precision arithmetic and CRC checksums as other examples).
>
> Wirth had some challenges with such things and resorted to awkward coding 
> strategies in response. You can see other examples in Knuth's original 
> Pascal TeX source code vs the prior SAIL version. On the other hand , 
> Wirth's languages were amenable to proof-style assertions about ranges and 
> domains because violations were errors.
>
> So, there are reasons both ways and reasonable people can disagree. The 
> balance of the programming craft has a bias toward wraparound. The balance 
> of CPUs make that mode best supported in response.
>
> That's the story.
>
> Now, for personal opinion, I would share a tremendous frustration that 
> programmers often don't think at all about these issues and thereby allow 
> their thinking to be shallow. My clearest example is code like "k=i+j" or 
> "k = i*j" both of which are common. Stop and ask yourself "how frequently 
> is this successful?" that is, in what percentage of the possible I and J 
> combinations is the result wrong?
>
> Think about it.
>
> Here is the answer: https://play.golang.org/p/xc8TdVBgmf Maybe you can 
> feel my horror that something could be wrong in 49.8047 or 96.9971% of the 
> cases and only "weirdos like me and Wirth" even see it as a topic worthy of 
> thought. He took this as an argument AGAINST and fought the system. I'm 
> cool with FOR, but I wish I had at least one language other than assembler 
> that respected my desire to say what I want in all such cases: to exploit 
> overflow/underflow flags when desired, to use multiple rounding modes in 
> expressions, etc. The transistors are there. It is language designers who 
> are the weak link in the chain.
>
> On Tue, Mar 14, 2017 at 6:48 AM, Eyal Posener <pos...@gmail.com 
> <javascript:>> wrote:
>
>> I was thinking about the type safety of uint in go, and comparing it for 
>> a similar problem.
>>
>> If I have this go code:
>>
>> var x uint
>> x--
>>
>> The value of x is then the maximal value of uint, which is probably not 
>> what the gother wanted (I think, is there any particular use cases for that 
>> that you know of?)
>>
>> So my question is: why does go allow that, and for example panics on 
>> index out of range of an array? Doesn't it make sense that it also should 
>> panic in this case?
>>
>> Cheers,
>> Eyal
>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "golang-nuts" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to golang-nuts...@googlegroups.com <javascript:>.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>
>
> -- 
> Michael T. Jones
> michae...@gmail.com <javascript:>
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to