For the time being, marshal and deepCopy aren't supported with arc/orc.
I wonder how to replace the following pattern without having deepCopy available:
func myFunc(tree: MyTree): MyTree =
result = deepCopy(tree)
# Modify result in-place.
...
# Return modified copy.
Returning a modified copy is a more functional API, also changing the original tree in-place is impractical if both the original tree and the myFunc result are needed after the call to myFunc.
An obvious workaround is to write a custom deepCopy func. That's kind of trivial for simple objects, but not so trivial for more complicated nested structures, so a custom deepCopy takes time to write, test and probably debug. If marshal was available, another (although somewhat expensive) workaround would be to serialize and deserialize the argument.
Any other ideas?