▲ | motorest 4 days ago | |||||||
> Technically an algorithm that lets the last writer win is a CRDT because there is no conflict. Your comment shows some ignorance and a complete misunderstanding of the problem domain. The whole point of CRDTs is that the set o operations supported is designed to ensure that conflict handling is consistent and deterministic across nodes,and the state of all nodes involved automatically converge to the same state. Last-write-wins strategies offer no such guarantees. Your state diverges uncontrollably and your system will become inconsistent at the first write. > Making a true system that automatically merges data while respecting user intent and expectations can be an extremely hard problem for anything complex like text. Again, this shows a complete misunderstanding of the problem domain. CRDTs ensure state converges across nodes, but they absolutely do not reflect "user intent". They just handle merges consistently. User intent is reflected by users applying their changes, which the system then propagates consistently across nodes. The whole point of CRDTs is state convergence and consistency. | ||||||||
▲ | zovirl 4 days ago | parent | next [-] | |||||||
I think the parent was complaining about mentions of CRDTs which don’t acknowledge that the problem domain CRDTs work in is very low level, and don’t mention how much additional effort is needed to make merging work in a way that’s useful for users. This article is a perfect example: it says syncing is a challenge for local-first apps, logical clocks and CRDTs are the solution, and then just ends. It ignores the elephant in the room: CRDTs get you consistency, but consistency isn’t enough. Take a local-first text editor, for example: a CRDT ensures all nodes eventually converge on the same text, but doesn’t guarantee the meaning or structure is preserved. Maybe the text was valid English, or JSON, or alphabetized, but after the merge, it may not be. My suspicion, and I might be going out on a limb here, is that articles don’t talk about this because there is no good solution to merging for offline or local-first apps. My reasoning is that if there was a good solution, git would adopt it. The fact that git stills makes me resolve merge conflicts manually makes me think no one has found a better way. | ||||||||
| ||||||||
▲ | preommr 4 days ago | parent | prev | next [-] | |||||||
Not the parent comment, but I'll respond. > Your comment shows some ignorance and a complete misunderstanding of the problem domain. oof, this is a very strong position to take, and one would assume you have a very convincing follow up to back it up. And unfortunately I don't think you do. CRDTs can definitely be implemented as a last-write implementaiton. This should be obvious for state-based crdts. The problem is that it's a horrible UX because somebody could type a response to something that's out of date, and then just see it dissapear as they get the most recent message. Resolving "user intent" by choosing how to structure the problem domain (e.g. storing ids for lines, and having custom merging solutions) so that it reflects what the user is trying to do is the main challenge. I am quite frankly baffled at how arrongant your tone is given how far off the mark you seem to be. Genuinely makes me think that I am missing something given your confidence, but I don't see what point you're making tbh. | ||||||||
▲ | coldtea 3 days ago | parent | prev [-] | |||||||
>Your comment shows some ignorance and a complete misunderstanding of the problem domain Imagine how better your comment would be if you ommited the above line, which adds nothing to the correction you try to make, but comes off as stand-offish. |