A bizarre trip into the world of esoteric languages

Introduction

People often engage in unusual and strange experiments across various domains such as science, literature, music, art, and more. Software engineering is no exception, embracing experimentation and innovation. Imagine a programming language with syntax consisting only of the word 'chicken', along with spaces and newline characters. Or maybe coding with lines composed solely of 'whitespace' characters: space, newline, and tab. Does it sound like a joke or a bizarre fantasy? Surprisingly, such languages do exist! In this article, we will discover some of esoteric languages.

What languages are called esoteric?

An esoteric programming language, often abbreviated as esolang, is a programming language designed primarily for intellectual or artistic challenge rather than practical use.

These languages often feature unusual syntax, semantics, and design principles that distinguish them from conventional programming languages. Esoteric languages are typically created to explore unconventional programming concepts, push the boundaries of what is possible within programming, or simply for entertainment.

While rarely employed for real-world applications, they serve as a platform for experimentation, creativity, and sometimes humor within the programming community. In today's article we will include Malbolge, Whitespace, Brainfuck and Chicken.

INTERCAL

INTERCAL (full name - Compliler Language with no Pronounceable Acronym) is in fact, first esolang ever made.

It was developed in 1972 by Jim Lyon and Don Woods as an imitation of other languages ​​that existed at the time; modern esoteric languages ​​surpass it in strangeness, but in some aspects, such as character output, it is unmatched. Its reference manual is a work of art in itself (unlike modern languages, which focus on the meaning of commands rather than literal descriptions) and contains special names for almost all common things.

There are lots of things to discuss about its syntax. But the most extraordinary are:
  1. The user has to use words like "PLEASE", "DO", "PLEASE DO", "PLEASE GIVE UP" etc. in their code.
  2. The user should use some certain number of word "please". Otherwise, the compiler will give an error, saying "The programmer is too polite/The programmer isn't polite enough".
  3. INTERCAL is one-dimensional language, making itself quite limited in ways to use it.
  4. ASCII symbols, that are used in code have unusual names. The equal "=" symbol is called half mesh or "<" is called angle.
Don Woods and Jim Lyon
"Hello World" in C
#include <stdio.h>

int main(void) {
    printf("Hello, world!\n");

    return 0;
}
The same "Hello World" program, but in INTERCAL language
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

Malbolge

