我的空间泄漏发生在我的一个个人项目中.但我不希望有人在我的项目中解决它.我想了解它.
我通过编写这个算法来重现我的空间泄漏:
u是由以下定义的序列:
在此之后,定义u:u(n)= u(n-5)+ u(n-10) - u(n-15)
在haskell中易于实现吗?
import System.Environment (getArgs)
u = [1, 2, 1, 3, 1, 4, 1, 5, 1, 6, 1, 7, 1, 8, 1, 9, 1, 10, 1, 11]
++ zipWith3 go u' u'' u'''
where u' = drop 15 u
u'' = drop 10 u
u''' = drop 5 u
go a b c = a + b - c
main = do …Run Code Online (Sandbox Code Playgroud) 我很抱歉这看起来像一个“琐事”问题,但这是我能想到的最简单的例子:
module type Foo = sig
type 'a t
val foo : 'a -> 'a t
end
module Foo : Foo = struct
type 'a t = T of 'a
let foo x = T x
end
(* Rewrap foo, add one function *)
module type Bar = sig
include Foo
val bar : int -> int t
end
module Bar : Bar = struct
include Foo
let bar n = foo (n + 1)
end
(* Specialization of Baz …Run Code Online (Sandbox Code Playgroud) 我写了一个tcp服务器,这是我的主循环方法:
serverLoop :: Socket -> IO ()
serverLoop sock = do
(conn, _) <- accept sock
forkIO $ handleConn conn
serverLoop sock
Run Code Online (Sandbox Code Playgroud)
(注意:handleConn :: Socket -> IO ()是我的程序特有的功能.)
我想将它重构成更加一元的方式,这是我的试探性的:
serverLoop :: Socket -> IO ()
serverLoop sock = foldl1 (>>) $ map go $ repeat sock
where go sock = (accept sock) >>= (forkIO . handleConn . fst) >> return ()
Run Code Online (Sandbox Code Playgroud)
但是,一旦我开始通过套接字发送数据,这会使程序崩溃.
以下是我的问题:为什么?有什么办法解决的?
haskell ×2
fibonacci ×1
io-monad ×1
memory-leaks ×1
module ×1
ocaml ×1
sequence ×1
sockets ×1
space-leak ×1
types ×1