1. A method to evaluate objects in a data structure, comprising: assigning, with a processor, objects to nodes in a data structure having a root node, wherein a first set of the objects are assigned to the nodes of the data structure in accordance with a first order based on an evaluation path of a first thread to identify dependencies between the objects and to facilitate serial evaluation to avoid deadlock when at least a second thread is concurrently executed to evaluate a second set of the objects during execution of a program; and in response to determining that a first object evaluated by the first thread is unavailable, traversing the data structure based on the first order for a second object in the second set of objects to be evaluated by the second thread, the second object being outside the path of the first thread, wherein each object in the data structure represents a future created according to a spawning computation which provides an executing thread with a code pointer and an argument from which a result for the future can be computed.