Update
[less_retarded_wiki.git] / esolang.md
blob3ae579efe877b21d9dcab25100c62a2cd0d9bc8b
1 # Esoteric Programming Language
3 So called esoteric programming languages (esolangs) are highly experimental and [fun](fun.md) [programming languages](programming_language.md) that employ bizarre and/or unconventional ideas. Popular languages of this kind include [Brainfuck](brainfuck.md), [Chef](chef.md) or [Omgrofl](omgrofl.md).
5 There is a great [wiki](wiki.md) for esolangs, the Esolang Wiki (https://esolangs.org). If you want to behold esolangs in all their beauty, see https://esolangs.org/wiki/Hello_world_program_in_esoteric_languages_(nonalphabetic_and_A-M). The Wiki is published under [CC0](cc0.md)!
7 Many esolangers seem to be [code golfers](golf.md), i.e. people who do various programming challenges while aiming for the shortest code which often requires a wise choice of language... or perhaps making a completely new language just for the job :) Codegolf stack exchange is therefore one place to see many esolangs in action.
9 Some notable ideas employed by esolangs are:
11 - Using images instead of text as [source code](source_code.md) (e.g. *Piet*).
12 - Doing nothing (e.g. *Nothing*).
13 - Being two or more dimensional (e.g. *Befunge* or *Hexagony*).
14 - Source code resembling cooking recipes (e.g. *Chef*).
15 - Trying to be as hard to use as possible.
16 - Trying to be as hard to compile as possible (e.g. *Befunge*).
17 - Adding [randomness](randomness.md) to program execution (e.g. *Entropy*), or working with randomness in other ways (e.g. XD has only one command, *XD*, which always translates to random [Brainfuck](brainfuck.md) command).
18 - Having no [input/output](io.md) (e.g. *Compute*).
19 - Obligation to beg the compiler to do its job (e.g. *INTERCAL*).
20 - Using only white characters in source code (e.g. *Whitespace*).
21 - Using only a single letter in source code (e.g. *Unary*).
22 - Using git repository structure as source code (e.g. *legit*).
23 - Source code resembling dramatic plays (e.g. *Shakespeare*, actual [real-life](real_life.md) plays were performed).
24 - Solely focus on [golfing](golf.md), i.e. writing the shortest possible programs (e.g. *GoldScript*)
25 - Using [unicode](unicode.md) characters (e.g. *UniCode*).
26 - Being infinitely many languages (e.g. *MetaGolfScript*, each one solves a specific program in 0 bytes).
27 - ...
29 Esolangs are great because:
31 - **They are [fun](fun.md)** and have a cool community around them.
32 - **They are actually useful research in language design and food for thought**, even if most of the ideas aren't useful directly, esolangs really teach us about the borders and definitions of what languages are. And sometimes, by mistake, actual discoveries are made.
33 - **They are great exercise in [programming](programming.md)** and design. Simple languages that are allowed to not be useful are potentially good for education as they let the programmer fully focus on a specific idea and its implementation.
34 - **They blend technology with [art](art.md)**, train creativity and thinking "outside the box".
35 - **They are a breath of fresh air** in the sometimes too serious area of technology. Hobbyist and non-commercial programming communities are always great to have.
36 - ...
38 A famous one-man organization related to esolangs is Cat's Eye run by Chris Pressey, currently reachable at https://catseye.tc.
40 ## History
42 INTERCAL, made in 1972 by Donald Woods and James Lyon, is considered the first esolang in history: its goal was specifically intended to be different from traditional languages and so for example a level of politeness was introduced -- if there weren't enough PLEASE labels in the source code, the compiler wouldn't compile the program.
44 In 1993 [Brainfuck](brainfuck.md), probably the most famous esolang, was created.
46 In 2005 esolang wiki was started.
48 TODO
50 ## Specific Languages
52 The following is a list of some notable esoteric languages.
54 - **`!@$%^&*()+`**: Source code looks like gibberish.
55 - **[Brainfuck](brainfuck.md)**: Extremely simple but hard to program in, arguably the most famous esolang with many forks.
56 - **[Brainfork](brainfork.md)**: Brainfuck with added [multithreading](multithreading.md).
57 - **[Befunge](befunge.md)**: Two dimensional language that's extremely hard to compile.
58 - **[Chef](chef.md)**: Source codes look like cooking recipes.
59 - **Entropy**: Adds randomness to programs, data in variables decay.
60 - **[FALSE](false.md)**: Aims for as small compiler as possible, inspired creation of Brainfuck and other esolangs, very [minimalist](minimalism.md).
61 - **Gravity**: Executing programs involves solving [differential equations](differential_equation.md) related to gravity, which is [uncomputable](computability.md).
62 - **[INTERCAL](intercal.md)**: Maybe the first esolang, includes such statements as `PLEASE DO` which have to be present in order for the compilation to be successful.
63 - **Nothing**: Does nothing, guarantees zero bugs.
64 - **[Compute](compute.md)**: Can compute any existing problem in arbitrarily short time, but has no output so the result cannot be printed.
65 - **[Omgrofl](omgrofl.md)**: Source code is composed of internet acronyms such as *lol*, *wtf*, *lmao* etc.
66 - **Pi**: Source code looks like the number [pi](pi.md), errors encode the program.
67 - **[Piet](piet.md)**: Source codes are images.
68 - **Text**: Language that always prints its source code (it is not Turing complete). All [ASCII](ascii.md) files are programs in Text.
69 - **Polynomial**: Programs are [polynomials](polynomial.md) whose zeros determine the commands.
70 - **[Unary](unary.md)**: Source code uses only 1 character: `0`. Each program is just a sequence of zeros of different length.
71 - **[Velato](velato.md)**: Source codes are [MIDI](midi.md) files.
72 - **[Whitespace](whitespace.md)**: Source code uses only white characters (spaces, tabs and newlines) so it looks seemingly empty.
73 - **XENBLN**: [Golfing](golf.md) language, hello world is just `ลก`.
74 - ...
76 { There used to be an esolang webring, now only accessible through archive: https://web.archive.org/web/20110728084807/http://hub.webring.org/hub/esolang. You can find nice links there. ~drummyfish }
78 ## See Also
80 - [WPU](wpu.md) (weird processing unit)
81 - [conlang](conlang.md)
82 - [micronation](micronation.md)
83 - [NaNoGenMo](nanogenmo.md)