> 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.
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)
> 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 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
tracks the progress. The most recent diff is
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