Welcome to the Obfuscated Languages site!
DISCLAIMER: The maintainer of this site and the providers of this site are in no way
responsible for any brain damage, loss of sanity, or hysteria caused by viewing this page.
Those who prefer not to see this may head right back to Prfnoff's
Home Page and hope not to/to be directed to this page again.
Fromage
Fromage was created as an experiment, and is based on the Turing machine model and a
twisted set of control structures I had made earlier. It also resembles BrainF*** to
some extent, though at the time I conceived the language I knew it very sketchily.
Fromage's obnoxiousness and lack of ease of use, so typical in obfuscated languages,
lie in its 10 instructions which operate on no data type larger than a bit. (Well, there's
the read and write functions which operate on characters, but they can only be operated
by switching bits.)
And now for a list of Fromage resources and links. It's currently small, although it will
probably grow in the future.
BAK
BAK has been my second attempt at creating an almost unusable language. Inspired by
such wonderful languages as Befunge, Malbolge, False, and Unlambda, programs written
in this language work because they create pointers to themselves. Programs can also
be self-modifiying, which makes writing a compiler for it somewhat difficult. On top
of all of this, several strange restrictions are enforced on BAK programs. In short, it's
an obfuscated language that tests the limit of language sanity, and an addictive one,
too!
The BAK interpreter is once again written in obfuscated C.
The "Hello, world" and 'cat' programs are
given as examples of code that work, and not as examples of how one should program
in BAK. There is also a BAK reference manual, but don't count
on it to be informative. Finally, there is an archive of all of the
other BAK stuff.
Other projects
After thinking too hard over BAK, I decided to create a language that completely
streamlined the self-modification so present in BAK. The result was named 'L',
and currently the only material is the 'L' specification,
but anyone is welcome to contact me if they want to implement it.
Due to the experience of writing the pseudo-OO Unilambda in C (see below),
and to the apparent lack of an obfuscated object-oriented language, I created
one named STOOPID: "Shows That Object-Oriented Programming Is Dumb". Like
Unlambda, STOOPID has no mutation; like 'L', STOOPID has a prose syntax; like
BAK, STOOPID has two stacks for storage; unlike most OO languages, STOOPID
completely lacks inheritance! Also like 'L', STOOPID exists only in incomplete
form at the moment, but people looking for some fun should read
the STOOPID syntax and semantics specification.
I created a second version of BAK, and created
a new version of the BAK interpreter to correspond.
From an e-mail message I wrote about it:
BAK's second version, which was actually implemented, was more of a
stylization of the original language. There would have been an
"alternate LIFO", but unlike Funge-98 only rudimentary operations
could be performed on it.
Here's a reference for the new BAK vs. old BAK:
[
Move to alternate LIFO
]
Move from alternate LIFO
|
Swap LIFO tops
^
Compare LIFO tops: max to main, min to alt
Old instructions (considered obsolete):
/
Use [|]
instead
\
Use [|[|]]
instead
<
Use [^!]
instead
>
Use [^]!
instead
And an earlier passage from the message quoted above:
Fromage was to have a second version, and so was BAK. The Fromage
second version would have added a rotating list of pointers to the
same array (not different arrays as in DoubleF***). Rudimentary macros
would also have been included. The number of instructions would have
risen from 10 to 16. The EOF semantics were also to change.
My various interpreters for the obfuscated creations of others are
Unilambda, an Unlambda interpreter,
bacfrink, a BrainF*** interpreter/optimizing
compiler, and worb-i, a noit o' mnain worb
interpreter.
The major obfuscated languages:
- The Cat's Eye Technologies site,
maintained by Chris Pressey, houses several interesting and crazy languages:
- Befunge,
which in its first version, Befunge-93, is a two-dimensional language, where the
program counter can move in any of the four compass directions. It was designed
to be hard to compile (but
a Befunge-93 compiler has since been written) and programs written in it
look like the insides of very complicated industrial machines, and are about as hard
to understand. Later versions extrapolate on this mess, and manage to make even
some parts of the language specifications nearly incomprehensible.
- BrainF***
has an unprintable name and was designed to be the smallest compiler possible.
It has eight operations so simple that to do anything major in the language requires
a mind-boggling number of steps. However, unlike many other obfuscated languages,
it has a beautiful syntax. Another site of interest,
Frans Faase's BrainF*** page
has much fun material including an interpreter written in BrainF*** and an online
interpreter/compiler.
Ryan Kusnery's BrainF***
self-reproducing program is the most impressive of several such programs written.
- INTERCAL was one of the first
obfuscated programming languages, and for a long time was defined by a completely
inane reference manual until it was reimplemented recently, with new and amusing
features added like the legendary and infamous COME FROM construct. The strange
bit-pair-wise math operators, including 'select' and 'mingle', originated here, although
they have since spread to other languages. The Intercal newsgroup
(alt.lang.intercal), despite its name, serves
in practice as a discussion forum for many obfuscated languages.
- Malbolge is an evil programming language with seven operators, operating in
trinary, code being self-modified seemingly at random, a very strange math operator,
and is nearly useless - it is widely considered to be not Turing-complete. Even such a
basic feature as a
Malbolge program that prints something resembling "hello, world" did not exist
until recently. The author, therefore, wrote another language, Dis, which is basically
Malbolge with the most obscene features changed.
- reMorse was designed
to resemble Morse code as closely as possible - it is based on four operators that
manipulate a rotating list of operators. Several strange data formats, weird error
behaviors, and confusingly differing language versions are the high points of this language
- or should I say gobbledygook?
- Unlambda is a functional programming language based on three simple and not quite
intuitive opcodes, with several more thrown in for greater unreadability. With the only
data types being lambda-type functions, and the only real operator being 'apply function',
other data types exist in several differing and confusing formats, and working with them
is an excercise in frustration and confusion.
Other obfuscated language pages:
- The Turing Tarpit, maintained by Brian Connors, includes a description of the
language Magenta, another example of why programming languages should not be
designed by committees, among other real and imagined horrors of the programming
world.
- The Weird Languages Page, provided by Ryan Kusnery, has an assortment of
languages in the tone of this page, including the author's creations of reMorse,
Bullfrog, orthINTERCAL, and DoubleF***.
- The Random
Programming Languages List, contrived by Ben Olmstead, author of Malbolge,
has source and program repositories of several languages that are listed on this
page or might have been. Ben Olmstead is (at this time of writing) also conducting
the Esoteric Awards.
- The Quines Page, which
is not strictly for obfuscated languages, but contains self-reproducing programs in
Intercal, BrainF***, and Befunge, besides the more understandable languages.
- The infamous International Obfuscated
C Code Contest contains some entries that are not only obfuscated C programs but
entire obfuscated languages.
- Assurdo Technologies features such
material as CLC-INTERCAL, a Perl compiler of "the world's second best programming
language," and several other cheerfully deranged ideas.
Hunt the Wumpus
Here is the obligatory reference to the classic game named 'Hunt the Wumpus' (or simply
'Wumpus'). Rather than provide a version of the game in source code form (although I intend
to do this eventually), this links to other Wumpus sites, many of them online playable
versions.
- Cat's Eye Technologies provides a copy of
Wumpus as it
originally appeared in BASIC in Creative Computing and the
accompanying article by the author, Gregory Yob, explaining
how Wumpus came
to be.
- Among Ryan Kusnery's
programs is a QBasic translation of the original Wumpus.
- The Retrocomputing Museum
provides a C Wumpus, along with an MIT-themed update called 'superhack'.
- Patrick's Hunt the Wumpus
is basically a JavaScript port of the original game. The interface is all text.
(JavaScript 1.1 based)
- There is another
JavaScript Wumpus that lets arrows miss some of the time. (JavaScript 1.0 based)
- Sean Lane Fuller's Wumpus
is another JavaScript version, this time letting the Wumpus dodge your arrow most of
the time. (JavaScript 1.0 based)
- Anthony Thyssen's Caves of the Wumpus has cave ambience, multiple caves, and a "Hunt the Exit" game,
which make it the best of the online Wumpus games in my opinion. (Form based)
- BU's interactive Wumpus
- a multi-player spin on the old game. (Form based)
- Wumpus 2
is based on the second version of the original - allowing multiple caves.
(JavaScript 1.0 based)
- C. Reid Harmon
Jr.'s Wumpus is based on another variety of Wumpus - a version that appeared on the
TI-99/4 microcomputers. (Java based)
- For those interested, there exists a description of
the TI Wumpus cartridge.
- headRUSH Wumpus
seems to be a PalmOS port of the TI variant.
- Bob Murching's Wumpus 98 appears to be an odd mix of the other varieties of Wumpus. (JavaScript 1.2 based)
- 'Wumpus World', another class of Wumpus programs, comes from the book
Artificial Intelligence: A
Modern Approach by Stuart Russell and Peter Norvig, and substitutes finding gold as
the main objective of the game. This variant mainly concerns computer players called
'agents'.
-
Aaron Michael Pulliam's Wumpus
World has user controls for the agent. (Form based)
-
The Java Wumpus project concerns the programming and evolution of computer-played
agents.
-
Trudy's Wumpus World is an
office-themed update - here you play against computer opponents. (JavaScript 1.1 based)
-
One of the many Wumpus World projects is
a simple Wumpus
World that clearly shows the deductive reasoning of the computer agent -
unfortunately, this one almost never finds the gold and shoots the Wumpus.
Still, it's worth seeing. (Java based)
-
The Wumpus World 1.0
has many features, including human/computer play. However, it has several problems
that make it somewhat uninteresting. (JavaScript 1.1 based)