1. A dual evaluation mode method comprising: determining, for certain functions and expressions within input computer code, whether each function and expression may have any recursive dependencies; generating, using one or more computer processors, eager evaluation mode executable code and a separate non-eager evaluation mode executable code for each function and expression within the input computer code determined to not be referenced recursively; providing both the eager evaluation mode executable code and the non-eager evaluation mode executable code to runtime software that supports both eager and non-eager evaluation modes; and executing the eager evaluation mode executable code and/or the non-eager evaluation mode executable code by the runtime software, wherein the executing comprises at least one of: evaluating one or more thunks to a value, and storing each value in an unboxed representation, wherein the unboxed representation stores only the value and the associated type is made known to a thunk evaluating process; and annotating one or more thunks with information related to the computational effects they may cause, and evaluating effect-causing thunks out of order when the compiler or runtime environment determines that executing those effects out of order will produce the same observable results as executing them sequentially.