[GHC] #14789: GHCi fails to garbage collect declaration `l = length [1..10^8]` entered at prompt
GHC
ghc-devs at haskell.org
Sat Feb 10 20:17:53 UTC 2018
#14789: GHCi fails to garbage collect declaration `l = length [1..10^8]` entered at
prompt
-------------------------------------+-------------------------------------
Reporter: kabuhr | Owner: (none)
Type: bug | Status: new
Priority: normal | Milestone:
Component: GHCi | Version: 8.2.2
Keywords: | Operating System: Unknown/Multiple
Architecture: | Type of failure: Runtime
Unknown/Multiple | performance bug
Test Case: | Blocked By:
Blocking: | Related Tickets:
Differential Rev(s): | Wiki Page:
-------------------------------------+-------------------------------------
This was recently reported on Stack Overflow
(https://stackoverflow.com/questions/48723119/binding-len-length-xs-and-
then-calculating-len-causes-ghc-to-consume-lots).
With GHC 8.2.2, assigning the length of a large list as a top-level
declaration at the GHCi prompt and evaluating it:
{{{
Prelude> l = length [1..10^8]
Prelude> l
10000000
Prelude>
}}}
allocates about 7 gigs of memory before displaying a result, and then
memory continues to grow over the next few seconds (at the idle GHCi
prompt) until 10 gigs of memory has been allocated. None of it is freed
until the interpreter session ends.
In contrast, directly evaluating the expression or assigning it with a
let-statement does **not** exhibit this behavior:
{{{
Prelude> length [1..10^8]
10000000
Prelude> let l = length [1..10^8]
Prelude> l
10000000
Prelude>
}}}
Also, loading the top-level declaration from a file and then evaluating it
at the prompt does **not** exhibit the problem.
I took a look at Ticket [ticket: 14336] and applied the `-fno-it` patch
referenced there. This slightly changed the pattern of memory usage: it
grew to about 4 gigs before displaying the result, but then continued to
grow for several seconds at the GHCi prompt before landing at about 10
gigs.
I verified that the bug still exists on the current "master" branch
(though I didn't check the "ghc-8.4" branch).
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/14789>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list