Daily Note - 2024-11-22
Hey, I'm Hanno! These are my daily notes on Crosscut, the programming language I'm creating. If you have any questions, comments, or feedback, please get in touch!
This note was published before Crosscut was called Crosscut! If it refers to "Caterpillar", that is the old name, just so you know.
The approach of logging "undo instructions" to get the ability to
rewind the program won't work as described, if
implemented in the current runtime. The problem is that
executing instructions is currently not atomic. For
example, the add
instruction might pop its
first argument from the stack, before noticing that
there is no second argument left.
If we don't take this into account somehow and log instructions to undo the partially executed instructions, rewinding won't work from such a state. Which is relevant, because hitting some kind of error condition is probably going to be one of the prime reasons to want to rewind in the first place.
It's unclear to me how big of a problem this actually
is. Once static typing is implemented, the case I
described here can't happen anyway, because the compiler
would notice the missing argument and not generate the
add
instruction in the first place. But
still, it would be nice to just never have to worry
about this causing any potential problems. I'll have
thoughts on that tomorrow.