model diff representation
| Reported by: |
Ichthyostega |
Owned by: |
|
|
Priority:
|
grave
|
Milestone:
|
0integration
|
|
Component:
|
lumieraGui
|
Keywords:
|
design
|
|
Sub Tickets:
|
#992, #1047, #1066
|
Parent Tickets:
|
#318, #569, #887, #955, #957, #959, #963, #1008, #1014, #1153, #1199, #1206, #1234
|
As an intermediary step to define a backbone for GUI ⟺ Steam communication, we need a mechanism to represent model changes. This needs to be combined in a sensible way with the placement-IDs used in Steam-Layer to denote the relevant model elements.
- find a way to get this update notification handshake straight.
- please note, the update is initiated from the builder, which does not run in the event thread
- there are strict conventions how to use threads in GTK (in fact, in any modern GUI toolkit)
- find a way to push model updates while avoiding duplicated state representations in need to be synched
- structure the updates in a way to avoid spurious GUI updates for unchanged parts of the model. There will be lots of change notifications
Design Draft
The idea is to build the model updates on top of diff messages.
- each such message holds a tree diff
- using diffs, we get a loose coupling of similarly structured data
- this leads to recursive breakdown and forwarding of messages
- we define a diff language based on tokens of constant size
- this allows lazy (demand driven) processing of diff detection and application
Change history
(25)
| blocking: |
955 → 955, 951, 209, 957
|
| Description: |
modified (diff)
|
| Status: |
new → accepted
|
| blocking: |
955, 951, 209, 957 → 209, 951, 955, 957
|
| blocking: |
209, 951, 955, 957 → 209, 951, 955, 957, 959
|
| blocking: |
209, 951, 955, 957, 959 → 209, 955, 957, 959
|
| Description: |
modified (diff)
|
| blocking: |
209, 955, 957, 959 → 209, 955, 957, 959, 963
|
| blocking: |
209, 955, 957, 959, 963 → 209, 955, 957, 959, 963, 1008
|
| Owner: |
Ichthyostega removed
|
| Status: |
accepted → assigned
|
| blocking: |
209, 955, 957, 959, 963, 1008 → 209, 955, 957, 959, 963, 1008, 1014
|
| blockedby: |
992 → 992, 1041
|
| blockedby: |
992, 1041 → 992, 1041, 1047
|
| blocking: |
209, 955, 957, 959, 963, 1008, 1014 → 318, 955, 957, 959, 963, 1008, 1014
|
| blockedby: |
992, 1041, 1047 → 992, 1041, 1047, 1066
|
| blocking: |
318, 955, 957, 959, 963, 1008, 1014 → 318, 955, 957, 959, 963, 1008, 1014, 1153
|
| blocking: |
318, 955, 957, 959, 963, 1008, 1014, 1153 → 318, 955, 957, 959, 963, 1008, 1014, 1153, 1199
|
| blocking: |
318, 955, 957, 959, 963, 1008, 1014, 1153, 1199 → 318, 955, 957, 959, 963, 1008, 1014, 1153, 1199, 1206
|
| blockedby: |
992, 1041, 1047, 1066 → 992, 1047, 1066
|
| Resolution: |
→ done
|
| Status: |
assigned → closed
|
| Description: |
modified (diff)
|
| blocking: |
318, 955, 957, 959, 963, 1008, 1014, 1153, 1199, 1206 → 318, 887, 955, 957, 959, 963, 1008, 1014, 1153, 1199, 1206
|
| blocking: |
318, 887, 955, 957, 959, 963, 1008, 1014, 1153, 1199, 1206 → 318, 569, 887, 955, 957, 959, 963, 1008, 1014, 1153, 1199, 1206
|
| blocking: |
318, 569, 887, 955, 957, 959, 963, 1008, 1014, 1153, 1199, 1206 → 318, 569, 887, 955, 957, 959, 963, 1008, 1014, 1153, 1199, 1206, 1234
|
| blockedby: |
992, 1047, 1066
|
| blocking: |
318, 569, 887, 955, 957, 959, 963, 1008, 1014, 1153, 1199, 1206, 1234
|
| Parent Tickets: |
→ 318, 569, 887, 955, 957, 959, 963, 1008, 1014, 1153, 1199, 1206, 1234
|
| Sub Tickets: |
→ 992, 1047, 1066
|
As a first milestone, I've now drafted the design of a list diff language, given as sequence of diff verbs. Implemented the simple case, where a given diff
gets applied to a target sequence contained in a vector. Unit test pass!