Program–value separability: the structural precondition for compilation, caching, and dense journaling in a DSL runtime | Synapse