nim-works / cps

Continuation-Passing Style for Nim 🔗
MIT License
199 stars 17 forks source link

Forking a continuation requires deepCopy()? #197

Open zevv opened 3 years ago

zevv commented 3 years ago

The move to inherited objects has made it impossible to properly fork continuations. This is what I did before:

proc fork(c: C): C {.cpsMagic.} =
  let c2 = C()
  c2[] = c[]
  c.evq.push c2
  c

This doesn't work because c2 will now be of the C root type, losing all memory of the original type and its data. Workaround is using deepCopy(), but that'll not work on the JS backend and is disabled by default for --gc:arc

I guess there is no alternative standard way to do this?

disruptek commented 3 years ago

Not yet, and it's the most critical ~defect~ missing enhancement :smirk: as far as I'm concerned.

disruptek commented 3 years ago

This can be solved coincidentally with #190.