
On 10/09/2015 10:41, Simon Peyton Jones wrote:
| > The awkward spot is the runtime system. Currently it goes to some | > lengths to ensure that it never introduces an indirection for a | > boxed-but-unlifted type. Simon Marlow would know exactly where. So | | I *think* we're ok here. The RTS doesn't have any special machinery | to avoid indirections to unlifted things that I'm aware of. Did you | have a particular problem in mind?
Well I can't point to anything very specific. I just recall that in various places, if a pointer was to an Array# we would immediately, eagerly, recurse in the GC rather than add the Array# to the queue for later processing. Maybe that is no longer true. Maybe it was never true.
Maybe that was an earlier variant of the GC. The current GC just treats unlifted objects like other objects in a breadth-first way, and it never introduces indirections except when reducing a selector thunk. So I think this is ok. Cheers Simon
It shouldn't be hard to find out. If true, there would be a run-time system test that returns true for boxed-but-unlifted heap objects.
I think it would be worth a look because if I'm right it could have a significant impact on the design. > Simon