小编yon*_*ong的帖子

优化Haskell GC的使用

我正在运行一个长期存在的Haskell程序,它可以保留大量内存.运行+RTS -N5 -s -A25M(我的L3缓存的大小)我看到:

715,584,711,208 bytes allocated in the heap
390,936,909,408 bytes copied during GC
  4,731,021,848 bytes maximum residency (745 sample(s))
     76,081,048 bytes maximum slop
           7146 MB total memory in use (0 MB lost due to fragmentation)

                                  Tot time (elapsed)  Avg pause  Max pause
Gen  0     24103 colls, 24103 par   240.99s   104.44s     0.0043s    0.0603s
Gen  1       745 colls,   744 par   2820.18s   619.27s     0.8312s    1.3200s

Parallel GC work balance: 50.36% (serial 0%, perfect 100%)

TASKS: 18 (1 bound, 17 …
Run Code Online (Sandbox Code Playgroud)

profiling garbage-collection haskell memory-management

39
推荐指数
1
解决办法
454
查看次数

找到<< loop >>发生的地方

如果我们得到一个<<loop>>,那就意味着Haskell设法检测到一个无限循环.有没有办法让ghc告诉我们这个循环发生在哪里?似乎Haskell应该在某个地方拥有这些信息.

debugging haskell infinite-loop

23
推荐指数
1
解决办法
897
查看次数

如何用"ffast-math"编译?

我正在尝试对一些Rust代码进行基准测试,但我无法弄清楚如何设置"ffast-math"选项.

% rustc -C opt-level=3 -C llvm-args='-enable-unsafe-fp-math' unrolled.rs
rustc: Unknown command line argument '-enable-unsafe-fp-math'.  Try: 'rustc -help'
rustc: Did you mean '-enable-load-pre'?
Run Code Online (Sandbox Code Playgroud)

llvm-args='-ffast-math'并且llvm-args='-fast'也没有工作.我应该使用什么旗帜?

llvm rust fast-math llvm-codegen

15
推荐指数
2
解决办法
1058
查看次数

更严格的严格状态Monad

严格的状态monad定义使用:

m >>= k = State $ \s ->
  case runState m s of
    (a, s') -> runState (k a) s'
Run Code Online (Sandbox Code Playgroud)

但这仍然会泄漏记忆,因为a并且没有s'得到评估.例如,我们可能有一个函数f将大对象作为输入并快速返回(a, s'),但只要a没有评估,输入f就不能被GC.

一个可能的解决方案是f返回seq a (a, s'),但如果我们使用类似的东西MonadRandom,这并不总是可能的,并且状态被封装起来f.是否有这样定义的版本:

m >>= k = State $ \s ->
  case runState m s of
    (!a, !s') -> runState (k a) s'
Run Code Online (Sandbox Code Playgroud)

这已存在于任何地方的图书馆吗?

haskell lazy-evaluation state-monad

13
推荐指数
1
解决办法
564
查看次数

如何创建类似Haskell的函数依赖项

背景:我正在使用该nalgebra库,我想创建一个代表多元正态分布的结构.数字和行类型由方形矩阵类型唯一确定,所以我想写这样的东西:

#[allow(non_snake_case)]
pub struct Multivar<M: SquareMat<N, V>> {
    ?: V,
    ?: M,
}
Run Code Online (Sandbox Code Playgroud)

如果我用Haskell中,我将指定之间的函数依赖MNV.在Rust中最好的方法是什么?

rust

12
推荐指数
1
解决办法
182
查看次数

如何让MonadRandom成为Functor?

似乎来自random-fu包的MonadRandom不是Functor,因为我得到的错误如下:

Could not deduce (Functor m) arising from a use of ‘_1’
from the context (MonadRandom m)
Run Code Online (Sandbox Code Playgroud)

我尝试添加以下代码:

instance Functor MonadRandom where
    fmap = liftM

instance Applicative MonadRandom where
    pure  = return
    (<*>) = ap
Run Code Online (Sandbox Code Playgroud)

但我得到错误:

The first argument of ‘Functor’ should have kind ‘* -> *’,
  but ‘MonadRandom’ has kind ‘(* -> *) -> Constraint’
In the instance declaration for ‘Functor MonadRandom’

The first argument of ‘Applicative’ should have kind ‘* -> *’,
  but ‘MonadRandom’ has kind ‘(* -> …
Run Code Online (Sandbox Code Playgroud)

monads haskell

10
推荐指数
1
解决办法
256
查看次数

我可以创建一个展开循环的宏吗?

我正在尝试在Rust中编写一些快速矩阵代码,并且需要确保循环展开.有没有办法创建一个编译时for循环?例如:我想要

unroll_loop!(f, a, 3);
Run Code Online (Sandbox Code Playgroud)

生成

f(a, 0);
f(a, 1);
f(a, 2);
Run Code Online (Sandbox Code Playgroud)

macros rust

9
推荐指数
1
解决办法
1232
查看次数

Haskell内联函数可以作为参数传递吗?

假设我将一个小函数传递fmap.可以哈斯克尔内嵌fmap产生一个小势在必行循环?如果是这样,Haskell如何跟踪f真正的功能?使用Arrow组合器可以做同样的事情吗?

optimization haskell

8
推荐指数
2
解决办法
723
查看次数

使用镜头作为`map`

我想将这行代码转换map (^?! ix 0) [[0, 1], [4, 5], [9, 1]]成完全使用镜头,所以像[[0, 1], [4, 5], [9, 1]] & each . ix 0.但是,类型不匹配.这样做的正确方法是什么?

haskell lenses

8
推荐指数
2
解决办法
195
查看次数

为什么WrappedMonad和WrappedArrow?

为什么存在WrappedMonadWrappedArrow类型?是因为Monads不是Applicative吗?鉴于WrappedArrow存在,应该是实例

Arrow a => Applicative (Arrow a b) 
Run Code Online (Sandbox Code Playgroud)

简单地构建到Haskell本身就像Applicative现在的超类一样Monad

haskell applicative newtype

8
推荐指数
1
解决办法
284
查看次数