On Friday 07 December 2001 2:27 pm, D. Tweed wrote: > On Fri, 7 Dec 2001, Adrian Hey wrote: > > The first is.. > > Does the compiler keep a unique copy of expressions which consist of just > > a single zero arity constructor (eg. [],True,Nothing..) as a CAF which is > > referenced each time the constructor appears in an expression, or does it > > duplicate the constructor (expression) each time it's used. > > Maybe I should define my own CAF at the top level and use it instead? > > (or perhaps they're unboxed somehow?) > > Really idle curiosity... why would having a single copy of a zero arity > constructor be more efficient than have multiple copies? Wouldn't they fit > into a `cell' which wouldn't be larger than the one that would > (IIRC) be used for the indirection to the CAF? (I can understand a larger > CAF being a win, but one this small?)
Well I suppose if it's necessary to create a new indirection heap record for each reference, then there's not really any point in having a single copy of the value itself. But I don't see why that should be so. Even if it is indirected for some reason it should still be possible to share the indirection record I think. Maybe CAF is the wrong word to use here since there's no application involved. What I mean is.. are zero arity constructors referenced the same way as a top level constant would be? (Not that I know how that's done, but I presume there's only 1 copy of top level constants in memory at any one time.) I was thinking of data types like binary trees. If the tree was balanced, and a new copy of a leaf (zero arity empty tree) was constructed on the heap every time a function returned this value, then this would double the No. of heap records associated with the tree. This would waste memory and slow down garbage collection. I just wanted to make sure I don't need to use any weird programming style to ensure this doesn't happen. Regards -- Adrian Hey _______________________________________________ Glasgow-haskell-users mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/glasgow-haskell-users
