1. A method for evaluating objects in a data structure, the method comprising: assigning one or more objects to one or more nodes in a data structure having at least a root node, wherein the objects are assigned to the nodes in accordance with a first order to maintain pre-existing dependencies between said objects and to allow the objects to be evaluated in a serial manner to avoid deadlock when a plurality of threads are concurrently executed to evaluate the objects during execution of a program; selecting a first object for evaluation, in response to determining that a current object is unevaluated; and traversing the data structure in accordance with the first order for a second object to be evaluated, in response to determining that the first object is unavailable, 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.