Померил тут, похоже про магические хэши не надо рассказывать. Тут length' - текущая реализация из GHC, length0 - трех?летней давности:
{-# LANGUAGE MagicHash
( Read more... )
А length0 - она вообще энергичная? Там не может получиться, что компилятор построит мега-санки I# (...(((0# +# 1#) +# 1#) + 1#)...), которые влезли в память (в отличие от length''' только потому, что боксированные данные занимают вдвое больше места)?
Как насчёт заведомо энергичного length00 = I# . foldl' (const . inc) 0# where inc h = h +# 1#
Какие санки, это же чисто сишные типы и операции, они unlifted (и unboxed). Их даже в полиморфные функции передавать нельзя и в полиморфных типах данных хранить.
И бают, будто бы в ответе сказано, что corge не может привести к расходимости. Так оно вполне может, если только там тип явно не указан. Я, конечно, не вполне понимаю, что значит "корректный набор аргументов", но уж corge стопудово может быть чем угодно.
Comments 20
Reply
Reply
И, как побочный эффект, литералы хавали меньше памяти?
Reply
https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/primitives.html
Считаются быстро, свойства плохие.
Reply
Там не может получиться, что компилятор построит мега-санки I# (...(((0# +# 1#) +# 1#) + 1#)...), которые влезли в память (в отличие от length''' только потому, что боксированные данные занимают вдвое больше места)?
Как насчёт заведомо энергичного
length00 = I# . foldl' (const . inc) 0# where inc h = h +# 1#
Reply
Reply
Reply
Reply
Reply
И бают, будто бы в ответе сказано, что corge не может привести к расходимости. Так оно вполне может, если только там тип явно не указан. Я, конечно, не вполне понимаю, что значит "корректный набор аргументов", но уж corge стопудово может быть чем угодно.
Reply
Reply
Reply
Reply
Reply
Reply
Leave a comment