Malbolge is a programming language deliberately created to be exceptionally challenging for programmers. Invented by Ben Olmstead in 1998, its inspiration stems from Dante's "Inferno", where the ninth circle of Hell is named "Malbolge." Olmstead intentionally built Malbolge with a confusing syntax and a set of instructions that defy intuition, ensuring its reputation as one of the most cryptic and enigmatic languages in existence.
Ninth circle of Hell - Malbolge
"Hello World" in Malbolge language
(=<`#9]~6ZY32Vx/4Rs+0No-&Jk)"Fh}|Bcy?`=*z]Kw%oG4UUS0/@-ejc(:'8dc
This program outputs "Hello, World!" when executed in a Malbolge interpreter. It is worth noting that understanding how this code works is incredibly challenging due to Malbolge's intentionally convoluted nature.

The syntax of Malbolge is so complicated and obscure that the script (which can be different because of variety of ways to do it) of simple "Hello, world" printing program took two years to find out! And it was possible due to the code written on Lisp, which basically picked up the right combination of symbols. No wonder why Olmstead called his creation that way.

Whitespace

Edwin Brady and Chris Morris created Whitespace in 2002 at the University of Durham. Slashdot published a review on April Fool's Day 2003. The idea of using whitespace characters as operators for the C++ language had been facetiously suggested five years earlier by Bjarne Stroustrup.

Whitespace is an esoteric language with quite interesting syntax. The only characters allowed by its syntax are whitespace characters. There are three of them: "space" symbol, linefeed character (Enter key) and tab. That kind of syntax makes any line or piece of code written on this language unreadable as it is basically invisible.

An interesting consequence: the code of this language can be hidden inside of the code written on another language, so you can put lines of Whitespace code in the C++ code, for example, and it will be insanely difficult to find it.
"Hello World" in Whitespace
 
When Whitespace source code is displayed in some browsers, the horizontal spacing produced by a tab character is not fixed, but depends on its location in the text relative to the next horizontal tab stop. Depending on the software, tab characters may also get replaced by the corresponding variable number of space characters.

Brainfuck

Brainfuck is an esoteric programming language known for its minimalistic design and extreme simplicity. It was created in 1993 by Urban Müller. Brainfuck operates on an array of memory cells, initially all set to zero, and a pointer that indicates the current memory cell. The language consists of only eight commands, each represented by a single character:
  1. >: Increment the pointer (move to the next memory cell).
  2. <: Decrement the pointer (move to the previous memory cell).
  3. +: Increment the byte at the pointer.
  4. -: Decrement the byte at the pointer.
  5. .: Output the byte at the pointer as a character.
  6. ,: Accept one byte of input and store its value in the byte at the pointer.
  7. [: If the byte at the pointer is zero, jump forward to the command after the matching ].
  8. ]: If the byte at the pointer is nonzero, jump back to the command after the matching [.
Despite its simplicity, Brainfuck is Turing-complete, meaning it can theoretically compute any computable function. However, writing programs in Brainfuck can be challenging due to its lack of conventional control structures and limited set of commands. Brainfuck programs often appear as cryptic sequences of characters and are commonly used for educational purposes, code golf challenges, and as a demonstration of the principles of Turing completeness.

"Hello World" in Brainfuck language
++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.

The syntax of Malbolge is so complicated and obscure that the script (which can be different because of variety of ways to do it) of simple "Hello, world" printing program took two years to find out! And it was possible due to the code written on Lisp, which basically picked up the right combination of symbols. No wonder why Olmstead called his creation that way.

Befunge

Befunge is an esoteric language, but as all previous examples, it has specific list or rules that user has to obey when writing a code by Befunge.

  1. The program field is a two-dimensional torus, physically it is a rectangular matrix of commands-symbols, closed along the upper (lower) boundary and along the left (right) column.
  2. The command pointer moves across the field (each command is a symbol with x, y coordinates), executes the command and moves on. Movement can be in all 4 directions (by default to the right from point 0,0), and when leaving the “field” the pointer appears on the opposite side.
  3. The language has two commands (p, g) that change the field itself, i.e. the program “rewrites itself” during execution. The program code at the start may not be equal to the code at the finish.
Chris Pressey, the creator of Befunge noted that he wanted to build a language that was as difficult as possible to compile. And he reached his goal, actually.

The user has field made of 25 lines consisting of 80 symbols each. Also, the original 1993 version of Befunge has 36 commands and every single one of them is represented as the ASCII symbol. Here are some examples:
< - move cursor to the left;
> - move cursor to the right;
^ - move cursor to the upper line;
v - move cursor to the lower line;
@ - end of script;
& - ask the user for a number and put it into the stack; etc.

Here's the example of Fibonacci sequence code made on Befunge:
Fibonacci sequence in Befunge
62*1+v>01p001>+v>\:02p\:02gv
     0       ^             <
     .         :p
     "         .1
        v 0," "<0
     "  >1g12-+:|
     ,          @
     >^

Frequently Asked Questions

Esoteric programming language, or simply called 'esolang' is a programming language made for experiment or entertaining purposes. In most cases, esolangs are not useful for everyday coding and engineering.
Infosoft is a team of IT and QA engineers. We provide companies with technical talents and product development experience to create world-class software. You can scale up and down your remote software developing team at any time without any financial risk.
Our other articles:
Contact Us
Feel free to write and call us. We really love to communicate with our clients.
+380(63)233-32-78
ip@infosoft.ua