Stefan O'Rear wrote:
I like pretty pictures.
...and have lots of spare time, apparently. ;-)
[I actually meant to write (Bool,Bool), but anyway...]
Whereas my Quad object is going
to be a pointer to one of 4 values... so it looks like Quads save space.
(And they're more strict.) OTOH, I'm not sure what the time penalty is
like...
Probably none. The STG-machine was designed to make user-defined
algebraic types very fast.
My program needs to make decisions based on a pair of boolean values.
Encoding both values as a single algebraic data type means I have to
keep "taking it apart" so I can work with it. I'm not sure how much time
this wastes...
It would be nice if there were some general mechanism for turning a bunch
of Bool flags into a single machine word. E.g., if I did a
data Foo = Foo {flagX, flagY, flagZ :: !Bool}
and it ends up that a Foo value is just a single machine word, and GHC
picks which bit each flag is... I guess if you want that at present you'd
have to code it all by hand. Hmm, I think this might work out better than
my current Quad thing... I could do something like
type Quad = Word8
foo q = let
x = if testBit 0 q ...
y = if testBit 1 q ...
That should be quite fast... (?)
Probably. I wound up doing something similar with vty, to considerable
gain. (I did however use .&. instead of testBit - probably makes no
difference, but I'm reminded of the (^2) being much slower than join(*)
case...)
Well, perhaps I could define a pair of constants representing the bit
masks? (OTOH, won't GHC optimise "testBit <constant>" into something
faster anyway?)
Heh. I'll have to pester you more often. :-P
:)
Like that time yesterday, I compiled from program and got a weird
message about GHC about "ignored trigraphs" or something... What the
heck is a trigraph?
(I compiled the program again later, and it compiled just fine. Weird...)
PS. Somewhere they should write a page entitled "Optimisations that GHC
does (and doesn't) do"...
Good idea! Maybe it could be fit into the GHC Performance Resource
somehow? (http://www.haskell.org/haskellwiki/Performance/GHC)
OK. But it'll probably contain a lot of guessing to start with... ;-)
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe