| ▲ | mentalgear 5 hours ago | |
> [CRDT] This means merges don’t need to find a common ancestor or traverse the DAG. Two states go in, one state comes out, and it’s always correct. Well, isn't that what the CRDT does in its own data structure ? Also keep in mind that syntactic correctness doesn't mean functional correctness. | ||
| ▲ | mweidner an hour ago | parent | next [-] | |
You can think of the semantics (i.e., specification) of any CRDT as a function that inputs the operation history DAG and outputs the resulting user-facing state. However, algorithms and implementations usually have a more programmatic description, like "here is a function `(internal state, new operation) -> new internal state`", both for efficiency (update speed; storing less info than the full history) and because DAGs are hard to reason about. But you do see the function-of-history approach in the paper "Pure Operation-Based Replicated Data Types" [1]. | ||
| ▲ | Retr0id 4 hours ago | parent | prev [-] | |
Yes. There are many ways to instantiate a CRDT, and a trivial one would be "last write wins" over the whole source tree state. LWW is obviously not what you'd want for source version control. It is "correct" per its own definition, but it is not useful. Anyone saying "CRDTs solve this" without elaborating on the specifics of their CRDT is not saying very much at all. | ||