Our great sponsors
-
WorkOS
The modern identity platform for B2B SaaS. The APIs are flexible and easy-to-use, supporting authentication, user identity, and complex enterprise features like SSO and SCIM provisioning.
Inspired by the rust compiler, you could represent the entire state of the application as a graph of operations with inputs and outputs. You can hash all the inputs and use that to memoize the operations, so that you don't have to repeat them, you can cache them in memory or on disk, and it helps you track which parts of the app state actually change between user operations and you can then be sure you put all the changes in the undo/redo stack, and so that you don't have to store duplicate copies of things that don't change. (How's that for a run-on sentence?) You could run a general binary diff algorithm between subsequent versions of the same operation with different inputs to try to reduce the memory used by storing the different versions, and have specialized diff algorithms for specific types of data. (How do you identify related operations? How much CPU does this use?) You can have a background task that compresses older versions with LZ4 or zstd. You can have a background task that saves older versions on-disk when there's memory pressure.