Weird Programming Languages

INTERCAL by Donald R. Woods and James M. Lyon

Created in 1972, the Mother of All (intentionally) Weird Programming Languages. A language designed to be as different as possible from all others. It is quite a success, except that it operates on binary numbers (fixed in TriINTERCAL) and it is one-dimensional. (Is that the same Don Woods who wrote Adventure?)

Brian Raiter's INTERCAL Page

ESR's INTERCAL Page

alt.lang.intercal a newsgroup for the discussion of INTERCAL (or other weird languages, since they don't have their own newgroups)

CLC-INTERCAL Object Oriented Quantum INTERCAL

Threaded INTERCAL INTERCAL with multithreading.

Brainf*** by Urban Mueller

Designed to be the smallest compiler ever. has eight very simple instructions. a nightmare to do math in. the only data structure is a big array with a pointer that points to one element. (Originally it was an array of longwords but now it's an array of bytes.) Said to be "the language that is as obscene as its name".
+ a[p]++;
- a[p]--;
> p++;
< p--;
, a[p]=getch();
. putch(a[p]);
[ while (a[p]) {
] }
(My Programs page has a featureful debugger for this language (for MS-DOS only) and a compiler (written in this language) and a program called BFINIT which I used to generate data initialization code for the compiler, among other things. Also, this guy wrote a Brainf*** interpreter in Brainf***!)

(The reason for the asterisks is because I wouldn't want anyone viewing this page through a certain webcensoring program to be led to believe that "Brain" is the name of this language.)

FALSE by Wouter van Oortmerssen

Designed to be a small compiler, but still possible to use. All single-character instructions. Uses a stack, like FORTH. (It isn't quite Turing complete (unless you use the compiler and do some very non-portable things). Well maybe you can do it portably, sort of, but it still wouldn't work in the interpreter though.)

TRUE

A weird mutation of FALSE, but without variables, and with some string manipulation. I got an interpreter for this by email from the author, but I totally forgot about it until I read about on Ben Olmstead's Random Languages page, at which point I remembered it. I've never actually tried running the interpreter, which came without source code. For all I know it could be a virus. But, we programmers of the weird languages are too small a group to be likely target. But still...

Orthagonal by Jeff Epler

The ancestor of Orthogonal. A two-dimensional language. "A two-dimensional stack-based language, created during an afternoon when I ran a fever of 101 degrees. (Or somewhat less, in celcius)" ('Orthagonal' is a misspelling, and oddly enough, it has a bug in the character output routine.)

Orthogonal by Brian Raiter

Designed to be two-dimensional. Based on the earlier Orthagonal, but rather backwards combatable. Has most of the same instructions, but the storage of the grid is done dynamically, and the program execution may not wraparound or go through blank areas. If you want to have a cell that does nothing, you must use the NOP instruction.

Befunge by Chris Pressey

Designed to be a nightmare to compile. Impossible to compile unless the compiler has Artificial Intelligence. All instructions are single characters, and are loaded into a two-dimensional array without modification. Uses a stack. Self-modifying. Has a successor, Befunge 97, in which nearly every printable ASCII character is a valid instruction. Despite the fact that the grid contains bytes, the stack contains 32-bit signed integers. (Now there's Funge-98, in which your program can be 1, 2, or 3-dimensional, and there's even Time Travel. It has things called fingerprints and handprints, which allow people to create their own extended versions of the Funge-98 interpreter, and the program can determine whether the interpreter running supports the extension it needs (or something like that). There are extensions for things like drawing windows in a GUI, and making Internet connections(!?!?!?!) This language is starting to scare me.)

(Update: there is now a Befunge compiler written by Ben Olmstead. The code produced is rather large, but, as advertised, this is a true Befunge compiler. (I can hardly believe it!) Also, Tim Howe has a pseudo-compiler that generates C files which must then crank through a C compiler to get an executable. Also, I wrote a Befunge interpreter (for MS-DOS) in assembly language.)

RUBE by Chris Pressey

A tribute to Rube Golberg. No useful programs have been written in this language. The "instructions" act like objects which move around on a grid, kind of like a video game. Except that currently, RUBE programs are not interactive, because the input instruction has not been implemented. Probably the author couldn't decide how to handle multiple input instructions in the same program. (If you ask me, the best way would be to just scan through as usual, executing each input instuction that has a control crate in the proper location and space for the data crates to go. (and of course, room for the input crates) This would mean that after inputting a character, you would have to push away the control crate.)

TWDL[I] by Chris Pressey

Turingware Design Language [Interpreter]. In this language numbers are any number of bits you want, not just 8 or 16 or 32. Your data store is a double-ended queue.

Maentwrog (RPN calculator & simple interpreted language)

derived from rpn, Aug 1993 Chris Pressey
updated Jul 1997 Chris Pressey, fixed minor bugs

SMETANA by Chris Pressey

(actually it says "Copyunder (u)1999 Cat's-Eye Technologies.") SMETANA - both an acronym for "Self-Modifying, Extremely Tiny AutomatoN Application", and a reference to the composer of the same name. The question of whether SMETANA is Turing-Complete or not remains to this day unanswered. If it is, it must use the given program source as it's input, and the final state of the program as it's output. (It probably isn't Turing complete, but with the addition of another instruction, Copy Step M over Step N, it might be. Subtract Step M from Step N would also help.)

Wierd by Chris Pressey, Interpreter by John Colagioia

Kinda like Befunge except that the instruction pointer move in 8 directions instead of 4, and the movement of the instruction pointer determines the program's behavior. The instruction pointer travels on non-whitespace characters, changing direction when necessary, and the program terminates when a dead end is reached. The instruction executed depends not on the value of the character, but on the angle of the turn.
 nop,          /* 0 degrees */
 push1,        /* 45 degrees */
 condition,    /* 90 degrees */
 getput,       /* 135 degrees */
 terminus,     /* 180 degrees */
 inputoutput,  /* 225 degrees */
 condition,    /* 270 degrees */
 subtract      /* 315 degrees */
The angles in the instruction list are counterclockwise relative to the current direction. The Hello World program that comes with this language reminds me of the Fourier Passage in Adventure - "it twists and turns like an earthworm tripping on LSD".

reMorse by Ryan Kusnery

Designed not to recognizable as a programming language. It looks like Morse code. It is hard to write programs in, and impractical to compile, because the operation done depends partly on an eight-state variable. No complete, working programs have been written in this language. (Wasn't Turing complete originally, because the only random-accessible data store was limited to 256 bytes. I fixed this problem in reMorse2.- by adding "fake push" and "fake pop" operations which make the stack random-accessible.)

Doublef*** by Ryan Kusnery (an extension of Brainf*** by Urban Mueller)

Same as Brainf***, but with 8 more instructions that operate on a second array.
+-><,.[] (original Brainf*** instructions)
/\^v;:{} (corresponding secondary instructions)
Special macro feature: When something in parentheses is preceded by a number 2 or greater, it will be duplicated; when preceded by 0 or no number, it will be removed. Numbers must be decimal.
Special (internal use only) characters:
Z clear
G get
P put
S determine value to scan for
L scan left
R scan right

OrthINTERCAL (or should it be INTERgonal?) by Ryan Kusnery

Combines the best (or worst?) features of Orthogonal and INTERCAL. Parsed like Orthogonal, except the default cell width is 6, to accomodate the constant #65535. A FORTH-like stack is used, with INTERCAL operators. A label takes up an entire cell. Therefore, the two kinds of abstination are totally separate. And of course sparks and rabbits ears are completely useless here, so they are not included. When a label that is being abstained from is reached, the next instruction is skipped.

Not yet implemented. I'll get around to it in about #256$#256 days or so.

Bullfrog by Ryan Kusnery

A (somewhat) FORTH-like language with NO CONDITIONAL JUMPS! You are able to simulate them, however, because the JUMP instruction gets an address from the top of the stack. It is very much like assembly language in the way that data is created. When creating this language I realized that except for the lack of conditional jumps, it is very close to what I consider the ideal language. So I decided that there should be a dialect called Frog which would be the same except it would have conditional jumps. (Combines the portability of C (or will, once the compiler has been ported) with the power of assembly language (and the readability of FORTH). Will also have the efficiency of an assembler, once I add the optimizer feature.)

Update: The Bullfrog language is officially dead, but it has died only to be reincarnated as a new (similar but totally incompatible) language. The new language as yet has no compiler and no name. And unlike Bullfrog, I'm designing it for practical use. And it will have code optimization, floating point numbers, memory management, OOP, and graphics and sound modules. Eventually.

Malbolge by Ben Olmstead

The Language from Hell. It operates in trinary, instructions are automatically modified after being executed, and you have to encrypt your source files using a key included in the documentation. (Don't worry, it's only a substitution cypher. But still, this means that you can't write Malbolge programs without first writing another program to aid you.) I am certain that is not Turing complete, because to make a loop, you need to write some code that undoes the automatic self-modification, and to do that, you need to use a loop. (There's also the matter of the weird operator; It looks unlikely that you could perform calculations with it.) The day that someone writes, in Malbolge, a program that simply copies its input to it's output, is the day my hair spontaneously turns green. It's the day that elephants are purple and camels fly, and a cow can fit through a needle's eye.

I was quite amazed when someone succeeded in writing a Hello World program in Malbolge. He didn't just go and write it directly, he wrote this hairy program to generate it. Click on the link to read his own explanation of it.

Dis by Ben Olmstead

A language designed to be really hard but not quite impossible.

Blank by Andrew Turley

Another stack-based language. You have various commands for doing calculations on the stack, input and output, flow control, and self-modification. The instruction set is based mainly on Befunge, but there's no stringmode here. The weird thing about this language is that all data consists of positive integers individually enclosed in brackets, and all code consists of punctuation characters individually enclosed in braces. Everything else is considered a comment. This language was based on Befunge, FALSE, and Brainf***. Also resembles Orthogonal in that, when self-modifying, it can create new cells with data in them but not code.

Plankalkul by Konrad Zuse

The first known high-level programming ever invented, but it was never implemented. In this language your (only) basic unit of data is the bit. Everything else is an array of bits.

OISC by Ross Cunniff

One Instruction Set Computer. A play on RISC (Reduced Instruction Set Computer). The only instruction is Subtract and Branch if Negative. Its operands are three addresses, X, Y, and Z. This instruction subtracts the number at address Y from the number at address X, stores the result at address X, and if the result is negative, branches to address Z. (Ross Cunniff Hewlett-Packard Graphics Software Lab cunniff(at)fc.hp.com DISCLAIMER: HP would be bankrupt if I worked in the CPU design division...)

URISC by David Tanguay

Ultimate RISC. Like OISC, only the instruction is Reverse Subtract and Skip if Borrow, and it has only one operand!
 * The great instruction is: subtract the value in the accumulator from the
 * value in the address specified by the operand, and skip the next
 * instruction (more precisely, operand) if there was a borrow.
The result is stored in both the accumulator and location specified by the operand. The accumulator is located in memory at location 1, so by using 1 as the operand, you can clear the accumulator. The instruction pointer is at location 0, so by using 0 as an operand you can jump to another location.

kvik - A Kvikkalkul Compiler

Written by Asher Hoskins. (ukrhosk(at)prl.philips.co.uk) (According to the documentation, he wrote only the compiler, not the spec. The specification was posted anonymously to alt.folklore.computers (probably as a joke). The name, no doubt, came from the name Plankalkul.) This is an extremely weird language.

SORTA by by Daniel J. Bernstein

This is an interpreter for the programming language SORTA, a systems and numerical programming language with features sorta from C, sorta from FORTH, and sorta from Ada. (This was an entry in the International Obfuscated C Contest, and it won Best of Show. Instead of saying it has features "sorta from FORTH", I think it would be more accurate to say "sorta from FALSE", because this language is all single-character instructions.) It has two stacks, one for integers and one for strings.

Q-BAL by Michael Shulman

This language is based on queues instead of stacks. He took the Q-BAL page down due to lack of interest but his home page is at http://listen.to/om

Unlambda by David Madore

"Like lambda-calculus without the lambda operation." I can't figure this one out - probably mainly because I don't know lambda-calculus. Check it out...

Gorby by Geoffrey Hamilton

A somewhat FORTH-like language. Actually it's not very weird, but I listed it here just because I saw it on some page in the Esoteric Programming webring.

Mouse by Peter Grogono, maintained by Sean Fuller

Sort of like FALSE except that it lets you break out of a loop (and FALSE doesn't), but it also lacks stack manipulation commands. It was originally called MUSYS and was used to control a music synthesizer. The reason for it's small size was because it was written in 1970 to run on a PDP-8 with very little memory. So this isn't really an esoteric language, just extremely specialized.

Relevant newsgroups

alt.lang.intercal

comp.lang.misc

alt.folklore.computers

Relevant web pages

Esoteric Programming Languages

The Retrocomputing Museum


This Esoteric Programming Languages Ring site owned by Me.
[ Previous 5 Sites | Previous | Next | Next 5 Sites | Random Site | List Sites ]

back to my homepage

back to my programs page