todo.txt 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. Todo, when I find the time:
  2. - Fix some broken tests.
  3. - [DONE] See if composite deltas can be re-implemented with primitive deltas that depend on their contents
  4. Motivation:
  5. - No more need for a 'CompositeLevel' class that keeps track of which delta is contained by which composite.
  6. - Composites that contain a common delta could be made conflicting (this is consistent with our "rules": a conflict can only occur between deltas that have a common dependency)
  7. Difficulty:
  8. - Still want to show/hide deltas at certain level.
  9. - Add Version.getGraphState()
  10. Motivation:
  11. - Often, we need the graph state (i.e. snapshot) associated with some version, e.g., to make an update to it (creating a new version).
  12. - Currently, we use all kinds of tricks (sometimes very slow replaying of all deltas since big-bang, sometimes the more efficient rollback/forward from our current graph-state) to get a certain graph state.
  13. - Code would be easier to read if we can just get the GraphState out of any Version.
  14. Difficulty:
  15. - Decide how often to store snapshot. Tradeoff between memory use and speed.
  16. - In a first (naive) implementation, could just keep all generated snapshots (in lazy manner) in memory, forever.
  17. - Make Version.findPathTo(v:Version) more efficient (use breadth-first search)
  18. Motivation:
  19. - This function is used very often. It makes code easy to read.
  20. - Currently implemented using Depth First Search (with a little heuristic)
  21. - Fix import/export (serialization) of versions.
  22. - Think: should self-embedding really be used for 'tagging'?
  23. Pro: Self-embedding already exists implicitly, why not allow it explicitly as well?
  24. Con: Makes several parts (e.g., merging) of the codebase more complex (need explicit tests to prevent infinite recursion)
  25. Con: Do we even need tagging? A global operation like "give me all versions with tag X" will never scale as the number of versions goes up. Everything should be scoped. A tag should only have meaning within a well-defined scope.
  26. - Think: Introduce read-dependencies
  27. - A NodeDeletion also unsets all outgoing edges of a node. Incoming edges must be unset by EdgeUpdates, and the NodeDeletion must depend on these EdgeUpdates. Maybe it will make the implementation (of conflict checking) simpler if a NodeDeletion would *not* automatically unset outgoing edges, and instead also would have to depend on EdgeUpdates that un-set the nodes?
  28. Pro: Simpler conflict-checking code
  29. Pro: Related to the previous, will also make the addition of read-dependencies easier to implement.
  30. Pro: Easier to explain to people
  31. - Add meta-models and conformance checking
  32. - Add action language to FSA
  33. - Add concrete syntax
  34. - Add neutral action language for graph operations
  35. see ModelVerse specification.
  36. implement VF2, ... on top of this action language.
  37. -. Then bootstrap.
  38. => look at Scheme
  39. Cip:
  40. - maybe when live modeling alone, don't need to know dependencies, conflicts, between deltas
  41. - maybe only need two kinds of dependencies: Reads and Writes.
  42. - consistency checking on append-only set:
  43. look into database theory, eventual consistency to enable concurrent read/write access
  44. - nicer visualization for graphs:
  45. render them as objects/tables (can be done with graphviz)
  46. - interaction nets:
  47. the optimal implementatoin of functional languages
  48. (nice rabbit hole)
  49. garbage collection for free
  50. - ian piumarta