Another much simplified scheme:<br><br>* leave all locations uninitialized<br>* if a location is assigned Unknown, bind it to Unknown explicitly in the bindings.<br><br>Then Retrieve becomes:<br><br>Retrieve (L)<br>{<br>  if L has binding<br>
    return L's binding<br>  else<br>    if L is on stack or heap<br>      return UndefinedVal<br>    else<br>      return SymbolicVal<br>}<br><br>The locations that are assigned unknown should not be too much, so this would not incur too much overhead. The only bindings that would be removed explicitly are those that are dead.<br>
<br>