[Haskell-cafe] Memory leak in infinite recursion
Dr.Koster
drkoster at qq.com
Wed Jun 20 01:54:22 UTC 2018
In general infinite monadic recursion will leak, since the tail position is always >> or >>= instead of your own recursive function, but under certain situations, e.g. IO without arguments, the compiler will figure there's no need to push new stack frame. But anyway it's better to checkout yourself rather relying on some weak assumptions.
发自我的iPhone
------------------ Original ------------------
From: Никита Фуфаев <kitttoran at gmail.com>
Date: Wed,Jun 20,2018 2:37 AM
To: haskell-cafe <haskell-cafe at haskell.org>
Subject: Re: [Haskell-cafe] Memory leak in infinite recursion
Hello everyone
In C you can't implement main loop with recursion like
void mainLoop() {
doSomething();
mainLoop();
}
because without optimisations stack will overflow.
In haskell it's common to write
mainLoop = doSomething >> mainLoop, and it doesn't leak memory because of haskell's evaluation model.
Does memory leak or argument stack overflow happen in this case?
mainLoop = doSomething >> mainLoop >> exit ExitSuccess
What about this case?
mainLoopModeA = do
doSomething
when condition mainLoopModeB
mainLoopModeA
mainLoopModeB = do
doSomethingElse
when anotherCondition mainLoopModeA
mainLoopModeB
or this case?
mainLoopModeA = do
doSomething
if condition
then mainLoopModeB
else mainLoopModeA
mainLoopModeB = do
doSomethingElse
if anotherCondition
then mainLoopModeA
else mainLoopModeB
--
Nikita Fufaev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/haskell-cafe/attachments/20180620/dda33fc3/attachment.html>
More information about the Haskell-Cafe
mailing list