First of all please be aware this post contains some abusive language but I hope it will not bother anyone. I apologize for the bad language but that's what the name is.

As I've been doing documentation on existing programming languages attempting to make a complete list of them I stumbled across terrible programming languages, which were clearly not made for actual use and implementation due to their insane difficulty. Languages such as Brainfu*k and LOLCODE or Whitespace are fool languages because they have no real use.

For example, a "Hello world" program written in BrainFu*k. Taken from Wikipedia:

The following program prints "Hello World!" and a newline to the screen:

+++++ +++++             initialize counter (cell #0) to 10
[                       use loop to set the next four cells to 70/100/30/10
    > +++++ ++              add  7 to cell #1
    > +++++ +++++           add 10 to cell #2 
    > +++                   add  3 to cell #3
    > +                     add  1 to cell #4
    <<<< -                  decrement counter (cell #0)
> ++ .                  print 'H'
> + .                   print 'e'
+++++ ++ .              print 'l'
.                       print 'l'
+++ .                   print 'o'
> ++ .                  print ' '
<< +++++ +++++ +++++ .  print 'W'
> .                     print 'o'
+++ .                   print 'r'
----- - .               print 'l'
----- --- .             print 'd'
> + .                   print '!'
> .                     print '\n'

or another example taken from LOLCODE language:

     O NOES

These languages are very difficult to learn/read/work with. My question is - Why do they exist? What is the purpose of them? Also, is there an official "name" for these type of languages?

  • 3
    "very difficult to work with" -- you mean you've tried? – Fred Foo Mar 27 '12 at 18:49
  • 29
    ...maybe as a joke? – Michael K Mar 27 '12 at 18:50
  • 1
    Brainf*ck is hard to learn - really? Is that because it has so many different instructions you need to learn or because each instruction's semantics are so complex that they're impossible to remember? – sepp2k Mar 27 '12 at 18:52
  • 2
    this question is better suited to Quora ;p – Old account Mar 27 '12 at 18:59
  • 3
    OMG LOLCODE Is the ultimate language.. I do all my development in it and anyone who disagrees and doesn't follow me is uncool. – SoylentGray Mar 27 '12 at 20:47

Esoteric Programming languages, also known as Turing Tarpits due to the difficulty of writing anything useful with them, are mostly built for fun or to see how far a particular idea can be taken. Whitespace for instance, privileges a lexical item typically ignored in most languages. Shakespeare on the other hand is designed to mimic Shakespearean Drama. Brainfuck actually has a practical purpose. It is designed to employ the smallest possible compiler at under 200 Bytes.

There is a second category of the actual joke languages such as Malebolge and INTERCAL, neither of which is designed to be practical in any way whatsoever and have features that actively make them harder to use.

| improve this answer | |
  • <grin> Malbolge in particular was designed to be so complicated that no one could write a program in it, or something along those lines. IIRC, the first Hello World program written in Malbolge had to be created by a genetic algorithm written in some other language. – Izkata Mar 27 '12 at 20:43
  • 4
    I've found at least one practical use for Malbolge, I used to put it in my CV and if it didn't come up in the interview I know they didn't bother to read it thoroughly. – yannis Mar 28 '12 at 6:38

To quote brainf*ck's entry in wikipedia:

Urban Müller created brainfuck in 1993 with the intention of designing a language which could be implemented with the smallest possible compiler,[2] inspired by the 1024-byte compiler for the FALSE programming language.

These languages are created by the creator as some sort of exercise or a way to try something new or even just as a joke. It is a fun way for a programmer to keep their skills sharp and get internet famous.

| improve this answer | |

Esoteric languages are really just mind exercises. Why do crossword puzzles or word jumble puzzles exist? Because we can.

Brainf*ck is an exercise in spartanism; what sort of language can we create that has as few opcodes as possible, while still being Turing-complete?

LOLCATS is a nod to those folks who ask "CAN I HAZ THE CODEZ," while delightfully being a language that actually works.

| improve this answer | |

My question is - Why do they exist? What is the purpose of them?

Paraphrased from Wikipedia's page on Esoteric Programming Languages:

They are designed as a test of the boundaries of computer programming language design, as a proof of concept, or as a joke. There is usually no intention of the language being adopted for mainstream programming, although some esoteric features such as visuospatial syntax have inspired practical applications in the arts. Such languages are often popular among hackers and hobbyists.

Usability is rarely a high priority for such languages; often quite the opposite. The usual aim is to remove or replace conventional language features while still maintaining a language that is Turing-complete, or even one for which the computational class is unknown.

Also, is there an official "name" for these type of languages?

Yes - "Esoteric Programming Languages"

| improve this answer | |
  • True, but that alone doesn't stand as an answer. Please expand your answer to provide context for the link, answers are supposed to stand on their own. – yannis Mar 27 '12 at 19:05
  • @YannisRizos Is that better? – CFL_Jeff Mar 27 '12 at 19:20
  • Much thanks. Here's an interesting read on why we don't like link only answers, for further details. – yannis Mar 27 '12 at 19:22
  • @YannisRizos Yeah, I know, it just felt pointless in this case to copy straight from Wikipedia, which has a page devoted to exactly what the OP is asking. I do agree that link-only answers are evil, though, so I'll try to resist the urge in future answers. :) – CFL_Jeff Mar 27 '12 at 19:29

Your question answers itself: they're jokes, they're supposed to make you laugh. Occasionally they're written to make fun of bad decisions in other languages (satire). If you are working in language design to begin with, you'll have a lot of tools for parsing and code generation at your fingertips, so these generally aren't that hard to implement. The only reason to actually use one of these is languages is to show that you are in on the joke.

| improve this answer | |
  1. For fun.

  2. Because can be worth in designing a language, even if the language is, syntactically, a steaming pile of mythical brontosaurus poo.

  3. It is an absurdest sort of thing to do. Or a zen thing maybe.

| improve this answer | |

Take a look at the wikipedia article Esoteric programming languages. That's what these languages are called.

Shakespeare and Chef are other nice examples.

The reason for writing such a language could be just to see what's possible or just for the fun of it. I think most of the time they're not intended to do serious work with them.

Just enjoy looking at the codes and maybe if you're into creating programming languages try to understand how they work and how they are implemented.

Edit: There are also "jokes" that you can do in "proper" programming languages. See the programs at The International Obfuscated C Code Contest. I don't understand almost none of these programs and yet they do amazing stuff with them and only just for fun.

| improve this answer | |
  • GolfScript is another pretty popular one - designed with the express purpose of winning Code Golf exercises (implement the algorithm in the fewest possible bytes of source code). – KeithS Mar 27 '12 at 18:59
  • What other reason would there be ;) – ma cılay Mar 27 '12 at 19:06

I think it's worth adding that the Wiki page doesn't mention what I consider probably the most interesting esoteric programming language: unlambda. Unlambda claims to be: "Your Functional Programming Language Nightmares Come True".

Whereas most esoteric languages are just minimalist and fairly ugly, unlambda honestly has some quite interesting concepts (albeit, expressed in the ugliest possible ways). It does, however, have/use some rather interesting concepts -- chief among them, "abstraction elimination" (see the web site for details).

All in all, it's definitely at least as ugly as most of the others, but from a viewpoint of programming language theory, much more interesting than most.

Getting back to the original question about why the exist: at least most of them are just for fun. Most, however, do represent a fairly serious attempt at some exploration of the bare minimum of features necessary while still being Turing complete.

| improve this answer | |

I think creating such a language can be a useful and fun way of learning how to implement a parser and/or compiler...

| improve this answer | |
  • 1
    Many of those languages are trivial to implement, and most others are outlandish, unlike any language you'd really want to parse. If you want to implement a language, there are better exercises. – user7043 Mar 27 '12 at 18:53

Not the answer you're looking for? Browse other questions tagged or ask your own question.