A Primer on Esoteric Programming Languages

There are a few programming languages like Ruby and JavaScript I use day to day that just get work done. There are others that are wonderfully expressive like Scala and Clojure, but which I find few opportunities to use.

This post is not about any of those programming languages. This post is about more esoteric languages — ones that I will never use for practical purposes.

These are languages that exist not to get work done, but to have fun. If you ask yourself “Why?” you are probably missing the point. The question is more often, “Why Not?”

Six Esoteric Programming Languages

INTERCAL

Possibly the oldest esoteric programming language, but still one of my favorites. INTERCAL’s original design goals were to be as odd as possible. Given the primary control flow statements are NEXT, RESUME, FORGET, and COME FROM, they appear to have been quite successful. The language enforces good manners by requiring the programmer to prefix statements with PLEASE. If the compiler detects that the programmer is being excessively polite, however, you will also get an error message.

Hello World with INTERCAL

Some particularly enterprising individuals have even managed to invent a web platform for INTERCAL, INTERCAL on Interstates.

Unlambda

Unlambda is a language that takes the concept of a functional programming language to its very extremes. It is a purely functional language in the most absolute sense of the phrase. The only programming constructs you have to work with are functions. This strictness actually provides a strange sort of beauty to the language model. Numbers are represented as church numerals.

Hello World with Unlambda

Chef

Chef is kind of a unique esoteric language, in that it’s not actually overly difficult to interpret. Chef programs resemble recipes, though on close examination, they are not always very sensible. The language is a fairly basic stack language, in which you put ingredients (values) into a mixing bowl (stack), combine them with some operation, and bake the result to perform the computation.

Hello World in Chef

Shakespeare

The Shakespeare programming language is, as you might expect, designed to read like Shakespeare. At first glance, most programs actually do a pretty good job at this. In Shakespeare, actors serve as variables, and acts and scenes are labels that can be jumped to with a phrase like “Let us proceed to.”

Hello World in Shakespeare

Whitespace

Whitespace is a programming language in which only whitespace is a valid programming character. All alphanumeric and standard symbolic symbols are treated as comments. This leads to some interesting possibilities around embedding whitespace programs within other programs.

Hello World in Whitespace (with syntax highlighting)

BF

One of the most popular esoteric languages, BF only consists of 8 single-byte commands. Combined, these eight instructions are turing complete. The somewhat vulgar name is a reference to the effect trying to program in the language has on one’s brain. The largest collection of BF resources can be found at the BF Archive

Hello World in BF

Conclusion

Several of these languages, particularly Whitespace and BF are actually reasonably well supported. BF in particular has interpreters, compilers, and transpilers on pretty much every platform you can think of.

Even more strange and odd programming languages can be found at Esolang, and a good overview can be found at the esoteric programming language wikipedia page.

While these languages may not be useful for general programming, they can be quite useful to help think about programming paradigms in a different fashion. They also make excellent targets for learning about parsing, lexing, and compiling. Do you have a favorite esoteric language not mentioned above? Give me a shout in the comments.
 

Conversation
  • Archenoth says:

    I was always amused by FIM++, a language that was designed to look like letters about lessons learned about something.

    • Mitchell Johnson Mitchell Johnson says:

      I hadn’t heard of FIM++ before, but it’s quite a good one. Thanks for sharing!

  • Comments are closed.