> Is that the plan? Almost. We need to run the cycle collector before a send already to ensure the thread local "cycle candidates" list is empty (note that it is always empty after a cycle collection), otherwise it would interfere with multi-threading. Alternatively we can make the list global and protected via a lock (or implement it as lockfree queue...).
There are many other options, we can also restrict the sending to `.acyclic` types. Or we request that "orphaned objects" that will be misdetected as false external roots to be cleaned up manually. That is a good idea anyhow, ensuring the programmer he still aware of the typology: proc process(x: Node) = use(x.left) # likely invalid: spawn process(x.right) # better: extract it spawn process(move x.right) Run