Haphazard Inc.:

Dataflow computers

I release this to the public domain, except that you must tell me and give me code if you make any new nodes or you clean it up some.
Dataflow computers do things as soon as they can be done, with each operation(node) starting as soon as it has all its inputs(aka. ports) filled. This is different from normal languages and computers, which do things one at a time, as soon as you tell them to.

My language

You should run it with: java dataflow programfile.txt This is the syntax for my code:
command node1 port1 node2 port2... ;comment
::
token node port
where command is a node that you want to make do something, and each node<number> and port<number> is a where the node out puts to, at which port."token" is the data of a token (aka. message) that you want to send node at port before you start the program. token can be either an integer or a string (if the string has a space in it you need to put quotes around it).
The commands are in the commands.txt file in the zip file.

Making nodes

If you are good at Java programming you can make more nodes. You can make a node by implementing WorkObject.It has to include:
public void addToken(Token token); - adds a token in, I'll talk about those later.
public void evaluate(); - makes the token do what it needs to do
public boolean getCanDo(); - tells if it can evaluate it right now
public boolean constRepeat(); - if getCanDo() always returns true make this return true or else any program that uses it will never stop
public WorkObject newOne(dataflow parent,StringTokenizer st); - makes a new copy of this node, using st for all the arguments
Make sure your node also includes a default constructor, eg. one with no arguments. To send a token to another node use:
((WorkObject)parent.objects.get(thetoken.tokenTo - 1)).addToken(thetoken);

That is, if parent is the name of the parent dataflow object. That brings us to tokens...
public class Token {
public Object data;
public int tokenTo;
public int port;
}
Pretty much self explanatory. data is the token's data(normally a String or Integer),tokenTo is the target node's number, and port is the target node's port. In case you need an example, there are a few in dataflow.java

Using those nodes

First you need to make a new java class.
You should make a new dataflow object(eg. dataflow a = new dataflow();) Then you should add in the nodes. It is recomended you first load in the defaults:
a.addNode("copy",(new CopyObject()));
a.addNode("+",(new AddObject()));
a.addNode("*",(new MulObject()));
a.addNode("-",(new SubObject()));
a.addNode("rsend",(new RSendObject()));
a.addNode("input",(new InpObject()));
a.addNode("gate",(new GateObject()));
a.addNode("/",(new DivObject()));
a.addNode("print",(new PrintObject()));
a.addNode("if",(new IfObject()));
The arguments are: the name you want it to have, an example of it. You can use more of those to add on more nodes you created. Next, you have to parse a file. Use a.parse(String filename); . Then you have to do:
a.evalAll();