Критерий критерия Haskell для ленивого кодирования
Мы пытаемся сравнить бинарное кодирование с Criterion. Поскольку типы данных являются строгими, мы вполне можем сравнить процесс упаковки запроса.
Однако, сделав еще один шаг, попытавшись сравнить процесс кодирования (Request to ByteString) с помощью runPut, мы получим μs-результаты. Вероятно, это связано с ленивой оценкой тестовой строки.
encode = runPut . buildRqMessage
main = do
randBytes <- getEntropy 1000000
let !topicA = stringToTopic "performance-0"
let !topicB = stringToTopic "performance-1"
let !clientId = stringToClientId "benchmark-producer"
let !bytes = [randBytes | x <- [1..1]]
let !head = Head 0 0 clientId
let !prod = [ ToTopic topicA [ ToPart 0 bytes ] ]
defaultMain [
bgroup "encode" [
bench "pack" $ whnf (packPrRqMessage head) prod
, bench "pack+build" $ whnf encode (packPrRqMessage head prod)
]
]
Есть ли способ соответствующим образом оценить процесс кодирования?