[Haskell-cafe] Missing Network Functions
Thomas DuBuisson
thomas.dubuisson at gmail.com
Sun Dec 28 04:38:12 EST 2008
Didn't reply to all. Sorry for the double Johan.
Johan asked:
> will GHC be able to optimize away all
> of the Data.Binary stuff so the functions, if defined in terms of
> Data.Binary, are as efficient as a direct implementation?
Binary can be a bit slower than you might want. I'm guessing it would
do fine for hton like operations, but in pureMD5 I noticed a 2x slow
down when using Data.Binary instead of the low-level FFI
implementation.
In C one might want:
inline uint32_t getWord32(unsigned char *bytestring)
{
uint32_t *p = &bytestring;
return p[idx];
}
And that is extremely fast code. In low level Haskell it looks more like:
getNthWord n bs@(PS ptr off len) =
inlinePerformIO $ withForeignPtr ptr $ \ptr' -> do
let p = castPtr $ plusPtr ptr' off
peekElemOff p n
But even this low level code seems to be excessively slow with 33% of
the MD5 run time attributed to this function. I ment to investigate
this a couple months ago but have had zero time.
Tom
More information about the Haskell-Cafe
mailing list