Closed natefaubion closed 1 year ago
cc @mikesol
This does not attempt to add any additional let floating, just replace the existing let floating. Anything that was evalAssocLet
(let floating) is now floatLet
.
Related to (1), would it make sense for all of the let floating to happen in eval? I say this from a maintainability perspective: if it's nestled down in functions like evalUpdate, it's more difficult to reason about why the call happens there & not elsewhere. Alternatively, if it needs to be that far down, it'd be good to leave a comment above the function about why floating happens where it happens & the reason certain things make the cut for floating but not others.
Not everything goes through eval
directly. eval
turns Syntax into Semantics, but if you are already in Semantics (such as in foreign modules) what are you to do? The let floating is still necessary, so the only solution is to put it with the actual interpretation routines.
Moving completely to eval.