BiTrax
BiTrax (standing for bit-tracks) is a two-dimensional esoteric programming language invented by User:$M@ in 2011.
Language overview
Programs work on a linear memory tape, infinite to both directions. Each memory cell contains any of two values. The initial value is usually considered 'zero', and the changed value 'one'.
A source code is a bitmap, where each pixel defines a statement:
- White (FFFFFF): does nothing
- Yellow (FFFF00): input bit is stored in current cell
- Black (000000): current cell is written to output
- Gray (808080): flips current cell
- Green (00FF00): advances memory pointer to one direction by one cell
- Red (FF0000): advances memory pointer to the other direction by one cell
- Blue (0000FF): changes direction of execution, depending on the value of the current cell (see below)
- Colors other than these should generate a runtime error if reached.
Execution starts at the top left corner going to the right. If a blue pixel is reached, the instrucion pointer turns either left or right by 90 degrees. If the current cell contains its initial value, the instrucion pointer turns right, otherwise it turns left. Note that before turning it goes back by one pixel, like if the blue pixel wasn't reached (this is to ensure Turing-completeness, see image below). If execution reaches any side of the bitmap, the program halts.
IO functions
Although the exact operation of the black and yellow statements is not strictly defined, it is strongly recommended that any of the following characters is considered as
- initial cell value: 0 n N f F
- changed cell value: 1 y Y t T
Examples
Truth-machine
This is an implementation of the Truth-machine algorithm: it will take one bit of input, and output that bit either once (if it is zero), or in an infinite loop (if it is one). The image with the arrows is not executable, it is here simply to demonstrate execution direction.
Enlarged view
Actual size
Addition
The following example inputs a four-digit number (in base two), adds one to it, and then outputs the result as a five-digit number (to handle possible overflow). To make it work with larger numbers, just extend the input and output parts.
Enlarged view
Actual size
Hello World!
The following example outputs the bits of 'Hello World!':
Enlarged view
Actual size
Square root
The following code calculates sqrt(2) to infinite precision:
Enlarged view
Actual size
Primes
The following code prints all the prime numbers:
Enlarged view
Actual size
Computational class
BiTrax is Turing-complete.
BiTrax Editor
BiTrax Editor is an integrated development environment (IDE) for BiTrax with the following features:
- Source code (image) editor with an infinite grid, hotkeys and a convenient UI.
- Visual debugger with breakpoints and assertations.
- Batch execution by brute forcing all possible inputs.
- Heatmap showing you hotspots and unused branches.
- Modularity through subroutines called insets.
- Obfuscation.
You can download the beta version of BiTrax Editor here (SHA-1: 014C439396A9DF7A25BCF1DEEB441B6BFB25412D)
See also
Other languages operating on bits (implemented only):