Noisett
Noisett is a minimalistic multi-agent middleware, where agents are tiny pattern-triggered peers. These agents are named "Nuts". When they receive a message, they can send other messages, if they're so inclined.
Each Nut is defined in its own text file (extension .nut), that looks like an INI file. A ".nut" file contains sections. Sections start with a name in square brackets, like this:
example00.nut [MAIL] ... [LINK] ... [COPY] ... [PROG] ...
The MAIL section contains incoming messages, it is the Nut's inbox. The LINK section keeps parts of the network topology. The COPY section is just a clipboard. The PROG section is where the behavior of the Nut is defined. It is possible to create additional sections programmatically.
If the PROG section of a Nut contains the following code...
example01.nut [MAIL] [LINK] [COPY] [PROG] * hey * > Hello world
... then this Nut will send "Hello world" every time it receives a message with "hey" in it. It's pretty straightforward. Triggers are simple glob patterns, and messages are public: this "Hello world" will always be sent to every Nut connected to this one.
There are no keywords in Noisett, only the following characters have special meanings:
Noisett special characters list * Wildcard | End of line + Check whether message matches an additional pattern - Check whether message does not match a pattern > Send a message < Send a message to myself ^ Send a message to my Tables . Rename myself [ Choose the current section (create it if needed) & Add something to the current section ? Check whether anything in current section matches a pattern ! Check whether nothing in current section matches a pattern % Copy from current section everything that matches a pattern ] Delete from current section everything that matches a pattern { Create a topological link } Delete every link matching a pattern _ Set vector filter pattern $x Insert wildcard number x = Insert my name @ Insert name of message sender € Insert a pattern that matches everything in current section # Insert name of next section § Insert current section (in message) or clipboard (in section) ~ Insert a random element from current section " Insert the following characters (escape) | Insert an End of line
These special characters are either standalone or followed by their "arguments".
Some of them are conditions (namely + - ? and !) while some others express actions.
Code lines in the PROG section always start with a pattern. If the current message matches it, we just keep reading the line and executing actions until a condition fails (or until the end of line). Incoming messages are matched against every code line.