[Haskell-cafe] Re: [Haskell] Top Level <-
Ashley Yakeley
ashley at semantic.org
Sat Aug 30 08:27:43 EDT 2008
Ganesh Sittampalam wrote:
> How can they be the same unless the memory management system is broken?
> I consider different pointers on different machines or in different
> virtual address spaces different too; it's the fact that they don't
> alias that matters.
But the actual pointer value might repeat.
>> every single call to newUnique across the whole world returns a
>> different value, but internally they are Integers that might repeat.
>
> The thing about pointers is that they are managed by the standard
> behaviour of memory allocation. This isn't true of Integers.
But it could be. A global variable allows us to do the same thing as the
memory allocator, and allocate unique Integers just as the allocator
allocates unique pointer values.
Now you can say that the same pointer value on different machines is
different pointers; equally, you can say the same Integer in Unique on
different machines is different Uniques: it's the fact that they don't
alias that matters.
> In fact this point suggests an implementation for Data.Unique that
> should actually be safe without global variables: just use IORefs for
> the actual Unique values. IORefs already support Eq, as it happens. That
> gives you process scope for free,
Isn't this rather ugly, though? We're using IORefs for something that
doesn't involve reading or writing to them. Shouldn't there be a more
general mechanism?
--
Ashley Yakeley
More information about the Haskell-Cafe
mailing list