| ▲ | usrusr 3 days ago |
| Does it offer creating a mutable view on top of the immutable structure that can be used to accumulate a whole set of changes to later be materialized into a copy with the changes? (or to be used directly, at whatever cost would be required) That's something I've been wondering why it's not more of an established thing. It would basically be docker, but for in-memory reference graphs instead of filesystems. |
|
| ▲ | wk_end 3 days ago | parent | next [-] |
| Immer does this for JS/TS. https://immerjs.github.io/immer/ |
|
| ▲ | munchler 3 days ago | parent | prev | next [-] |
| You are perhaps looking for software transactional memory. https://en.wikipedia.org/wiki/Software_transactional_memory |
|
| ▲ | lmm 3 days ago | parent | prev [-] |
| You can compose together a bunch of edit operations (an edit command, if you like) and apply them at once at the end, is that what you mean? |
| |
| ▲ | usrusr 2 days ago | parent [-] | | Kind of. Can you use the interim state fork (original plus changes, not yet committed into a new immutable) as a "readable" type, the union of mutable and immutable variants? That would resolve choice dilemmas like the decision between mutable and immutable builders: keep the mutable where it is only used by the creating thread, materialise into an immutable when it needs to cross thread boundaries, fork where a thread needs to adapt a little and have all consumers typed to the readable version so that they can work with either, without requiring a new immutable. | | |
| ▲ | lmm 2 days ago | parent [-] | | > Can you use the interim state fork (original plus changes, not yet committed into a new immutable) as a "readable" type, the union of mutable and immutable variants? Not really, not at a language semantics level - although in practice if you applied your current mutation to the original object, did something with the result, and then threw the "partially edited object" away, the JVM's escape analysis might catch that and never fully materialise the "partially edited object". Note that nothing is really mutable, not even your edit operations - you form your combined edit by composing together a bunch of smaller edits, but all those edits are immutable. | | |
| ▲ | usrusr 20 hours ago | parent [-] | | Thanks for your patience. I guess the big blocker for the hypothetical "full triangle of readable-mutable-immutable" is that deep read operations would have to create a potentially long lived object for each intermediate step in e.g. a getter chain if you want to avoid special syntax. And then you're back to extreme reliance on escape analysis. And at some point even correctly identified nonescaping allocations start summing up. |
|
|
|