Programs written in Arrows consist of two-dimensional grids of Unicode characters. Any characters that are not recognized are ignored.
An arrows program consists of multiple "threads" of binary data that follow the course of arrows throughout the grid. Each thread can hold a different amount of bits, usually corresponding to the number of arrows in a single character (i.e.
← holds one bit and
⇐ holds two).
Unless a thread is depending on another one, threads move one arrow at a time simultaneously. In the splitting example above, whichever thread that attempts to merge first must wait for the other one to catch up before merging into two bits.
Threads may also point towards themselves, allowing for infinite loops.
↙transfer a one bit thread of data from the base of the arrow to the tip.
↛invert the value of the bit(s) they transfer (these arrows transfer any-sized threads).
↻create new one bit threads (0 and 1 respectively), which transfer to any thread-continuing arrows (arrows that use one or more threads as inputs) next to the
⇙transfer two bits threads from the base of the arrow to the tip.
⤚split bigger threads into smaller ones and may duplicate threads into same sized parts (they work in the opposite direction they are named).
⟳outputs a thread and destroys it.
⟲gets a bit from input and creates a thread with it it (similar to
Splitting and merging
This example outputs the binary string "01". It is definitely not the most efficient way to do so.
Output infinite 1s
This program works by duplicating a one bit stream, outputting it, and repeating (the next duplication gets done after the output since threads don't move instantly).
Thread creation failure
This program outputs the first four bits from the input stream (in any order).
- List of arrows - https://www.toptal.com/designers/htmlarrows/arrows/