Esolangs

Simon’s new craze is esolangs (esoteric programming languages), programming languages designed to be “weird”.

For example, there are esolangs designed to be minimalistic (like brainf*** (yes, that is an actual programming language) or /// (yes, that’s also an actual programming language)). Some esolangs were designed to look like abstract art (Piet), music (Velato), cooking recipes (Chef), Shakespeare plays (SPL), ASCII art (ASCIIDots), or even nothing (Whitespace). Some esolangs, like Befunge or NDBall, just started with an idea and ran with it. There are also esolangs which are designed as a joke (for example HQ9+, which literally has four commands which each do one popular programming problem).

Someone named ais523 has made two very strange esolangs, Burn and Feather. They’re interesting because they don’t really exist. For Burn, all we know about it is one program, which has one comment, and what it does, and for the rest ais523 “forgot the details”. For Feather, he hasn’t even made it yet, and in some hypothetical futures he will make it, in others he will go insane before he has the chance to make it, and in others still he doesn’t go insane because he indefinitely postpones the making of it. And we think the third one is the universe we live in.

Simon’s favorite pastime at the moment is coming up with interpreters for existing esolangs. The only two interpreters he has finished are two minimalistic esolangs (brainf*** and ///, pronounced “slashes”).

Ironically, even though brainf*** is designed to have the shortest interpreter possible and /// is not, /// still has the shorter one!

Simon’s brainf*** interpreter. See the gist on GitHub: https://gist.github.com/simon-tiger/9479da4c116b85c7a5473a847b8b5ca7
Simon’s /// interpreter. See the gist at https://gist.github.com/simon-tiger/eb42ee462ca7241053f240964b0eb907

Simon has also nearly finished creating an interpreter for the esolang called Befunge:

Code: https://editor.p5js.org/simontiger/sketches/ucLmFBcRv
Simon’s instructions for Befunge, also as plain text below
0-9   pushes the given number
+     pops two numbers, adds them, and pushes the result
-     pops two numbers, subtracts them, and pushes the result
*     pops two numbers, multiplies them, and pushes the result
/     pops two numbers, divides them, and pushes the result
%     pops two numbers, divides them, and pushes the remainder
!     pops one number, pushes 0 if it isn't 0, pushes 1 if it is
`     pops two numbers, pushes 1 if the first is bigger than the 
      second, pushes 0 if not
>     changes the pointer to point right
<     changes the pointer to point left
^     changes the pointer to point up
v     changes the pointer to point down
?     changes the pointer to point in a random direction
_     pops one number, changes the pointer to point left if it isn't 
      0, changes it to point right if it is
|     pops one number, changes the pointer to point up if it isn't 0, 
      changes it to point down if it is
"     toggles stringmode
:     pops one number, pushes two copies of it
\     pops two number, pushes them so that they end up switched
$     pops one number
.     pops one number, outputs it
,     pops one number, outputs the character with the ASCII value 
      being the number
#     makes the pointer skip the next command
g     pops two numbers, pushes the ASCII value of the command at 
      their coordinate
p     pops three numbers, a value and coordinates, sets the ASCII 
      value of the command at the coordinates to the value
&     waits for the user to type in a number, and pushes it
~     waits for the user to type in a character, and pushes its 
      ASCII value
@     ends the program

Simon has been learning about esolangs from Truttle1.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s