Текущее состояние длин

Mar 07, 2016 17:09

Померил тут, похоже про магические хэши не надо рассказывать. Тут length' - текущая реализация из GHC, length0 - трех?летней давности:
{-# LANGUAGE MagicHash ( Read more... )

ghc, haskell, optimizations

Leave a comment

Comments 20

nealar March 7 2016, 14:26:09 UTC
Что такое магические хэши? Это когда одновременно и считаются быстро и свойства хорошие?

Reply

lionet March 7 2016, 15:15:43 UTC
{-# LANGUAGE MagicHash #-}

Reply

nealar March 7 2016, 15:25:48 UTC
Это чтобы можно было прямо из GHCi в твиттер писать?

И, как побочный эффект, литералы хавали меньше памяти?

Reply

deni_ok March 7 2016, 16:17:14 UTC
Unboxed types:
https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/primitives.html
Считаются быстро, свойства плохие.

Reply


kodt_rsdn March 7 2016, 19:44:29 UTC
А length0 - она вообще энергичная?
Там не может получиться, что компилятор построит мега-санки I# (...(((0# +# 1#) +# 1#) + 1#)...), которые влезли в память (в отличие от length''' только потому, что боксированные данные занимают вдвое больше места)?

Как насчёт заведомо энергичного
length00 = I# . foldl' (const . inc) 0# where inc h = h +# 1#

Reply

deni_ok March 7 2016, 20:17:08 UTC
Какие санки, это же чисто сишные типы и операции, они unlifted (и unboxed). Их даже в полиморфные функции передавать нельзя и в полиморфных типах данных хранить.

Reply


sassa_nf March 7 2016, 21:39:30 UTC
а код какой генерирует? А то мало ли, все они проводят кучу времени в GC или еще какой конфуз

Reply

deni_ok March 7 2016, 21:46:13 UTC
Библиотечный length? Сомневаюсь:) Может потом гляну, мысль разумная.

Reply

sassa_nf March 7 2016, 22:47:39 UTC
так не length, а [1..1000000000]

Reply


migmit March 8 2016, 08:23:28 UTC
Слушай, тут на ЛОРе обсуждают задачку, говорят, что из твоего курса (сам не проверял): https://www.linux.org.ru/forum/development/12415360

И бают, будто бы в ответе сказано, что corge не может привести к расходимости. Так оно вполне может, если только там тип явно не указан. Я, конечно, не вполне понимаю, что значит "корректный набор аргументов", но уж corge стопудово может быть чем угодно.

Reply

migmit March 8 2016, 08:24:39 UTC
А, пардон, я там недопонял. Говорят, ответ неизвестен. Прошу пардону.

Reply

deni_ok March 8 2016, 10:34:50 UTC
Ты имеешь в виду, что instance Num мы можем для стрелочного типа сделать?

Reply

migmit March 8 2016, 10:50:59 UTC
Ну да.

Reply


nponeccop March 9 2016, 23:28:54 UTC
Ну кто так меряет! ghci вроде как сильно хуже кодогенит, чем ghc -O. Реквестирую нативный бенч с Criterion.

Reply

deni_ok March 10 2016, 07:20:58 UTC
Так там и грузится отоптимизированный модуль, там же сначала ghc -O2 Length.hs

Reply


Leave a comment

Up