Man
Professional
- Messages
- 3,088
- Reaction score
- 631
- Points
- 113
Despite the fact that programming has become an integral part of our lives, many people still find it to be some kind of completely incomprehensible magic. What can we say about the old days, when even the simple process of hacking in movies was depicted with various psychedelic special effects to achieve the “wow effect”.
But in IT there have always been people who are not satisfied with the "usual" hardcore code, and they began to invent their own, sometimes completely crazy and original esoteric programming languages . We will talk about them today.
The creators of this strange brainchild, Don Woods and James M. Lyon, later stated that they simply wanted to develop a language that would not resemble any of those that existed at that time (and in fact there were not many of them). Some elements from Fortran, COBOL and assembler were openly parodied. The farce began with the name:
INTERCAL was the first of its kind, but it remained only on paper as a manual, which many took as a joke. Nothing was actually programmed in it until the early 1990s, when Eric S. Raymond (the author of the term open source), riding the wave of interest in esoteric languages, implemented INTERCAL in C and showed that it actually worked.
Example of basic "Hello, World!" code in INTERCAL
There are obfuscating languages that disguise their code as Shakespeare plays (Shakespeare) or as recipes (Chef). It's incredibly fascinating to read (especially when Ophelia starts arguing with Juliet and you forget that all names are variables).
"Hello, World!" on Shakespeare
"Hello, World!" on Chef
There are some very strange languages based on the principle of self-copying, such as the SMETANA (Self-Modifying Extremely Tiny AutomatoN Application) language invented in 1994 by Chris Pressey, which works on a series of steps with two instructions. In 2016, Tanner Swett created a modification of it, SMETANA To Infinity!
Example of Smetana syntax
Example of the syntax of "infinite Smetana"
In the case of esoteric programming languages, the programmer studies the following topics anew, as if for the first time:
— How the command language works.
— How to work not according to the principle of maximum convenience, but with other goals (for example, to make it beautiful or as encrypted as possible).
— How teams interact with each other.
— How does the random factor influence all this?
— How to achieve a simple result with the most complex goals.
Creating such languages requires insight and creativity, which allows developers to better understand their own cognitive limitations and habitual patterns of thinking that often limit their ability to innovate. Immersion in the world of exotic languages helps to discover new ways of solving problems and going beyond the usual methods, realizing that programming can be not only a functional but also an artistic process.
It must be like learning a second language (a hardcore one like Chinese or German), where the main pillars and supporting beams of logical structures are lifted off the ground and mixed up to form a very strange but working framework in which everything is different.
Here's a cool definition from TechInsider:
In fact, there are so many esoteric programming languages now that your eyes run wild, and it is quite difficult to classify this wealth. You can start by dividing them into two large groups: Turing-complete languages (that is, “real” programming languages, in which you can theoretically write anything, although sometimes it will be VERY difficult) and specially limited languages, which are more like parodies or jokes with the purpose of demonstrating something.
The first category includes the above-mentioned INTERCAL, the most famous of the esoteric languages Brainfuck (more about it below) and a number of others, structurally similar to them.
The second one is, for example, HQ9+, which consists of only four basic commands (each of them is called by a symbol included in the name of the language): 1) displaying the message “Hello, world!”; 2) demonstrating the source code of the program; 3) displaying the text of the American drinking song “99 Bottles of Beer on the Wall” on the screen; and 4) increasing the counter by one (which does nothing else and is not used in any way).
By the way, HQ9+ also has modifications: in HQ9++, after the ++ command, a certain object is created (to which the user does not have access), and in HQ9±, when using the “-” operator, depending on its location, one of the obviously “catastrophic” operations is launched (for example, division by zero or infinite recursion until the stack overflows).
In general, the main motivation of developers of esoteric languages: to have as much absurdity, fun and complexity as possible, and preferably for everything to actually work. Let's applaud these heroes.
If "normal languages" of programming are focused on clarity and convenience, then brave experimenters reject such plebeian values and, on the contrary, create languages in which it is maximally inconvenient, illogical and sometimes practically impossible to program.
In a word, complete…
There are only eight commands in the language, each written as a single character. There is no additional syntax. There is no value copying, intermediate memory, operators, arithmetic, nothing at all - although all these limitations can be circumvented in a very clever way from within the language itself.
This is what "Hello, world!" looks like in BrainFak:
Brainfuck is a classic example of a "Turing quagmire" - despite the horror you feel when looking at this code, the language is quite functional, and you can program in it. It's just very long and complicated and generally somehow unnatural.
Although, of course, not as long, complex and unnatural as in some other esoteric languages inspired by the crazy Brainfuck experiment.
"Hello, world!" on Ook!
Or do you prefer to say "hello to the world" in cow language (COW)?
You can try to get to the roots and return to binary output with the Spoon language
Or, let's say, leave only dots and dashes as in reMorse
But these are all attempts to simplify the output code itself as much as possible (while complicating its programming).
Who said that code should be easy? Maybe we should make it as complex as possible?!
Here's Hello, World on Malbolge:
And here's another one:
Or this:
If you say that these three lines look like completely different, random and meaningless sets of characters, no one will judge you.
But it works. A working Quine (self-inferring code) was written on December 3, 2012, 14 years after the language itself was created. Which, in itself, says a lot.
Here is an excerpt from an old article about the principles of Malbolge:
Very complex and unreadable code is a victory! Great, we have achieved this.
Or maybe... visible code is not needed for programming at all???
Example of "Hello, World!" in Whitespace (to make it at least somewhat clear, S denotes the space, T denotes Tab, and L denotes line feed).
Where to go further? What could be more empty than a file that the user opens and sees nothing?
For example, the absence of files as such.
Daniel Temkin, the owner of the wonderful blog https://esoteric.codes/ created an esoteric programming language called Folders, inspired by Whitespace. According to his idea, programming in this language does not require files at all, only a tree of file system folders, the structure of which determines the code.
Let that sink in, and in the meantime, check out what "Hello, World!" looks like on Folders.
By the way, it also tells about the Groot language, which, as everyone who has watched Marvel films has already guessed, consists only of variations of the phrase I am Groot.
"Hello, World!" in Groot
There is a whole huge category of graphical esoteric languages (aka two-dimensional languages, be careful, the link leads to a practically endless abyss of hell).
The most famous of them is Piet, which turns its programmer into almost a modernist artist of the early 20th century.
The language model contains three elements: the program is a two-dimensional image made up of pixels. The latter can be of any color. Only 20 participate in the program.
Piet has blocks. These are connected sets of pixels of the same color. A block is the minimum part in constructing the text of programs. Groups of pixels that correspond to one block when zoomed in are a codel. Zooming in is necessary for detailed examination and accuracy.
Pete's memory is organized as a stack. The language data type is integers. This is the only type. Characters are processed as their ASCII codes.
Here's what Hello, World! looks like on Piet:
(more detailed analysis of the code here).
Here is a language called Velato, where programs are encoded as a MIDI file that can be read by a compiler.
Hellooooo woooooorld!
Here are the hexagonal honeycombs of the Hexagony language. The name comes from the words "hexagon" and "agony", because ha-ha-ha, you probably already guessed it, God Almighty, help us:
Someone has finally broken away from the mortal earth and is moving code in four-dimensional space (in the 4DL language, a four-dimensional grid with 8 execution directions is used to represent a program):
There is a very strange language called Bit that "handles all data the same way C handles strings."
A small fragment (!) of "Hello, World!" on Bit
Some of the Habrites come up with their own strange languages, for example, inspired by the knotted writing of the Quipu Indians (I wonder how its author is doing now?):
Quipu example
Yes, for down-to-earth practical tasks, esoteric languages are usually obviously useless - why do something long and complicated if you can do it quickly and easily, right? But many of the ELPs were created as a protest against such business logic - so that you could look around and remember that efficiency and speed, despite the fact that they make a good KPI, are not the only and not the most interesting things in life.
What's interesting? Well, for example, to learn and create something new, to think outside the box. Again, the training factor: working with such strange languages pumps up the brain quite well. And everything that pumps up our brains is, as we know, good.
Finally, I would like to thank the authors of all the previously published excellent articles on Habr, dedicated to the topic of ELP, which we read for inspiration and information before writing our own!
Source
But in IT there have always been people who are not satisfied with the "usual" hardcore code, and they began to invent their own, sometimes completely crazy and original esoteric programming languages . We will talk about them today.
Who even came up with this idea?
Surprisingly, the first esoteric programming language, INTERCAL, appeared back in 1972, almost simultaneously with the first mainstream one (the C language was developed by Dennis Ritchie in 1969-1973).The creators of this strange brainchild, Don Woods and James M. Lyon, later stated that they simply wanted to develop a language that would not resemble any of those that existed at that time (and in fact there were not many of them). Some elements from Fortran, COBOL and assembler were openly parodied. The farce began with the name:
The full name of our compiler [sic] is "Compiler Language With No Pronounceable Acronym" or, for convenience, abbreviated as INTERCAL.
Don Woods and James M. Lyon
INTERCAL was the first of its kind, but it remained only on paper as a manual, which many took as a joke. Nothing was actually programmed in it until the early 1990s, when Eric S. Raymond (the author of the term open source), riding the wave of interest in esoteric languages, implemented INTERCAL in C and showed that it actually worked.
Example of basic "Hello, World!" code in INTERCAL
Code:
DO ,1 <- #13
PLEASE DO ,1 SUB #1 <- #238
DO ,1 SUB #2 <- #108
DO ,1 SUB #3 <- #112
DO ,1 SUB #4 <- #0
DO ,1 SUB #5 <- #64
DO ,1 SUB #6 <- #194
DO ,1 SUB #7 <- #48
PLEASE DO ,1 SUB #8 <- #22
DO ,1 SUB #9 <- #248
DO ,1 SUB #10 <- #168
DO ,1 SUB #11 <- #24
DO ,1 SUB #12 <- #16
DO ,1 SUB #13 <- #162
PLEASE READ OUT ,1
PLEASE GIVE UP
There are obfuscating languages that disguise their code as Shakespeare plays (Shakespeare) or as recipes (Chef). It's incredibly fascinating to read (especially when Ophelia starts arguing with Juliet and you forget that all names are variables).
"Hello, World!" on Shakespeare
Code:
Romeo, a young man with a remarkable patience.
Juliet, a likewise young woman of remarkable grace.
Ophelia, a remarkable woman much in dispute with Hamlet.
Prince Hamlet, the flatterer of Andersen Insulting A/S.
Act I: Hamlet's insults and flattery.
Scene I: The insulting of Romeo.
[Enter Hamlet and Romeo]
Hamlet:
You lying stupid fatherless big smelly half-witted coward! You are as stupid as the difference between a handsome rich brave hero and thyself!
Speak your mind!
You are as brave as the sum of your fat little stuffed misused dusty old rotten codpiece and a beautiful fair warm peaceful sunny summer's day. You are as healthy as the difference between the sum of the sweetest reddest rose and my father and yourself! Speak your mind!
You are as cowardly as the sum of yourself and the difference between a big mighty proud kingdom and a horse. Speak your mind.
Speak your mind!
[Exit Romeo]
Scene II: The praising of Juliet.
[Enter Juliet]
Hamlet:
Thou art as sweet as the sum of the sum of Romeo and his horse and his black cat! Speak your mind!
[Exit Juliet]
Scene III: The praising of Ophelia.
[Enter Ophelia]
Hamlet:
Thou art as lovely as the product of a large rural town and my amazing bottomless embroidered purse. Speak your mind!
Thou art as loving as the product of the bluest clearest sweetest sky and the sum of a squirrel and a white horse. Thou art as beautiful as the difference between Juliet and thyself. Speak your mind!
[Exeunt Ophelia and Hamlet]
Act II: Behind Hamlet's back.
Scene I: Romeo and Juliet's conversation.
[Enter Romeo and Juliet]
Romeo:
Speak your mind. You are as worried as the sum of yourself and the difference between my small smooth hamster and my nose. Speak your mind!
Juliet:
Speak YOUR mind! You are as bad as Hamlet! You are as small as the difference between the square of the difference between my little pony and your big hairy hound and the cube of your sorry little codpiece. Speak your mind!
[Exit Romeo]
Scene II: Juliet and Ophelia's conversation.
[Enter Ophelia]
Juliet:
Thou art as good as the quotient between Romeo and the sum of a small furry animal and a leech. Speak your mind!
Ophelia:
Thou art as disgusting as the quotient between Romeo and twice the difference between a mistletoe and an oozing infected blister! Speak your mind!
[Exeunt]
"Hello, World!" on Chef
Code:
Hello World Cake with Chocolate sauce.
This prints hello world, while being tastier than Hello World Souffle. The main chef makes a "world!" cake, which he puts in the baking dish. When he gets the sous chef to make the "Hello" chocolate sauce, it gets put into the baking dish and then the whole thing is printed when he refrigerates the sauce. When actually cooking, I'm interpreting the chocolate sauce baking dish to be separate from the cake one and Liquify to mean either melt or blend depending on context.
Ingredients.
33 g chocolate chips
100 g butter
54 ml double cream
2 pinches baking powder
114 g sugar
111 ml beaten eggs
119 g flour
32 g cocoa powder
0 g cake mixture
Cooking time: 25 minutes.
Pre-heat oven to 180 degrees Celsius.
Method.
Put chocolate chips into the mixing bowl.
Put butter into the mixing bowl.
Put sugar into the mixing bowl.
Put beaten eggs into the mixing bowl.
Put flour into the mixing bowl.
Put baking powder into the mixing bowl.
Put cocoa powder into the mixing bowl.
Stir the mixing bowl for 1 minute.
Combine double cream into the mixing bowl.
Stir the mixing bowl for 4 minutes.
Liquefy the contents of the mixing bowl.
Pour contents of the mixing bowl into the baking dish.
bake the cake mixture.
Wait until baked.
Serve with chocolate sauce.
chocolate sauce.
Ingredients.
111 g sugar
108 ml hot water
108 ml heated double cream
101 g dark chocolate
72 g milk chocolate
Method.
Clean the mixing bowl.
Put sugar into the mixing bowl.
Put hot water into the mixing bowl.
Put heated double cream into the mixing bowl.
dissolve the sugar.
agitate the sugar until dissolved.
Liquefy the dark chocolate.
Put dark chocolate into the mixing bowl.
Liquefy the milk chocolate.
Put milk chocolate into the mixing bowl.
Liquefy contents of the mixing bowl.
Pour contents of the mixing bowl into the baking dish.
Refrigerate for 1 hour.
There are some very strange languages based on the principle of self-copying, such as the SMETANA (Self-Modifying Extremely Tiny AutomatoN Application) language invented in 1994 by Chris Pressey, which works on a series of steps with two instructions. In 2016, Tanner Swett created a modification of it, SMETANA To Infinity!
Example of Smetana syntax
Code:
Smetana ::= Step {".\n" Step} ".".
Step ::= "Step" Integer "." (GoTo | Swap).
GoTo ::= "Go" "to" "step" Integer.
Swap ::= "Swap" "step" Integer "with" "step" Integer.
Integer ::= "0".."9" {"0".."9"}.
Example of the syntax of "infinite Smetana"
Code:
Program ::= {Step "."}
Step ::= "Step" Expression "." (GoTo | Swap | Output | "Stop")
GoTo ::= "Go" "to" "step" Expression
Swap ::= "Swap" "step" Expression "with" "step" Expression
Output ::= "Output" "character" Expression
Expression ::= Number | [Number] "n" ["+" Number]
What exactly is happening?
An esoteric programming language is a programming language designed to explore the limits of what programming languages can do (thanks for the tautology, Wikipedia). It is, in a sense, a metalanguage that allows exploration of both itself and the possibilities of exploration.In the case of esoteric programming languages, the programmer studies the following topics anew, as if for the first time:
— How the command language works.
— How to work not according to the principle of maximum convenience, but with other goals (for example, to make it beautiful or as encrypted as possible).
— How teams interact with each other.
— How does the random factor influence all this?
— How to achieve a simple result with the most complex goals.
Creating such languages requires insight and creativity, which allows developers to better understand their own cognitive limitations and habitual patterns of thinking that often limit their ability to innovate. Immersion in the world of exotic languages helps to discover new ways of solving problems and going beyond the usual methods, realizing that programming can be not only a functional but also an artistic process.
It must be like learning a second language (a hardcore one like Chinese or German), where the main pillars and supporting beams of logical structures are lifted off the ground and mixed up to form a very strange but working framework in which everything is different.
Why is this necessary?
First, because it's fun. For many experimental programmers, fun is enough motivation to create something weird. Second, because it allows you to push the boundaries and show that the possibilities of human creative genius are much broader than you might imagine. Third, because it's a lot of fun (duh!).Here's a cool definition from TechInsider:
The main criterion that determines the esoteric nature of a programming language is quite subjective - it is the level of bringing individual ideas, properties or limitations to the point of absurdity, which makes such languages unsuitable for mass product development.
The purposes of creating ELPs follow directly from their definition. We know ELPs created to confirm or disprove concepts, and those created for the purposes of high programming art. In such cases, the PL acts as a means of artistic expression, an indicator of the skill level of an artist, programmer, or developer of formal languages.
In fact, there are so many esoteric programming languages now that your eyes run wild, and it is quite difficult to classify this wealth. You can start by dividing them into two large groups: Turing-complete languages (that is, “real” programming languages, in which you can theoretically write anything, although sometimes it will be VERY difficult) and specially limited languages, which are more like parodies or jokes with the purpose of demonstrating something.
The first category includes the above-mentioned INTERCAL, the most famous of the esoteric languages Brainfuck (more about it below) and a number of others, structurally similar to them.
The second one is, for example, HQ9+, which consists of only four basic commands (each of them is called by a symbol included in the name of the language): 1) displaying the message “Hello, world!”; 2) demonstrating the source code of the program; 3) displaying the text of the American drinking song “99 Bottles of Beer on the Wall” on the screen; and 4) increasing the counter by one (which does nothing else and is not used in any way).
By the way, HQ9+ also has modifications: in HQ9++, after the ++ command, a certain object is created (to which the user does not have access), and in HQ9±, when using the “-” operator, depending on its location, one of the obviously “catastrophic” operations is launched (for example, division by zero or infinite recursion until the stack overflows).
In general, the main motivation of developers of esoteric languages: to have as much absurdity, fun and complexity as possible, and preferably for everything to actually work. Let's applaud these heroes.
If "normal languages" of programming are focused on clarity and convenience, then brave experimenters reject such plebeian values and, on the contrary, create languages in which it is maximally inconvenient, illogical and sometimes practically impossible to program.
In a word, complete…
Brainfuck
Undoubtedly the most striking (due to its memetic nature) example of an esoteric language, one might even say the showcase of the entire movement, is the Brainfuck language developed in 1993 by Urban Müller (probably no translation required).There are only eight commands in the language, each written as a single character. There is no additional syntax. There is no value copying, intermediate memory, operators, arithmetic, nothing at all - although all these limitations can be circumvented in a very clever way from within the language itself.
This is what "Hello, world!" looks like in BrainFak:
>++++++++++ [ <++++++++>- ] < . >++++++++ [ <++++>- ] <+ . +++++++ .. +++ . >>>++++++++ [ <++++>- ]
< . >>>++++++++++ [ <++++++++++>- ] <--- . <<<< . +++ . ------ . -------- . >>+ . >++++++++++ .
Brainfuck is a classic example of a "Turing quagmire" - despite the horror you feel when looking at this code, the language is quite functional, and you can program in it. It's just very long and complicated and generally somehow unnatural.
Although, of course, not as long, complex and unnatural as in some other esoteric languages inspired by the crazy Brainfuck experiment.

