
On Tue, Aug 1, 2017 at 8:08 PM Carter Schonwald
One issue with packed fields is that on many architectures you can't quite do subword reads or writes. So it might not always be a win.
There's also the issue that c-- as it exists in ghc doesn't have any notion of subword sized types.
That said, I do support making word/int64/32 # types more first class / built in. (I hit some issues which tie into this topic in the process of working on my still in
Could you give any examples? Note that we're still going to do aligned read/writes, i.e., `Int32#` would still be 4 bytes aligned, `Int16#` 2 bytes, etc. So we might have "holes", e.g., `data Foo = Foo Int8# Int64#` would still waste 7 bytes (since `Int64#` should be 8 bytes aligned). In the future, I'd also like to do some field reordering to avoid some holes like that in cases like `Foo Int32# Int64# Int32#` (here it'd be better if the in-memory layout was `Int64#` first and then the two `Int32#`s) progress safeword
package. )
Point being: I support improving what we have, but it's got a bit of surface area. Please let me know how I can help you dig into this though
Have a look at https://ghc.haskell.org/trac/ghc/ticket/13825 which tracks the progress. The most recent diff is https://phabricator.haskell.org/D3809 So far, most of this work is based on some unfinished code by Simon Marlow to support storing constructor fields smaller than words. I'm currently mostly finishing/fixing it and splitting to smaller pieces. Introducing more primitive stuff is the next step. (assuming everyone is ok with this :) Cheers, Michal