Size: a a a

2021 June 29

к

кана in Haskell
вот если бы в box можно было бы ничего изначально не класть, а чтение такого значения останавливало бы вычисление, пока кто-то туда что-нибудь не запишет (и запускало бы вычисление, которое эту запись бы и делало), то получилось бы ровно то что в хаскеле
источник

[

[BRM]White Rabbit in Haskell
источник

[

[BRM]White Rabbit in Haskell
это можно описать, чуть увеличив класс коробки. Только вот никто туда не запишет :(
источник

[

[BRM]White Rabbit in Haskell
ого, я смог уместить весь код на одном экране!
источник

L

Lierdakil in Haskell
Если сразу выделить немного памяти в куче, то строгое "однопроходное" на уровне "наивного" (даже чуть быстрее, но в пределах погрешности)

cabal run exes -- +RTS -H16M
Up to date
benchmarking strict
time                 100.8 μs   (100.7 μs .. 100.9 μs)
                    1.000 R²   (1.000 R² .. 1.000 R²)
mean                 101.2 μs   (100.9 μs .. 102.1 μs)
std dev              1.637 μs   (193.9 ns .. 3.464 μs)
variance introduced by outliers: 10% (moderately inflated)

benchmarking lazy
time                 361.0 μs   (360.1 μs .. 362.0 μs)
                    1.000 R²   (1.000 R² .. 1.000 R²)
mean                 362.0 μs   (361.0 μs .. 364.1 μs)
std dev              4.697 μs   (3.074 μs .. 7.755 μs)

benchmarking naive
time                 102.1 μs   (101.9 μs .. 102.3 μs)
                    1.000 R²   (1.000 R² .. 1.000 R²)
mean                 102.2 μs   (102.0 μs .. 102.9 μs)
std dev              1.234 μs   (473.7 ns .. 2.577 μs)
источник

к

кана in Haskell
ого
источник

к

кана in Haskell
а сравни с таким

naive :: [Int] -> [Int]
naive xs = xs $> minimum xs
источник

[

[BRM]White Rabbit in Haskell
(тем временем в хаскеле это пишется в 4-5 строчек и без накладных)
источник

L

Lierdakil in Haskell
А вот оно -- медленнее на 25-30%

benchmarking naive2
time                 127.7 μs   (127.4 μs .. 127.9 μs)
                    1.000 R²   (0.999 R² .. 1.000 R²)
mean                 127.9 μs   (127.7 μs .. 128.1 μs)
std dev              689.0 ns   (535.2 ns .. 1.045 μs)
источник

к

кана in Haskell
удивительно, а с дефолтными настройками гц все наоборот
источник

L

Lierdakil in Haskell
да тут даже не гц, а просто менеджера памяти
источник

K

Kir in Haskell
null - это значение ссылки
источник

K

Kir in Haskell
А naive-то держится
источник

[

[BRM]White Rabbit in Haskell
да, я уже понял
источник

[

[BRM]White Rabbit in Haskell
и переделал
источник

к

кана in Haskell
а можешь дать полную команду?
источник

L

Lierdakil in Haskell
cabal run exes -- +RTS -H16M -- это полная команда. только собирать надо с -rtsopts. я не помню что там в hpack надо писать, но в cabalfile это ghc-options: -rtsopts
источник

L

Lierdakil in Haskell
-H у нас минимальный размер кучи устанавливает.
источник

L

Lierdakil in Haskell
по дефолту 0
источник

к

кана in Haskell
а черт, я просто не на том уровне прописывал ghc-options
источник