The next levels of hell
What about the "orangutan" language Ook!, which at first glance consists of only this one word?"Hello, world!" on Ook!
Code:
Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ook! Ook? Ok. Ook? Ok. Ok. Ok. Ook? Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ook? Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ook? Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ook? Ok. Ook? Ok. Ook? Ok. Ook? Ok. Ook! Ook! Ook? Ook! Ok. Ook? Ok. Ook? Ok. Ook? Ok. Ok. Ok. Ok. Ook! Ok. Ok. Ook? Ok. Ok. Ook! Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ook! Ok. Ook! Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ook! Ok. Ook? Ok. Ook? Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ook! Ok. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ok. Ok. Ook? Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ook! Ok. Ok. Ook? Ook! Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ook! Ok. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ok. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ok. Ook? Ok. Ook? Ok. Ok. Ok. Ook! Ok.
Or do you prefer to say "hello to the world" in cow language (COW)?
Code:
MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO
MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO
MoO MoO Moo MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO Moo MoO MoO
MoO MoO MoO MoO MoO Moo Moo MoO MoO MoO Moo OOO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO
MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO Moo MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO
MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO
MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO
MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO Moo Moo
MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo
MOo MOo MOo MOo MOo Moo MOo MOo MOo MOo MOo MOo MOo MOo Moo MoO MoO MoO Moo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo Moo
OOO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO Moo
You can try to get to the roots and return to binary output with the Spoon language
Code:
1111110010001011111111111101100000110100010100101111111111001000101111111111011000001101
0100101011111110010100010101110010100101111001000101111111111101100000110100010100111110
0100010000000000000011000001101000101001101101101101111100100010111110110000011010001010
0100100010101110010100000000000000000000010100000000000000000000000000010100100101001010
Or, let's say, leave only dots and dashes as in reMorse
Code:
— — — ..- ...-.---.;newline
— — — .-. - ..-.- ...-. ---.;!
— — — ...-.. -.---.;d
----... -.---.;l
----.. -...---.;r
----. -...---.;o
----...-.- ..-. ---.;W
(omitted code for “Hello" is similar to the above for “World!”)
-............;output all characters
But these are all attempts to simplify the output code itself as much as possible (while complicating its programming).
Who said that code should be easy? Maybe we should make it as complex as possible?!
The Abyss
In 1998, Ben Olmstead came up with Malbolge, the world's most complex esoteric programming language. This monster got its name from "Malebolge," Dante's eighth circle of hell, and now it will become clear why.Here's Hello, World on Malbolge:
(=<`:9876Z4321UT.-Q+*)M'&%$H"!~}|Bzy?=|{z]KwZY44Eq0/{mlk**hKs_dG5[m_BA{?-Y;;Vb'rR5431M}/. zHGwEDCBA@98\6543W10/.R,+O<
And here's another one:
('&%:9]!~}|z2Vxwv-,POqponl$Hjig%eB@@>}=<M:9wv6WsU2T|nm-,jcL(I&%$# "`CB]V?Tx<uVtT`Rpo3NlF.Jh++FdbCBA@?]!~|4XzyTT43Qsqq(Lnmkj"Fhg${z@>
Or this:
(=<`#9]~6ZY32Vx/4Rs+0No-&Jk)"Fh}|Bcy?`=*z]Kw%oG4UUS0/@-ejc'8dc
If you say that these three lines look like completely different, random and meaningless sets of characters, no one will judge you.
But it works. A working Quine (self-inferring code) was written on December 3, 2012, 14 years after the language itself was created. Which, in itself, says a lot.
Here is an excerpt from an old article about the principles of Malbolge:
There are three registers in Malbolge: a, c, and d. Register c is the code register, used as a pointer to the current instruction. Register d is the data register, used to manipulate data. Register a is the accumulator, also used by some instructions to manipulate data.
There are 8 instructions in Malbolge. The machine determines which instruction to execute as follows: the value of c is added to the value of the cell with the address c ([c]), and the instruction is the remainder of dividing this number by 94, unless [C] is in the range from 33 to 126 inclusive.
And here is the actual list of commands:
After each instruction is executed, it is encrypted using the Crazy operation.
- j D = [D] Shifts the data pointer to the cell its previous value pointed to
- i C = [C] Shifts the instruction pointer to the location its previous value pointed to
- * A = [D] = ROTATE([D]) Rotates the value in the cell pointed to by D one third to the right. Along the way, this value is written to A.
- p A = [D] = CRAZY(A, [D]) Applies the crazy operation to the value of register A and the cell pointed to by D.
- /A = INPUT Reads one character from the input stream and stores it in A.
- < PRINT A Prints the character with ASCII code A mod 256.
- v STOP Terminate program execution.
- o NOP A command that does nothing (the only valid one).
Very complex and unreadable code is a victory! Great, we have achieved this.
Or maybe... visible code is not needed for programming at all???
Lords of the Void
Say hello to Whitespace, an esoteric programming language that has no characters at all except spaces (technically, there are three different characters: space, tab, and line feed).Example of "Hello, World!" in Whitespace (to make it at least somewhat clear, S denotes the space, T denotes Tab, and L denotes line feed).

Where to go further? What could be more empty than a file that the user opens and sees nothing?
For example, the absence of files as such.
Daniel Temkin, the owner of the wonderful blog https://esoteric.codes/ created an esoteric programming language called Folders, inspired by Whitespace. According to his idea, programming in this language does not require files at all, only a tree of file system folders, the structure of which determines the code.
Let that sink in, and in the meantime, check out what "Hello, World!" looks like on Folders.

By the way, it also tells about the Groot language, which, as everyone who has watched Marvel films has already guessed, consists only of variations of the phrase I am Groot.
"Hello, World!" in Groot
Code:
I AM GROOT
I am groot
I am groot
I am groot
I am groot
I am groot
I am groot
I am groot
I am groot
I am groot
I'm Groot
I am groot
I am groot
I am groot
I am groot
I am groot
I am groot
I am groot
I am groot
I am groot
I AM GROOT
I am Groot
We are Groot
I am groot
I AM GROOOT
I AM GROOT
I am groot
I am groot
I am groot
I am groot
I am groot
I am groot
I am groot
I'm Groot
I am groot
I am groot
I am groot
I am groot
I am groot
I AM GROOT
I am Groot
We are Groot
I am groot
I am groot
I AM GROOOT
I am groot
I am groot
I am groot
I am groot
I am groot
I am groot
I am groot
I AM GROOOT
I AM GROOOT
I am groot
I am groot
I am groot
I AM GROOOT
I AM GROOT
I AM GROOT
I AM GROOT
I am groot
I am groot
I am groot
I am groot
I am groot
I am groot
I am groot
I am groot
I'm Groot
I am groot
I am groot
I am groot
I am groot
I am groot
I AM GROOT
I am Groot
We are Groot
I am groot
I AM GROOOT
I AM GROOT
I AM GROOT
I AM GROOT
I am groot
I am groot
I am groot
I am groot
I am groot
I am groot
I am groot
I am groot
I am groot
I am groot
I'm Groot
I am groot
I am groot
I am groot
I am groot
I am groot
I am groot
I am groot
I am groot
I am groot
I am groot
I AM GROOT
I am Groot
We are Groot
I am groot
I am Groot
I am Groot
I am Groot
I AM GROOOT
I am groot
I am groot
I am groot
I am groot
I AM GROOOT
I am groot
I am groot
I am groot
I AM GROOOT
I am Groot
I am Groot
I am Groot
I am Groot
I am Groot
I am Groot
I AM GROOOT
I am Groot
I am Groot
I am Groot
I am Groot
I am Groot
I am Groot
I am Groot
I am Groot
I AM GROOOT
I AM GROOT
I AM GROOT
I am groot
I AM GROOOT
Is it possible to have a picture?
Can.There is a whole huge category of graphical esoteric languages (aka two-dimensional languages, be careful, the link leads to a practically endless abyss of hell).
The most famous of them is Piet, which turns its programmer into almost a modernist artist of the early 20th century.
The language model contains three elements: the program is a two-dimensional image made up of pixels. The latter can be of any color. Only 20 participate in the program.

Piet has blocks. These are connected sets of pixels of the same color. A block is the minimum part in constructing the text of programs. Groups of pixels that correspond to one block when zoomed in are a codel. Zooming in is necessary for detailed examination and accuracy.
Pete's memory is organized as a stack. The language data type is integers. This is the only type. Characters are processed as their ASCII codes.
Here's what Hello, World! looks like on Piet:

(more detailed analysis of the code here).
And just the sound?
It can be done with sound too.Here is a language called Velato, where programs are encoded as a MIDI file that can be read by a compiler.

Hellooooo woooooorld!
And much, much more
No article would be enough to list all the esoteric programming languages.Here are the hexagonal honeycombs of the Hexagony language. The name comes from the words "hexagon" and "agony", because ha-ha-ha, you probably already guessed it, God Almighty, help us:

Someone has finally broken away from the mortal earth and is moving code in four-dimensional space (in the 4DL language, a four-dimensional grid with 8 execution directions is used to represent a program):


There is a very strange language called Bit that "handles all data the same way C handles strings."
A small fragment (!) of "Hello, World!" on Bit
Code:
LINENUMBERZEROCODEPRINTZEROGOTONELINENUMBERONECODEPRINTONEGOTOONEZEROLINENUMBE
RONEZEROCODEPRINTZEROGOTOONEONELINENUMBERONEONECODEPRINTZEROGOTOONEZEROZEROLINE
NUMBERONEZEROZEROCODEPRINTONEGOTOONEZEROOONELINENUMBERONEZEROONECODEPRINTZEROGOT
OONEONEZEROLINENUMBERONEONEZEROCODEPRINTZEROGOTOONEONEONEONELINENUMBERONEONEONECOD
EPRINTZEROGOTOONEZEROZEROZEROLINENUMBERONEZEROZEROZEROCODEPRINTZEROGOTOONEZEROZ
EROONELINENUMBERONEZEROZEROONECODEPRINTONEGOTOONEZEROONEZEROLINENUMBERONEZEROON
EZEROCODEPRINTONEGOTOONEZEROONEONELINENUMBERONEZEROONEONECODEPRINTZEROGOTOONEON
EZEROZEROLINENUMBERONEONEZEROZEROCODEPRINTZEROGOTOONEONEZEROONELINENUMBERONEONE
ZEROONECODEPRINTONEGOTOONEONEONEZEROLINENUMBERONEONEONEZEROCODEPRINTZEROGOTOONE
ONEONEONELINENUMBERONEONEONEONECODEPRINTONEGOTOONEZEROZEROZEROZEROLINENUMBERONE
ZEROZEROZEROZEROCODEPRINTZEROGOTOONEZEROZEROZEROOONELINENUMBERONEZEROZEROZEROONE
CODEPRINTONEGOTOONEZEROZEROONEZEROLINENUMBERONEZEROZEROONEZEROCODEPRINTONEGOTOO
Some of the Habrites come up with their own strange languages, for example, inspired by the knotted writing of the Quipu Indians (I wonder how its author is doing now?):
Quipu example
Code:
a: a.
'H <<
'e
'l
'l
'o
'
'W
'o
'r
'l
'd
'!
\n
Why is all this necessary?
Good question. Well, first of all (as has been said many times), it's fun. Just trying to understand completely new software logic, let alone develop it, greatly expands cognitive skills.Yes, for down-to-earth practical tasks, esoteric languages are usually obviously useless - why do something long and complicated if you can do it quickly and easily, right? But many of the ELPs were created as a protest against such business logic - so that you could look around and remember that efficiency and speed, despite the fact that they make a good KPI, are not the only and not the most interesting things in life.
What's interesting? Well, for example, to learn and create something new, to think outside the box. Again, the training factor: working with such strange languages pumps up the brain quite well. And everything that pumps up our brains is, as we know, good.
Finally, I would like to thank the authors of all the previously published excellent articles on Habr, dedicated to the topic of ELP, which we read for inspiration and information before writing our own!
Source