1. A system that fully captures outer variables as data objects, comprising: an assignment component that captures a free variable in a representation of a closure; and a code restructuring component that rewrites the free variable so as to capture it as an environment object, and creates an explicit expression representation of the closure.