The Language:

The specification I've layed out so far goes as follows:

The language is array-based, where each array cell is an arbitrary-precision integer. In many ways, syntax is similar to brainfuck, but altered to not be as nonsensical. (For example, number literals are available)

Every command is exactly one character long, and all non-command characters are ignored.

The commands operate in the assumption of a forth-like stack context, but the array manipulation functions allow access to data above and below the apparent top of the stack.

Here's a list of all commands and their corresponding characters:

Socket commands:

o-Open a local TCP socket of the specified port (min of 49152 so it stays in the unregistered part of the port range) and close any previously open ports. This works as both a server-style and client-style connection.

g-Open a TCP socket of the standard AI port, talking to the specified IP. This would be a client-style connection, with a timeout.

c-Close the open socket, or does nothing if no port is open

r-Read a byte from the socket, not modifying if no byte received.

w-Write value to the currently open socket

Program Flow:

m-Leave a marker for program flow. This is also used for mutation, hence the name.

j-Jump to a marker, skipping the specified number of markers, by using input as a signed value. 0=next, -1=previous, etc. The ability to choose which marker to jump to provides sufficient ability to perform conditionals. Jumping outside the program has the same effect as running to the end: death.


+-Add the current and next-behind values together

--Invert the data value (One's complement, ie 0-data)

x-Set data to 0

0-F - Bitwise-Shift data left by 4 bits, add hex value given. In other words, BEEF would put 0xBEEF in the data cell.

Array Manipulation

>-Increment data pointer

<-Decrement data pointer

#-Increase data pointer by the amount in the current data (negative=decrease)

The Interpreter:

The original interpreter will be written in python, which provides libraries that make the socket manipulation required laughably simple, and also happens to provide arbitrary precision integers by default. Other than those two features, any language would do just as well, and probably be faster.

The Dedicated Host:

As of yet I haven't decided whether I want to use my Raspberry Pi, which has been sitting around doing nothing for a while, or set up one of my x86 boxes to run around the clock. Either way, there will be a box set up for