From 7b080eacc0d19ed65c7b16270c647189b9831ecb Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Mon, 13 Jul 2015 15:56:39 -0400 Subject: [PATCH] Notes --- TODO.md | 135 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 135 insertions(+) diff --git a/TODO.md b/TODO.md index 9a6fafa..fea80b8 100644 --- a/TODO.md +++ b/TODO.md @@ -1 +1,136 @@ Consider whether a stack or a queue makes most sense for the freelist. + + +Needed by prospect: + + - `pattern->matcher` with `#t` + + - `matcher-project` + - `matcher-project/set` + - `matcher-project/set/single` + + - many userland uses + - one interesting use in `drop-interests` / `drop-patch`, used in `mux-update-stream` + - perhaps this can be replaced with a `matcher-step` combination? + - no, it'd be a little awkward, because of the trailing close-paren. + + - `matcher-match-value` + + - used to route messages + - once to check that noone has asserted the message in the routing table + - and once to actually route it + + - `matcher-match-matcher` + + - used in `compute-affected-pids` to project out PIDs on the + right (after a step to get past the struct:observe) + - used with a combiner that unions in the PIDs on the right + - used with a left-short that steps over the close-paren from the struct:observe + + - `matcher-union` with default and with `\vw.#t` + + - used to create cross-level observations in `observe-at-meta` in core + - to compute the "cover" of a patch in compute-affected-pids - + union of added & removed + - used in `apply-patch` and `patch-union` with default combiner + - used in `update-interests` and `compose-patch` with a combiner + that ignores the structure of the ok() value + - (used in `unapply-patch`, which is not used) + + - `matcher-step` (for removing open-paren and observation marks and + skipping the corresponding close-paren) + + - used in `biased-intersection` and `compute-affected-pids` to + skip struct:observe + + - `matcher-relabel` + + - used throughout to replace ok() leaf values. + + - `matcher-subtract` with default, `\vw.#f`, `add-combiner` and `rem-combiner` + + - used with always-false in `limit-patch`, `compose-patch` and + `update-interests`, ignoring the ok() values + - used with default in `compute-patch` (and in `limit-patch/routing-table`, which is not used) + - used with both `add-combiner` and `rem-combiner` in `compute-aggregate-patch` + - used with default in `apply-patch` + - (used in `unapply-patch`, which is not used) + + - `matcher-intersect` with `\vw.v`, `\vw.v∩w`, and `\vw.#t` with a left-short argument. + + - used in `limit-patch` in a way that's tantamount to an explicit simultaneous relabelling + - used with an always-true combiner in `biased-intersection` + - (used in `limit-patch/routing-table`, which is unused) + + + digraph Dependencies { + graph [rankdir=LR]; + + // matcher + subgraph xcluster_union { + unionUnit; + unionPIDs; + } + project; + matchValue; + matchMatcher; + step; + relabel; + subgraph xcluster_subtract { + subtractUnit; + subtractPIDs; + subtractCustom; + } + subgraph xcluster_intersect { + intersectAsymmetric; + intersectUnit; + } + + // patch + // composePatch -> subtractUnit; + // composePatch -> unionUnit; + // computePatch -> subtractUnit; // I guess? + // stripInterests -> relabel; + // stripPatch -> stripInterests; + applyPatch -> subtractPIDs; + applyPatch -> unionPIDs; + biasedIntersection -> intersectUnit; + biasedIntersection -> step; + computeAggregatePatch -> subtractCustom; + labelInterests -> relabel; + limitPatch -> intersectAsymmetric; + limitPatch -> subtractUnit; + patchUnion -> unionUnit; + updateInterests -> subtractUnit; + updateInterests -> unionUnit; + dropInterests -> project; + labelPatch -> labelInterests; + + // mux + computeAffectedPIDs -> matchMatcher; + computeAffectedPIDs -> step; + computeAffectedPIDs -> unionUnit; + messageRouting -> matchValue; + muxUpdateStream -> applyPatch; + muxUpdateStream -> biasedIntersection; + muxUpdateStream -> computeAffectedPIDs; + muxUpdateStream -> computeAggregatePatch; + muxUpdateStream -> dropInterests; + muxUpdateStream -> labelPatch; + muxUpdateStream -> limitPatch; + muxUpdateStream -> patchUnion; + + // core + observeAtMeta -> union; + + // user code + userCode -> project; + userCode -> observeAtMeta; + + // semantics + semantics -> muxUpdateStream; + semantics -> messageRouting; + groundVM -> applyPatch; + groundVM -> labelPatch; + demandMatcher -> updateInterests; + }