divRem by `-' performance

Serge D. Mechveliani mechvel at botik.ru
Thu Oct 18 11:24:40 CEST 2012


On Wed, Oct 17, 2012 at 07:00:38PM +0300, Roman Cheplyaka wrote:
> * Serge D. Mechveliani <mechvel at botik.ru> [2012-10-17 19:37:38+0400]
> > But it is generally difficult for me to admit that sometimes it is 
> > desirable to use strinctess annotation.
> > I programmed DoCon for 6 years, and it does not have any bit of 
> > strictness annotation, and I always had an impression that it is all
> > right with performance.
> 
> Yeah, I was also surprised that this is news to you :)
> 
> > And now it occurs that setting  $!  in some places may make many parts
> > of it somewhat 100 times less expensive 
> > -- ?
> > Somehow difficult to admit.
> 
> Laziness is subtle. Sometimes you make an innocent change to a program,
> but it changes the time when things are evaluated, and that affects
> memory/performance significantly.
> 

I was always aware of all these effects.
I deliberately avoided any strictness annotation.
And the whole result has a reasonable performance. 

But then, I forget it, each time, and start to think "everything is all 
right".
This lasts till the next unlucky example, as the above  qRem.
And each time I recall of unneeded laziness.

And concerning this example: I am not even sure now that it worths to
setting  $!  there.
Because I deliberately program  qRem  as returning a pair  (quot, rem),
and do not program a separate function for  rem.  And to obtain  rem,
one applies   snd (qRem n m),  and due to laziness,  quot  does not 
spend the cost. I do not know, may be, using $! may damage this style. 

Another objection against strictess annotation is that they make 
difficult to transform the code at an early stage of compilation.

Regards,
Sergei



More information about the Glasgow-haskell-users mailing list