Garbage collection
Simon Peyton Jones
simonpj at microsoft.com
Tue Nov 18 15:59:29 UTC 2014
Isn't it this simple: the Static Pointer Table must be a source of roots for the garbage collector. Of course! An item in the SPT may be looked up at any time.
Easy. What am I missing?
I'm deeply suspicious of any solution that involves a call to performGC. That smells wrong.
Simon
| -----Original Message-----
| From: ghc-devs [mailto:ghc-devs-bounces at haskell.org] On Behalf Of
| Facundo Domínguez
| Sent: 18 November 2014 00:44
| To: ghc-devs at haskell.org
| Subject: Fwd: Garbage collection
|
| Hello,
| While working in the StaticPointers language extension [1], we
| found we have some unusual CAFs which can be accessed after some
| periods of time where there is no reference to them.
|
| For instance, the following program when compiled contains no
| reference to `g`. `g` is actually looked up at runtime in symbol
| tables via the call to `deRefStaticPtr`.
|
| g :: String
| g = "hello"
|
| main =
| deRefStaticPtr (static g) >>= putStrLn
|
| Desugars to:
|
| g :: String
| g = "hello"
|
| main =
| deRefStaticPtr (StaticPtr (StaticName "" "Main" "g")) >>= putStrLn
|
| In principle, there is nothing stopping the garbage collector from
| reclaiming the closure of `g` before it is dynamically looked up.
|
| We are considering using StablePtrs to preserve `g`. So the code
| desugars instead to:
|
| g :: String
| g = "hello"
|
| main =
| deRefStaticPtr (let x = StaticPtr (StaticName "" "Main" "g")
| in unsafePerformIO $ newStablePtr g >> return
| x
| ) >>= putStrLn
|
| This solution could be temporal though, until we implement the so
| called static pointer table, which would keep the values alive.
|
| Would you have any comments about such a solution or maybe would you
| advice some other alternative?
|
| Thanks,
| Facundo
|
| [1] https://ghc.haskell.org/trac/ghc/wiki/StaticPointers
| _______________________________________________
| ghc-devs mailing list
| ghc-devs at haskell.org
| http://www.haskell.org/mailman/listinfo/ghc-devs
More information about the ghc-devs
mailing list