There may be a completely new approach, by the way, in the very interesting unison language [1]. Because its code is content-addressed, reloading should be possible by swapping out function identifiers (which are hashes, not names). Because the AST refers to functions by ID not name or label, one could perform replacements/changes without interfering with any existing code.