User:Language

From Esolang
Jump to navigation Jump to search

User:Language is an esoteric programming language by User:SoundOfScripting (and, technically, User:Language) that is soley dependent on this wiki.
Readers are allowed to make changes to this article and language, but if they break anything (e.g. programs), it is their job to fix it.

Programs

Programs in User:Language are a series of lines, each containing any number of integers separated by whitespace.
Programs should be distributed with a creation date (so one would know if a program is now outdated).
Each line in a program is executed one after another. Once the last line is reached, control is passed back to the first line.

Whitespace and comments

Tabs may be replaced with space, but newlines may not. Any number of repeated spaces may be replaced with one space.
Whenever // is reached, the rest of the line is ignored.

File extension

The standard file extension for User:Language is .usrl.

Instruction pointer

The instruction pointer is a link to any page on the esolangs wiki. It is initialized to be User:Language.

Data types

User:Language contains a variety of data types, such as string, integers, stacks, and registers. Attempting to perform an numeric operation on a string or a string operation on a number will do nothing.

Commands and instructions

Commands in programs

The following is the only command that may be present in a User:Language program's source code:

X    

This command sets the IP to the Xth link in the article's body (starting at 1).

This does not count any links on the right, top, or left of the page, links marked as external (User:Language counts as external), links in the Table of Contents or links to sections, Category links that are at the bottom of an article (but ones in the middle are counted), etc. Template: and Special: links are allowed, not that they'd be of much use.

If X is 0, the IP is set to the current article's talk/discussion page, or the current talk/discusion page's article page.

If X goes to a non-existing link, nothing happens.

Note: Each occurrence of User:Language on this wiki is actually a link to this page, but it is not clickable. Occurrences of a link to the current page will still count as the Xth link. However, not all occurences of a page's title are links. In order to correctly determine whether something on an article is a link, make sure to view the source code of the article.

IP commands and instructions

Only being able to click on links doesn't do much. So, when the IP is set to certain links, certain effects happen.

Link Command
Stack Initializes the stack (and other stack) to an empty stack. This must be done before using any stack commands.
Any page with just a number in its name (decimal, reals allowed) Pushes that number to the stack. Such as, 0 bytes XD will push 0.
Stack Up Moves the bottom element of the stack to the top of the stack. Pushes a zero first if the stack is empty.
Call stack/Manipulation Pops X, jumps to line X (starting from 1). Pushes a zero first if the stack is empty.
Brainfuck Sets the top of the stack to a random integer from 0 to 255. Pushes a zero first if the stack is empty.
Text Pushes an empty string to the stack.
Amnesia Pops and discards.
Minsky machine Initializes the A, B, C, and D Registers to 0. This must be done before any operations on registers.
HQ9+ Prints "Hello, World!", the program's source code, the lyrics to 99 Bottles of Beer, and increments the A Register.
Compute/IO Toggles "output silent mode" (starts as false). When true, outputting things is a NOP.
Deadfish Squares the A Register.
Deadfish~ Increments the B Register by 10.
Language list or Joke language list Exits with the error message "ANTI-CHEAT ERROR: Cheating detected!"
A blank page (i.e. EMPTYPAGE) Halts the program.
Nop No operation.
Meander After the current line is done executing, the next line is skipped. Execution continues at the line after that line.
Addleq Pops X, pops Y, then pushes X+Y. Pushes two zeroes first if the stack is empty.
Subleq Pops X, pops Y, then pushes X-Y. Pushes two zeroes first if the stack is empty.
RSSB Pops X, pops Y, then pushes X/Y. Pushes two ones first if the stack is empty.
Swap Swaps the top two values of the stack. Pushes two zeroes first if the stack is empty.
ABCD Shifts the A-D Registers (TEMP=D, D=C, C=B, B=A, A=TEMP).
Grocery List Swaps the top of the stack and the A Register. Pushes a zero first if the stack is empty.
Pig Pops X and prints it.
Linear bounded automaton Gets an number from input and pushes it.
TrivialBrainfuckSubstitution Duplicates the top value of the stack.
String Pops X, then Y.
If Y is a string, X is converted to a string (UTF-8) and appended to Y. Pushes the result.
If Y is not a string, pushes Y, then X.
StackStacks Swaps the stack with the other stack.
Malbolge If stack isn't empty, encrypt stack top by x => CRAZY(x,A). Else, push 94 onto the stack.
bitch AND A by B, and OR C by D.

If a reader has commands they would like to add, they may do so. However, the commands may or may not be removed.

Example programs

Readers may add programs, as long as they sign them with a working time-stamp.

Popular problems

//SoundOfScripting (talk) 04:07, 11 July 2018 (UTC)
17    //Minsky machine
5     //Esoteric programming language
12    //OISC
24    //Hexagon says
2     //Truth-machine
54    //GetWhen
2     //User:SoundOfScripting
9     //User:Language
18    //HQ9+
19    //User:GrandKeyboard (halts)

Uncommented:

17 5 12 24 2 54 2 9 18 19

Pushes four to the stack

The following program uses its own appearance on this article to shorten its length.

//SoundOfScripting (talk) 04:07, 11 July 2018 (UTC)
11    //Stack
1     //Esoteric programming language
12    //OISC
24    //Hexagon says
11    //Truth-machine
54    //GetWhen
2     //User:SoundOfScripting
9     //User:Language
48    //4 <---- This link is the 48th link on this page
0     //Talk:4
3     //User_talk:Stkptr (halts)

Uncommented:

11 1 12 24 11 54 2 9 48 0 3

Pushes 72 (ASCII value of H)

//Quadril-Is (talk) 05:25, 23 January 2021 (UTC)
11    //Stack
1     //Esoteric programming language
7     //brainfuck
41    //brainfuck extensions
9     //Ragaraja
0     //Talk:Ragaraja
3     //User:PythonshellDebugWindow
51    //Interprogck8 <---- Pushes 8
1     //User:PythonshellDebugWindow
51    //Interprogck8 <---- Pushes 8 a 2nd time
1     //You get the idea
51    //Pushes 8 a 3rd time
1 51  //4th time
1 51  //5th time
1 51  //6th time
1 51  //7th time
1 51  //8th time
1 51  //9th time
4     //Truth-machine
54    //GetWhen
2     //User:SoundOfScripting
9     //User:Language
27    //Addleq <---- Top of stack is now 16
8     //DJN OISC
3     //Addleq <---- Now 24
8 3   //Now 32
8 3   //Now 40
8 3   //Now 48
8 3   //Now 56
8 3   //Now 64
8 3   //Now 72
0     //Talk:Addleq (halts)

Uncommented:

11 1 7 41 9 0 3 51 1 51 1 51 1 51 1 51 1 51 1 51 1 51 1 51 4 54 2 9 27 8 3 8 3 8 3 8 3 8 3 8 3 8 3 0

Programming strategies

  • To write programs more easily (but to make them longer), it is a good idea to return to User:Language after every command, since this page contains links to most of the commands.
  • It is a good idea to create a commented (what pages are being visited written in the comments, so the program can be repaired once changes to the wiki are made) version of a program (if possible) with a time-stamp and an uncommented version whenever one makes a program.
  • If you are distributing a program on this wiki, and the page you are distributing it to is visited in the program (or could be visited in the program), you can use its own presence on the page to connect it to any other page (using comments). See the "Pushes four to the stack" example above.

Computational class

Since User:Language's computational power (which appears to be greater than any other user's computational power) is dependent on this wiki, and it can be Turing-complete or Turing-incomplete when changes are made, we believe that makes it Turing-incomplete.