+1 !
On Fri, Mar 2, 2012 at 7:40 PM, Johan Tibell <johan.tib...@gmail.com> wrote: > Hi all, > > These ideas are still in very early stages. I present them here in hope of > starting a discussion. (We discussed this quite a bit at last year's ICFP, > I hope this slightly different take on the problem might lead to new ideas.) > > I think the next big step in Haskell performance is going to come from > using better data representation in common types such as list, sets, and > maps. Today these polymorphic data structures use both more memory and have > more indirections than necessary, due to boxing of values. This boxing is > due to the values being stored in fields of polymorphic type. > > First idea: instead of rejecting unpack pragmas on polymorphic fields, > have them require a class constraint on the field types. Example: > > data UnboxPair a b = (Unbox a, Unbox b) => UP {-# UNPACK #-} !a {-# > UNPACK #-} !b > > The Unbox type class would be similar in spirit to the class with the same > name in the vector package, but be implemented internally by GHC. To a > first approximation instances would only exist for fields that unpack to > non-pointer types (e.g. Int.) > > Second idea: Introduce a new pragma, that has similar effect on > representations as DPH's [::] vector type. This new pragma does deep > unpacking, allowing for more types to be instances of the Unbox type e.g. > pairs. Example: > > data T = C {-# UNWRAP #-} (a, b) > > If you squint a bit this pragma does the same as [: (a, b) :], except no > vectors are involved. The final representation would be the > unpacked representation of a and b, concatenated together (e.g. (Int, Int) > would result in the field above being 128-bit wide on a 64-bit machine. > > The meta-idea tying these two ideas together is to allow for some > abstraction over representation transforming pragmas, such as UNPACK. > > P.S. Before someone suggest using type families. Please read my email > titled "Avoiding O(n^2) instances when using associated data types to > unpack values into constructors." > > Cheers, > Johan > > > _______________________________________________ > Glasgow-haskell-users mailing list > Glasgow-haskell-users@haskell.org > http://www.haskell.org/mailman/listinfo/glasgow-haskell-users > >
_______________________________________________ Glasgow-haskell-users mailing list Glasgow-haskell-users@haskell.org http://www.haskell.org/mailman/listinfo/glasgow-haskell-users