The new RFC link worked fine for me (tnx). Here are some random comments which may or may not deserve to be raised as issues…
1 Key Concepts
1.1 Constraints
1.1.1 Message Propagation Delay
The Cortical Message propagation delay between the same sender and the same receiver MUST be constant.
As Joe Armstrong might have put it, that breaks the laws of physics for distributed systems. (Indeed, it is a hard constraint for concurrent systems to meet.) That said, it should be possible to produce a reasonable simulation of this by buffering input messages until a given propagation time is reached.
1.1.2 Module Processing Duration
Each Module MUST take constant time to receive, process, and emit Cortical Messages.
Once again, this is difficult to guarantee, but can be simulated by buffering output messages until a given processing time is reached.
1.1.3 Module Processing Completeness
Each Module MUST process all received Cortical Messages.
This doesn’t sound hard for Elixir, with some provisos. Each Elixir process will typically have a set of input dispatching patterns. These are tried in sequence by the BEAM until a match is found. A trailing fallback pattern can “process” (for some value of process
) anything that comes in.
2 Functional Specification
2.1 Step
Looking at the chart, I am reminded of my notion regarding unique and genealogically-based IDs in each message. To be clear, I don’t expect Monty to pay attention to these, but developers might find them very useful. Roughly:
- Each Sensor Module is given a universally unique identifier (UUID) at its creation. It uses this ID in all messages it emits.
- Each resulting message (e.g., from an LM) contains one or more dynamically calculated IDs, based on all of the module’s current input IDs.
The question of how the resulting IDs should be calculated is left as an exercise for the student (:-), but here are a couple of possibilities:
- a comprehensive tree structure, containing all of the input IDs
- a cosine vector, characterizing and summarizing the input IDs