unique identifiers as a separate library

Simon Marlow marlowsd at gmail.com
Fri Dec 19 04:28:01 EST 2008


Isaac Dupree wrote:
> Sebastian Fischer wrote:
>> On Dec 17, 2008, at 10:54 AM, Sebastian Fischer wrote:
>>
>>> Would it be possible to put everything concerned with unique 
>>> identifiers in GHC into a separate package on Hackage?
>>
>>
>> I have wrapped up (a tiny subset of) GHC's uniques into the package 
>> `uniqueid` and put it on Hackage:
> 
> thanks!
> 
>> The main difference is due to my fear of depending on the foreign 
>> function `genSymZh` which I replaced by a global counting IORef.
> 
> which is its own risk.  maybe you should NOINLINE it?
> 
> Potential code criticisms / suggestions for it as a library:
> 
> Unboxed: so it only works on GHC, even though others have unsafe IO 
> too.  In theory, strictness annotations should be able to achieve the 
> same efficiency.
> 
> "Char" is supposed to represent a Unicode character -- but this code 
> behaves oddly:
> For 64-bit Int#, it does so.
> For 32-bit Int#, it assumes Char is within the first 8 bits (ASCII and a 
> little more).
> If Int# (or Int) can be 30-bit (like Haskell98 permission), its 
> correctness suffers even worse.
> Is it really even a necessary part of the design?  The only way you 
> provide to extract it or depend on its value is indirectly via the 
> "Show" instance.  Its presence there is, in any case, at the cost of 
> max. 2^24 (16 million) IDs before problems happen, whereas billions is 
> still not a great limit but at least is somewhat larger. (applications 
> that are long-running or deal with huge amounts of data could be affected)
> 
> unsafeDupableInterleaveIO: this "Dupable" was safe for GHC to use 
> because GHC is single-threaded.  Is it safe in a library setting?

It would be safe if the genSym was atomic - so I recommend using 
atomicModifyIORef.

Cheers,
	Simon



More information about the Glasgow-haskell-users mailing list