[Haskell-beginners] Re: Is Haskell for me?
Ben Lippmeier
ben.lippmeier at anu.edu.au
Sat Nov 21 06:56:09 EST 2009
On 21/11/2009, at 21:13 , Nicolas Pouillard wrote:
> Excerpts from Ben Lippmeier's message of Sat Nov 21 07:38:09 +0100 2009:
>>
>> On 21/11/2009, at 15:36 , Jon Harrop wrote:
>>
>>> The long-standing bug in GHC's garbage collector that makes writing a single
>>> boxed value into an array O(n) instead of O(1), because the GC dirties and
>>> retraverses the entire array, makes it impossible to write efficient Haskell
>>> code to solve many basic problems.
>>
>> Are you talking about http://hackage.haskell.org/trac/ghc/ticket/650 ?
>>
>> The way I read that ticket is that writing a boxed value to a mutable array is still O(1), but the garbage collector traverses the whole array during
>> scanning. That could certainly slow down GC cycles, but how does it make array update O(n)?
>
> He means in worst case. Writing once, will cause O(n) during the next GC. Of
> course if you do a lot of updates between two GCs their is no extra penalty.
> So if you make 'k' updates between 2 GCs it costs you k*O(1)+O(n) which is
> still O(n) but practically nicer than k*O(n).
>
Hmm. I'd be careful about conflating algorithmic complexity with memory management issues. By the above reasoning, if I were to run any program using arrays on a system with a two space garbage collector (which copies all live objects during each GC) I could say the worst case algorithmic complexity was O(n). That doesn't sound right.
I could take this further and say that in a virtual memory system, there is a chance that the whole heap gets copied to the disk and back between each array update. I might again say this has O(n) complexity, but it wouldn't be very helpful...
Ben.
More information about the Beginners
mailing list