Aeolbonn

The purpose of computing is insight, not numbers.
-- R. W. Hamming

Overview

Aeolbonn (An esoteric output language based on natural numbers) is a Turing-complete esoteric programming language. It's an output-only language where memory handling and control flow is based on values of odd and even natural numbers. (In this context natural number is a non-negative integer.)

Every line in a program will be interpreted as an instruction, if encountered by the instruction pointer. There may be only one instruction per line. Trying to execute undefined data -- data that isn't presenting a valid instruction, causes undefined behaviour (which is of course fatal). However, an Aeolbonn program may feature such data in case it's never encountered by the program pointer.

A program may be of any size, and the memory, a boolean-valued tape, goes on from zero to infinity. There's also a value called asterisk, which can be any value from zero, and grow upwards without a limit. Asterisk can be used to execute either memory operations or conditional jumps, depending on its value. It allows interesting features (and basically makes this language able to be Turing-complete). There is also flip, which is a boolean flag set every time the memory is modified. Jump instruction depends on the value of flip.

The execution begins on the first line, line 0, and terminates once the instruction pointer is on a line with no instructions defined, in other words, when the instruction point is outside the program space. One may jump straight out of program space, and the program will terminate successfully. Initially every memory cell is 'false', asterisk zero, and flip 'false'.

Instructions

There are six instructions. One is for modifying the memory, one is for conditional jumps, one is for incrementing and one is for decrementing asterisk, one is for outputting strings of ASCII characters, and one is used for randomity. The memory and jumps can be performed by using numbers or asterisk.

Memory operation
A line with an odd number flips the bit located at the memory cell defined by this odd number. Performing the operation sets flip's value to the new value of the modified memory cell.

Conditional jump
If flip is false a jump won't happen, and the execution continues right to the next line. However, if flip is true, a jump is performed to the line defined by this even number. If no memory operation has ever been performed before executing a jump, the flip uses value 'false'.

Incrementing and decrementing asterisk
Using the characters '>' and '<' one can increment and decrement the value of asterisk. Decrementing zero results in undefined behaviour.

Output
A line that begins with the character ':' will be output, excluding the very first character of the line (':') and the new-line at the end of it (in case it isn't the very last line of the program and end up in EOF instead (EOF will be excluded as well)). If the line has nothing but a single ':' (and a new-line or EOF), a new-line will be printed out.

Random
By using character '?' flip is set to either true or false, randomly. This makes the programming language more fun, and not completely deterministic as it would be without it (as there is no user input).

Asterisk

Using asterisk, which is a value that can be used to launch memory operations or conditional jumps, can be done by using character '*'. Whether asterisk is a seventh instruction or only a variable, nobody knows. Its value works just as any hard-coded number in an Aeolbonn program.

Programs

Here's a few programs I've written.

hello.aeo - A hello world program.
99.aeo - Sings "99 bottles of beer" song.
random.aeo - This program outputs a random string of '0' and '1', along with a new-line. There will at least one digit.
kquine.aeo - Quine in Aeolbonn! :)

Interpreter

You can use this interpreter written in Python to run Aeolbonn programs. Have fun.

-- Keymaker, 26.7.2006