bos:
> Jason Dagit wrote:
> 
> >I think, given my simple algorithm that means that (==) for
> >ByteStrings is slower than (==) for String.  Is this possible?
> 
> Yes indeed.  Over ByteStrings, (==) is implemented as a call to memcmp. 
>  For small strings, this loses by a large margin because it has to go 
> through the FFI.
> 

Yes, a non-memcmp version can sometimes be profitably used here.

Something like this Core:

    eq !n (Ptr p) (Ptr q) = inlinePerformIO $ IO $ go n p q
      where 
        go !n p q s
            | n == 0    = (# s , True #)
            | otherwise = case readInt8OffAddr# p 0# s of
                    (# s, a #) -> case readInt8OffAddr# q 0# s of
                        (# s, b #) | a /=# b   -> (# s, False #)
                                   | otherwise -> go (n-1) (plusAddr# p 1#) 
(plusAddr# q 1#) s

Ok, so that's not Core, but it could be ;)

-- Don
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to