We are currently working on new rules for what content should and shouldn't be allowed on this website, and are looking for feedback! See Esolang:2026 topicality proposal to view and give feedback on the current draft.
Pull
- This is still a work in progress. It may be changed in the future.
Pull is a timeline/stack-based imperative golf language based on Git and the 5D time-travel languages. It uses the idea of branching out to create several states in one program. For example, one could move timelines upwards where x becomes 4 when it was 3 in your prior timeline. It was created by ASCIIguy in 2026 out of fascination for the concept of timelines in programming. Each timeline has its own stack.
------ a
ba / mc
----------- b
bc \ /
---- c
Etymology
Pull originates from the git command, git pull.
Introduction
Basic Logic
In Pull, there is the basic logic you'd expect from a normal language: stuff like a + b, a & b, and a > b. It's important to remember that Pull uses prefix syntax, so a + b is expressed as +ab and a + b * c is expressed as +a*bc.
Conditionals and Loops
To make Pull Turing-complete, it is necessary that it uses conditionals and loops. Conditionals are defined as ?[cond][block], so if (x == 3) { printf("Green!"); } would become ?=x3{,"Green!"} in Pull. Loops follow a similar format, though ? becomes @.
I/O
I/O is also supported in Pull, as it would be necessary to use the user input and output for the language to be properly functional. For example, to print would be ,"Hello world!" and to put user input in x is =xI.
Timelines
Timelines are the core of the Pull language, acting as a way to have several different states in a program. However, branches and timelines alone do not alter the contents of the screen.
Initialisation
At the start of a Pull program, the beginning timeline is initialised with ix. This creates the current timeline, x. This is a fully blank timeline and has no variables or stack yet.
Branching
In Pull, one branches from the current timeline by doing b_. This copies the state of the current timeline into _, which allows you to perform actions. You can, however, create a clean branch with B_, which creates a fully blank timeline.
Merging
In Pull, you can merge timelines by using m_. This will merge the variables and stack together. For example, ixby=x2Mxmyr would initialise the x timeline, branch off to y, set x to 2, move to x, merge with y, and return.
Movement
You can move between timelines in a Pull program by using M_ to shift to the given timeline.
Functions
In Pull, there are functions that work by defining parameters, name, and instructions. /Xxy{} defines a function X with parameters x and y. Then, one can call X later using \X1y.
Return
One can return from a function or halt a program using r. This sends out the instruction to stop executing the program or to move back into the main space.
Examples
Fizzbuzz
Fizzbuzz is a program designed to play the game Fizzbuzz, traditionally up to 100.
ix=x0@<x100{?=0%x3{,"Fizz."}?=0%x5{,"Buzz."}+x1}r
A+B
A+B adds two user inputs together and prints the result.
ix=aI=bI=x+ab,xr
Deadfish Interpreter
A Deadfish interpreter interprets the Deadfish language.
ix@!=I0{?=x'i'{+y1}?=x'd'{-y1}?=x's'{*yy}?=x'o'{,y}}r