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
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.
More information about the Glasgow-haskell-users