Nybblang
Nybblang is an esolang created by User:PythonshellDebugwindow. Its name is a portmanteau of 'nybble' (4 bits) and 'esolang'.
Program structure
A Nybblang program is composed of four bits—a nybble. Each command is two bits long, therefore a program has two instructions.
Memory
Nybblang uses a stack of nybbles. When a digit is pushed to it, it first goes into a temporary variable, which will also hold the next two digits pushed. When it reaches four digits—a nybble—that nybble will be pushed to the stack and the temporary variable set to 0 (0000).
Program import
The interpreter should be given these command-line arguments: main *others
, where main
is the filename of the first program to be run and others
are the programs in the sequence. Alternatively, a directory may be supplied with the programs in it as these files, e.g. nybblang my/directory
Program import sequence
If the interpreter is run with nybblang main.nyb sub1.nyb sub2.nyb
, then main.nyb
is run first, and the running sequence (for the 11
command) is main.nyb, sub1.nyb, sub2.nyb, main.nyb, sub1.nyb, sub2.nyb, main.nyb, ...
, wrapping and repeating forever.
Commands
Command | Meaning |
---|---|
00 | Push 0 to the memory |
01 | Push 1 to the memory |
10 | Output the Nth character of the sequence ETAOINSRHDLspaceWU.newline , where N is (POP stack)
|
11 | Import the next program in the sequence (wrapping) |
Any non-0
-or-1
characters in the source code raise an error.
Examples
Each file in the sequence is on a different line; these files are arranged in sequential order.
"HELLO"
0111 0011 0011 0111 1011 0111 0011 0011 0011 1011 0111 0011 0111 0111 1011 0111 0011 0111 0111 1011 0011 0011 0111 0010
Turing-Complete Nybblang
If a Nybblang program could be of infinite length, then imports would be unnecessary, so the command 11
could be turned into a (1-index-based) conditional jump: IF stack.bottom > 0 THEN GOTO instruction n
where n is the item directly on top of the bottom of the stack (or the bottom of the stack if the stacks has only 1 item), and if n is 0 or greater than the program’s length then the program should exit. From what I understand, this would make Nybblang Turing-complete. Here's a truth-machine in this version of the language that outputs E or T instead of 0 or 1:
0000000x0000000x1011
Replace both of the x
s with 0
for input 0 or 1
for input 1. If you use 1
, the stack would infinitely grow larger as there are two PUSH operations but only one POP.