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.
Bolaga++
Bolaga++ is an extension of Bolaga that introduces labels. It was created by User:Fly, the same creator of Bolaga, in year 2026.
Instructions
It keeps the same instruction set as Bolaga with the addition of these new instructions:
| Instruction | Description |
|---|---|
| )<label name> | Push a copy of the top of the specified label's stack onto the currect label's stack |
| (<label name> | Pop from the specified label's stack |
| ]<label name> | Push a copy of the current label's stack onto the specified label's stack |
| [<label name> | Pop from both the specified label's stack and the current label's stack |
| (there's supposed to be a pipe character here)<label name> | Copy the current state of the specified stack in the current label's stack |
| ,<label name> | Return to the last call made from the specified label to the current label, then continue code execution from there |
| \ | Compares top two values: if not equal, continue normally; if equal, skips next instruction (or skips whole next loop block if next token is `:`). |
| Pipe character<label name> | Copies the entirety of the stack specified stack (if no stack is specified it's assumed that it's the main stack). |
For the instructions that operate on labels, if no label is specified, it is automatically assumed to be the main label. For the return instruction, if no label is specified, it will return to the last caller.
Labels
Each Bolaga++ program requires a 'main' label as an entry point for the program.
A label is defined with a '.' followed by a name for the label (a label name can contain '_' and numbers).
You can call a label by prefixing the name of the label you want to call with a '*'.
Each label has it's own stack, the stack of the main label is referred as the "main stack".
Examples
Factorial program
.main
>5
>1]result<
*factorial
$<$%>10@!
.result
.factorial
):
=>1?*end
<)result
$>0$:
>1>0-+$>1+$;<>1>0-+>0$
:>1>0-+$>1+$;<$=$>0$:>
1>0-+$>1+$;<$>0$:>1>0-
+$>1+$;<:>1>0-+>0$:>1>
0-+$>1+$;<$>0$:>1>0-+$
>1+$;<$=$>0$:>1>0-+$>1
+$;<+$>0$:>1>0-+$>1+$;
<;<>0$:>1>0-+$>1+$
;<<$
]result<>1>0-+
;
r
.end
)result]
r
Recursive count program with pointer to data (using the label 'n' as a variable)
.n
.main
>5]n<
)n]count_recursive
*count_recursive
(n]n<&!
.count_recursive
>0\*perform_count
],main
.perform_count
(count_recursive)count_recursive
=%>10@>1>0-+
=[count_recursive]count_recursive
*count_recursive
Computational class
Bolaga++ is turing complete because it doesn't change the main core of Bolaga, but only enriching it with more functionality.
Therefore each proof of turing completeness that apply to Bolaga, also apply to Bolaga++