Recent from talks
Nothing was collected or created yet.
Esoteric programming language
View on WikipediaAn esoteric programming language (sometimes shortened to esolang) or weird language[1]: 5 is a programming language designed to test the boundaries of computer programming language design, as a proof of concept, as software art, as a hacking interface to another language (particularly functional programming or procedural programming languages), or as a joke. The use of the word esoteric distinguishes them from languages that working developers use to write software. The creators of most esolangs do not intend them to be used for mainstream programming, although some esoteric features, such as live visualization of code, have inspired practical applications in the arts.[2] Such languages are often popular among hackers and hobbyists.[citation needed]
Usability is rarely a goal for designers of esoteric programming languages; often their design leads to quite the opposite. Their 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.
History
[edit]
The earliest, and still the canonical example of an esoteric programming language, is INTERCAL,[3] designed in 1972 by Don Woods and James M. Lyon, who said that their intention was to create a programming language unlike any with which they were familiar,[4] namely FORTRAN, BASIC, COBOL, ALGOL, SNOBOL, SPITBOL, FOCAL, SOLVE, TEACH, APL, LISP, and PL/I.[5] It parodied elements of established programming languages of the day.[1]: 5
For many years, INTERCAL was represented only by paper copies of the INTERCAL manual. Its revival in 1990 as an implementation in C[1]: 6 under Unix stimulated a wave of interest in the intentional design of esoteric computer languages.
In 1993, Wouter van Oortmerssen created FALSE, a small stack-oriented programming language with syntax designed to make the code inherently obfuscated, confusing and unreadable. Its compiler is only 1024 bytes in size.[6] This inspired Urban Müller to create an even smaller language, the now-infamous Brainfuck, which consists of only eight recognized characters. Along with Chris Pressey's Befunge (like FALSE, but with a two-dimensional instruction pointer), Brainfuck is now one of the best-supported esoteric programming languages, with canonical examples of minimal Turing tarpits and needlessly obfuscated language features. Brainfuck is related to the P′′ family of Turing machines.
Common features
[edit]While esoteric programming languages differ in many ways, there are some common traits that characterize many languages, such as parody, minimalism, and the goal of making programming difficult.[3] Many esoteric programming languages, such as brainfuck, and similar, use single characters as commands, however, it is not uncommon for languages to read line by line like conventional programming languages.
Unique data representations
[edit]Conventional imperative programming languages typically allow data to be stored in variables, but esoteric languages may utilize different methods of storing and accessing data. Languages like Brainfuck and Malbolge only permit data to be read through a single pointer, which must be moved to a location of interest before data is read. Others, like Befunge and Shakespeare, utilize one or more stacks to hold data, leading to a manner of execution akin to Reverse Polish notation. Finally, there are languages which explore alternative forms of number representation: the Brainfuck variant Boolfuck only permits operations on single bits, while Malbolge and INTERCAL variant TriINTERCAL replace bits altogether with a base 3 ternary system.[7]
Unique instruction representations
[edit]Esoteric languages also showcase unique ways of representing program instructions. Some languages, such as Befunge and Piet, represent programs in two or more dimensions, with program control moving around in multiple possible directions through the program.[8][page needed] This differs from conventional languages in which a program is a set of instructions usually encountered in sequence. Other languages modify instructions to appear in an unusual form, often one that can be read by humans with an alternate meaning to the underlying instructions. Shakespeare achieves this by making all programs resemble Shakespearian plays. Chef achieves the same by having all programs be recipes.[7] Chef is particularly notable in that some have created programs that successfully function both as a program and as a recipe, demonstrating the ability of the language to produce this double meaning.[9]
Difficulty to read and write
[edit]Many esoteric programming languages are designed to produce code that is deeply obfuscated, making it difficult to read and to write.[1] The purpose of this may be to provide an interesting puzzle or challenge for program writers: Malbolge for instance was explicitly designed to be challenging, and so it has features like self-modifying code and highly counterintuitive operations.[1] On the other hand, some esoteric languages become difficult to write due to their other design choices. Brainfuck is committed to the idea of a minimalist instruction set, so even though its instructions are straightforward in principle, the code that arises is difficult for a human to read. INTERCAL's difficulty arises as a result of the choice to avoid operations used in any other programming language, which stems from its origin as a parody of other languages.[1]
Parody and spoof
[edit]One of the aims of esoteric programming languages is to parody or spoof existing languages and trends in the field of programming.[1] For instance, the first esoteric language INTERCAL began as a spoof of languages used in the 1960s, such as APL, Fortran, and COBOL. INTERCAL's rules appear to be the inverse of rules in these other languages.[10] However, the subject of parody is not always another established programming language. Shakespeare can be viewed as spoofing the structure of Shakespearean plays, for instance. The language Ook! is a parody of Brainfuck, where Brainfuck's eight commands are replaced by various orangutan sounds like "Ook. Ook?"[7]
Examples
[edit]Befunge
[edit]Befunge allows the instruction pointer to roam in multiple dimensions through the code. For example, the following program displays "Hello World" by pushing the characters in reverse order onto the stack, then printing the characters in a loop which circulates clockwise through the instructions >, :, v, _, ,, and ^.
"dlroW olleH">:v
^,_@
There are many versions of Befunge, the most common being Befunge-93, named as such because of its release year.[11]
Binary lambda calculus
[edit]Binary lambda calculus is designed from an algorithmic information theory perspective to allow for the densest possible code with the most minimal means, featuring a 29-byte self interpreter, a 21-byte prime number sieve, and a 112-byte Brainfuck interpreter.[12]
Brainfuck
[edit]Brainfuck is designed for extreme minimalism and leads to obfuscated code, with programs containing only eight distinct characters. The following program outputs "Hello, world!":[13]
++++++++++[>+++++++>++++++++++>+++<<<-]>++.>+.+++++++
..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.
All characters other than +-<>,.[] are ignored.
Chef
[edit]Chef is a stack-oriented programming language created by David Morgan-Mar, designed to make programs look like cooking recipes.[14] Programs consist of a title, a list of variables and their data values, and a list of stack manipulation instructions.[15] A joking design principle states that "program recipes should not only generate valid output, but be easy to prepare and delicious", and Morgan-Mar notes that an example "Hello, World!" program with 101 eggs and 111 cups (~26,640 mL) oil would produce "a lot of food for one person".[15][16]
FRACTRAN
[edit]A FRACTRAN program is an ordered list of positive fractions together with an initial positive integer input . The program is run by multiplying the integer by the first fraction in the list for which is an integer. The integer is then replaced by and the rule is repeated. If no fraction in the list produces an integer when multiplied by , the program halts. FRACTRAN was invented by mathematician John Conway.[17]
INTERCAL
[edit]INTERCAL, short for "Compiler Language With No Pronounceable Acronym", was created in 1972 as a parody to satirize aspects of the various programming languages at the time.[5]
JSFuck
[edit]JSFuck is an esoteric programming style of JavaScript, where code is written using only six characters: [, ], (, ), !, and +.
Unlike Brainfuck, which requires its own compiler or interpreter, JSFuck is valid JavaScript code, meaning JSFuck programs can be run in any web browser or engine that interprets JavaScript.[18][19] It has been used in a number of cross-site scripting (XSS) attacks on websites such as eBay due to its ability to evade cross-site scripting detection filters.[20]
LOLCODE
[edit]LOLCODE is designed to resemble the speech of lolcats. The following is the "Hello World" example:
HAI CAN HAS STDIO? VISIBLE "HAI WORLD!" KTHXBYE
While the semantics of LOLCODE is not unusual, its syntax has been described as a linguistic phenomenon, representing an unusual example of informal speech and internet slang in programming.[21]
Malbolge
[edit]Malbolge (named after the 8th circle of Hell) was designed to be the most difficult and esoteric programming language. Among other features, code is self-modifying by design and the effect of an instruction depends on its address in memory.[22]
Piet
[edit]

Piet is a language designed by David Morgan-Mar, whose programs are bitmaps that look like abstract art.[23] The execution is guided by a "pointer" that moves around the image, from one continuous coloured region to the next. Procedures are carried out when the pointer exits a region.
There are 20 colours for which behaviour is specified: 18 "colourful" colours, which are ordered by a 6-step hue cycle and a 3-step brightness cycle; and black and white, which are not ordered. When exiting a "colourful" colour and entering another one, the performed procedure is determined by the number of steps of change in hue and brightness. Black cannot be entered; when the pointer tries to enter a black region, the rules of choosing the next block are changed instead. If all possible rules are tried, the program terminates. Regions outside the borders of the image are also treated as black. White does not perform operations, but allows the pointer to "pass through". The behaviour of colours other than the 20 specified is left to the compiler or interpreter.[23][non-primary source needed]
Variables are stored in memory as signed integers in a single stack. Most specified procedures deal with operations on that stack, while others deal with input/output and with the rules by which the compilation pointer moves.[24]
Piet was named after the Dutch painter Piet Mondrian.[25] The original intended name, Mondrian, was already taken by an open-source statistical data-visualization system.[23]
Shakespeare
[edit]Shakespeare Programming Language (SPL) is designed to make programs look like Shakespearean plays. For example, the following statement declares a point in the program which can be reached via a GOTO-type statement:[citation needed]
Act I: Hamlet's insults and flattery.
Unlambda
[edit]Unlambda is a minimalist functional programming language based on SKI calculus, but combined with first-class continuations and imperative I/O (with input usually requiring the use of continuations).[26]
Velato
[edit]Velato was created by Daniel Temkin in 2009 and uses MIDI files as its source code. Programs are composed of musical notes, with each instruction determined by the interval between successive notes relative to a chosen root note.[27] This design allows valid Velato code to double as a musical composition.[28]
Whitespace
[edit]
Whitespace uses only whitespace characters (space, tab, and return), ignoring all other characters, which can therefore be used for comments. This is the reverse of many traditional languages, which do not distinguish between different whitespace characters, treating tab and space the same. It also allows Whitespace programs to be hidden in the source code of programs in languages like C.[citation needed]
Cultural context
[edit]The cultural context of esolangs has been studied by Geoff Cox, who writes that esolangs "shift attention from command and control toward cultural expression and refusal",[29] seeing esolangs as similar to code art and code poetry, such as Mez Breeze's mezangelle, a belief shared by others in field.[30] Daniel Temkin claims that "esolangs are open-ended systems, natively collaborative, and distanced from any single materialized form", which "challenge or re-affirm wider ideas in programming culture and in how computer science is taught", including the neutral, "professional" style advocated in Edsgar Dijkstra's The Humble Programmer.[31]
References
[edit]- ^ a b c d e f g Mateas, M.; Montfort, N. (2005). A Box, Darkly: Obfuscation, Weird Languages, and Code Aesthetics (PDF). Digital Arts and Culture: Digital Experience: Design, Aesthetics, Practice (DAC 2005). Copenhagen, Denmark.
- ^ McLean, A.; Griffiths, D.; Collins, N.; Wiggins, G. (2010). Visualisation of Live Code. Electronic Visualisation and the Arts 2010. London.
- ^ a b Fuller, Matthew (2008). Software studies: a lexicon. MIT Press. ISBN 978-0-262-06274-9. OCLC 1156851190.
- ^ Eric S. Raymond (1996). The New Hacker's Dictionary. MIT Press. p. 258. ISBN 978-0-262-68092-9.
- ^ a b Woods, Donald R.; Lyon, James M. (1973), The INTERCAL Programming Language Reference Manual, Muppetlabs.com, retrieved 1 May 2023
- ^ "Interview with Wouter van Oortmerssen". Esoteric.codes. 1 July 2015. Retrieved 1 May 2023.
- ^ a b c Morr, Sebastian (2015). Esoteric Programming Languages (PDF). S2CID 160025019.
- ^ Cox 2013.
- ^ Mike (31 March 2013). "Baking a Hello World Cake". Products of Mike's Mind. Archived from the original on 1 May 2023. Retrieved 1 May 2023.
- ^ Gaboury, Jacob (2018). "Critical Unmaking: Toward a Queer Computation". In Jentery Sayers (ed.). The Routledge Companion to Media Studies and Digital Humanities. New York: Routledge. pp. 483–491. doi:10.4324/9781315730479-50. ISBN 978-1-315-73047-9.
- ^ "Languages". Cat's Eye Technologies.
- ^ John Tromp. "Most functional". The International Obfuscated C Code Contest. Archived from the original on 17 January 2025.
- ^ "El Brainfuck". copy.sh. Retrieved 30 November 2022.
- ^ Cozens, Simon (2005). Advanced Perl programming. O'Reilly Media. p. 269. ISBN 978-0-596-00456-9.
A final Acme curiosity, and one of my favourites, is Acme::Chef, an implementation of David Morgan-Mar's Chef programming language. In Chef, programs are expressed in the form of recipes: ...
- ^ a b Morgan-Mar, David (24 March 2011). "Chef". DM's Esoteric Programming Languages. Self-published. Retrieved 1 May 2023.
- ^ Morgan-Mar, David (28 June 2014). "Chef - Hello World". DM's Esoteric Programming Languages. Self-published. Retrieved 1 May 2023.
- ^ Kneusel, Ronald (2022). Strange Code: Esoteric Languages That Make Programming Fun Again. No Starch Press. p. 217. ISBN 978-1718502406.
- ^ Bailey, Jane (29 February 2016). "Bidding on Security". The Daily WTF. Retrieved 2 March 2020.
- ^ "Exploring JSF*ck". alligator.io. Archived from the original on 2 March 2020. Retrieved 2 March 2020.
- ^ Dan Goodin (3 February 2016). "eBay has no plans to fix "severe" bug that allows malware distribution [Updated]". Ars Technica.
- ^ Zabenkov, A.A.; Morel Morel, D.A. (2014). "Esoteric programming languages as a state-of-the-art semiotic trend". Experientia Est Optima Magistra: Collected Arts. 3. Belgorod State University: 170.
- ^ Temkin, Daniel (3 November 2014). "Interview with Ben Olmstead". esoteric.codes. Retrieved 7 January 2021.
- ^ a b c Morgan-Mar, David (25 January 2008). "Piet". Retrieved 1 May 2023.
- ^ Kneusel, Ronald (2022). Strange Code: Esoteric Languages That Make Programming Fun Again. No Starch Press. pp. 246–247. ISBN 978-1718502406.
- ^ Cox 2013, p. 6
- ^ Chu-Carroll, Mark C. (11 August 2006). "Friday Pathological Programming: Unlambda, or Programming Without Variables". Good Math, Bad Math (blog). ScienceBlogs.
- ^ "Velato". Velato.net. Daniel Temkin. 2009. Retrieved 18 October 2025.
- ^ Temkin, Daniel (27 January 2011). "Accordion March of the Data Transmission". danieltemkin.com. Archived from the original on 29 May 2013. Retrieved 18 October 2025.
- ^ Cox 2013, p. 5
- ^ "The true meaning of esoteric programming languages". Apifonica. Retrieved 30 November 2023.
- ^ Temkin, Daniel (2023). "The Less Humble Programmer". DHQ: Digital Humanities Quarterly. 17 (2).
Bibliography
[edit]- Paloque-Bergès, Camille (2009). "Langages ésotériques". Poétique des codes sur le réseau informatique. Archives contemporaines. ISBN 978-2-914610-70-4.
- Cox, Geoff (2013). Speaking Code: Coding as Aesthetic and Political Expression. MIT Press. ISBN 978-0-262-01836-4.
- Kneusel, Ronald (2022). Strange Code: Esoteric Languages That Make Programming Fun Again. No Starch Press. ISBN 978-1718502406.
External links
[edit]
Esoteric programming language
View on GrokipediaOverview
Definition
An esoteric programming language, often abbreviated as esolang, is a computer programming language designed primarily to experiment with unconventional ideas in computation, to highlight limitations or quirks of established programming paradigms, or to pursue non-practical goals such as humor and artistic expression, rather than to facilitate efficient or practical software development.[11] Key attributes of esolangs include an intentional emphasis on "weirdness" through atypical syntax, semantics, or execution models that challenge conventional notions of usability and readability, with Turing-completeness frequently demonstrated as a proof of concept to affirm their computational equivalence to mainstream languages despite these constraints, though it is not a strict requirement for classification as esoteric.[11] Their focus often lies in probing the boundaries of computability, such as minimalism in instruction sets or novel data representations, to reveal underlying assumptions in language design. Unlike domain-specific languages like SQL, which target particular applications such as database querying, or general-purpose languages like Python, optimized for productivity and broad utility, esolangs prioritize cognitive challenge and conceptual exploration over ease of use or performance, intentionally maximizing the effort required to program in them.[11] The term "esoteric programming language" or "esolang" emerged and was popularized within hacker communities in the early to mid-1990s, reflecting a growing interest in languages that subvert traditional programming norms. For instance, Brainfuck exemplifies this through its extreme minimalism, using only eight commands to achieve Turing-completeness.[11]Purposes and Motivations
Esoteric programming languages are primarily motivated by the desire to parody conventional programming paradigms and challenge established norms in language design. Early examples, such as INTERCAL developed in 1972 by Don Woods and James M. Lyon, were explicitly created as satirical responses to the seriousness of mainstream languages like FORTRAN and COBOL, aiming to produce a system with no superficial similarities to existing ones while remaining computationally equivalent.[12] This parodic intent often extends to testing the theoretical boundaries of computation, particularly by demonstrating Turing-completeness through minimal or unconventional instruction sets, thereby exploring the minimal requirements for universal computation without practical constraints.[9] Such efforts provoke deeper reflection on core concepts like usability and expressiveness, questioning why languages prioritize readability and efficiency over experimental forms that reveal underlying assumptions in programming. They provoke deeper reflection on core concepts like usability and expressiveness, questioning why languages prioritize readability and efficiency over experimental forms that reveal underlying assumptions in programming. Secondary motivations include artistic expression and serving as educational instruments to illuminate computational principles. Creators often view esolangs as a form of software art, where the language itself becomes a canvas for creativity, emphasizing aesthetics and novelty over functionality.[13] In educational contexts, these languages function as tools to teach abstraction and problem-solving by imposing severe constraints that force learners to grasp fundamentals like memory management and control flow in stripped-down environments.[14] Additionally, they offer critiques of industry trends, such as code bloat in modern software, by either embracing extreme minimalism to underscore elegance in simplicity or amplifying complexity to satirize unnecessary features in production languages.[15] Philosophically, esolangs draw on ideas of "useless" or absurd computation to contrast the efficiency-driven ethos of practical programming, highlighting how constraints can foster innovative thinking or expose the arbitrariness of conventional designs.[11] Over time, their purposes have evolved from initial jests—epitomized by INTERCAL's humorous origins—to more substantive explorations, with contemporary works integrating esolangs into discussions of computational creativity and cognitive benefits.[1] Recent academic contributions, including a 2025 analysis advocating for their study to enhance programming skills through unusual constraints, reflect this shift toward recognizing esolangs' role in broadening perspectives on language design and innovation.[9]History
Origins
The emergence of esoteric programming languages, or esolangs, can trace conceptual precursors to the 1960s, when experimental languages like APL introduced unconventional syntax and notation that prioritized mathematical expressiveness over conventional readability. Developed by Kenneth E. Iverson and published in his 1962 book A Programming Language, APL employed a unique array of special symbols for operations, diverging sharply from alphanumeric keywords in languages like FORTRAN and COBOL, though it was intended for practical mathematical and scientific computing rather than deliberate obscurity or humor.[16] These early innovations in notation influenced later esolang designers by demonstrating how syntax could be abstracted to the point of unfamiliarity, but APL itself is not considered a true esolang due to its utilitarian goals.[17] The formal origins of esolangs as intentional parodies began in the 1970s within academic and hacker communities, particularly at Princeton University. On May 26, 1972, undergraduates Donald R. Woods and James M. Lyon created INTERCAL (Compiler Language With No Pronounceable Acronym) during a late-night session, explicitly designing it to mock the verbosity and rigidity of established languages like FORTRAN while sharing no meaningful similarities with them.[18] Emerging from the playful hacker culture of the era—fostered in university computing labs amid the rise of time-sharing systems—INTERCAL represented a deliberate rejection of practical programming norms, instead embracing absurdity as its core principle.[19] Initially distributed through printed manuals and shared among Princeton's computing enthusiasts, with limited circulation via early academic networks, it quickly became a cult artifact in these circles.[4] INTERCAL introduced several key humorous elements that defined the esolang genre, including mandatory politeness in syntax and surreal error reporting. Statements could optionally be prefixed with "PLEASE" or "PLEASE DO" to invoke a sense of courteous absurdity, parodying the formal verbosity of business-oriented languages like COBOL while subverting the terse imperatives of FORTRAN.[18] Error messages further amplified the parody, featuring whimsical phrases such as "PROGRAM HAS DISAPPEARED INTO THE BLACK LAGOON" for excessive loop nesting or "THROW STICK BEFORE RETRIEVING" for improper data retrieval attempts, transforming compilation failures into comedic theater.[18] These features established a foundational tone of "weirdness" for esolangs, influencing their evolution into a niche of computational humor by the 1980s.[19]Expansion and Key Milestones
The expansion of esoteric programming languages gained momentum in the 1980s and 1990s, paralleling the widespread adoption of personal computers that empowered individual hobbyists to experiment with unconventional computing concepts beyond mainstream software development.[20] This era saw the emergence of minimalist designs challenging traditional language paradigms, with Urban Müller introducing Brainfuck in 1993 as an iconic example. Brainfuck, created by the Swiss physics student while managing an online Amiga software archive, consists of only eight simple commands and was designed to enable the smallest possible Turing-complete compiler.[21] Concurrently, Chris Pressey developed Befunge in 1993, a stack-based language featuring two-dimensional code execution where the instruction pointer moves like a cursor across a grid, specifically to complicate compilation processes.[22] The turn of the millennium marked further proliferation, fueled by internet connectivity that facilitated sharing and collaboration among enthusiasts. In 2003, David Morgan-Mar created Piet, a visual esoteric language where programs are rendered as abstract images using cycles of 18 colors to represent operations, blending art and computation in homage to painter Piet Mondrian.[23] By 2007, Adam Lindsay, a researcher at Lancaster University's Computing Department, launched LOLCODE, an imperative language parodying internet "lolspeak" memes from lolcats, with syntax like "HAI 1.2" for program starts and "KTHXBYE" for ends, capturing the era's viral humor.[24] Community formation solidified this growth, beginning with early online discussions in Usenet groups such as bit.listserv.test, which influenced the exchange of ideas on language experimentation. In 1999, David Madore established the Esoteric Programming Language List, a key resource that cataloged over 100 such languages and served as a central hub for the burgeoning field.[25] Key events included the inaugural Esoteric Awards contest in 2000, organized by Ben Goertzel, which encouraged submissions and recognized innovative designs, fostering a sense of collective creativity through the early 2010s.[26]Recent Developments
In the 2020s, esoteric programming languages (esolangs) experienced a surge in academic attention, transitioning from niche curiosities to tools for exploring creativity and cognitive aspects of programming. A 2025 arXiv preprint titled "Let's Take Esoteric Programming Languages Seriously" argues that esolangs' constraints enhance program comprehension, language design innovation, and programmer empathy, positioning them as valuable for educational and research purposes.[9] This work, presented at the 2025 ACM SIGPLAN International Symposium on New Ideas, New Paradigms, and Reflections on Programming and Software (Onward!), highlights their role in fostering deeper understanding of computational limits, contrasting with their 1990s origins in humor.[27] Artist and programmer Daniel Temkin's 2025 book Forty-Four Esolangs: The Art of Esoteric Code, published by MIT Press, further elevates esolangs' artistic significance by cataloging 44 original languages that challenge conventional notions of code as both functional and expressive art. Temkin emphasizes their potential to reveal hidden metaphors in mainstream programming, drawing on decades of esolang evolution to advocate for their study in creative computing contexts.[28] The Esolang wiki, a central repository for esolang documentation, reflects ongoing innovation with dozens of new languages added between 2020 and 2025, though none has emerged as a dominant "killer" esolang. Examples include quantum-inspired designs like ~a|b>, which simulates qubits using probabilistic values between 0 and 1 for memory representation, exploring minimalism in quantum computing concepts. Other 2025 additions, such as Fucktion and GeoFuck, continue experimental themes, while discussions on the wiki note growing AI integrations, including languages generated by large language models or requiring AI assistance for compilation due to extreme obfuscation.[29] A related 2025 study on in-context learning demonstrates how esolangs test AI models' ability to infer novel grammars from minimal documentation, bridging esolangs with machine learning research. Esolangs have also integrated with contemporary technologies, such as WebAssembly-based interpreters that enable browser execution of complex esolang programs without traditional compilers. This facilitates broader accessibility and experimentation, as seen in tools like VSCode extensions compiling esolangs to WebAssembly for interactive development environments.[30] Overall, these developments mark a shift toward esolangs as serious instruments for research and creativity, building on foundational works like Brainfuck while addressing modern computational paradigms.Design Principles
Unusual Data Representations
Esoteric programming languages often eschew conventional data representations such as variables, arrays, or objects in favor of abstract or unconventional models that emphasize simplicity, constraints, or novelty, thereby exploring alternative computational paradigms.[31] These designs typically avoid structured types like integers or strings in the traditional sense, instead employing mechanisms like infinite tapes, multidimensional grids, or mathematical constructs to store and manipulate state.[32] Such representations challenge the linear, addressable memory assumptions of the von Neumann architecture, promoting non-linear or self-modifying storage to highlight theoretical limits of computation.[33] A prominent example is the tape-based memory in Brainfuck, where data is stored in an infinite array of byte cells, each initialized to zero, with a pointer navigating the tape to access and modify values.[31] This model, consisting solely of these cells without named variables or types, enforces a minimalist approach where all computation occurs through pointer movements and cell increments/decrements, simulating a Turing machine's tape directly.[31] Similarly, Befunge utilizes a two-dimensional grid, known as the "funge space," for both code and data storage, where the program executes along paths in this spatial structure, blending instruction and memory in a non-linear fashion.[34] This grid representation allows for multidimensional navigation, deviating from sequential linear memory and enabling spatial data manipulations that reflect the language's intent to complicate compilation.[34] Theoretical extremes further illustrate these deviations, as seen in FRACTRAN, where program state is encoded as a single positive integer whose prime factorization represents multiple registers, and operations involve multiplying by irreducible fractions from a predefined list to update the state.[35] This fractional model transforms arithmetic into a universal computational framework without explicit variables, relying on number theory for data persistence and transition.[35] In Binary Lambda Calculus, data and code are unified through a binary encoding of untyped lambda terms, where all information— including functions and values—is represented as bit sequences that self-reduce via beta-reduction, eliminating distinct data structures in favor of pure functional abstraction.[33] Other designs incorporate domain-specific metaphors for data, such as in Chef, where variables are modeled as recipe ingredients—quantities of solids or liquids—that function as numerical or character values manipulated through cooking operations like mixing or folding, stored on stacks without traditional typing.[36] These approaches, including stacks or queues in place of objects, underscore esolangs' role in prototyping unconventional storage to question and innovate upon standard programming abstractions.[36]Non-Standard Instruction Sets
Esoteric programming languages often employ highly unconventional instruction sets that deviate from the arithmetic, logical, and control flow operations common in mainstream languages. These instructions prioritize minimalism, unusual encoding, or alternative computational paradigms to challenge conventional programming models. For instance, Brainfuck utilizes exactly eight single-character commands to manipulate a tape-based memory:> increments the pointer position, < decrements it, + increments the byte at the pointer, - decrements it, . outputs the byte as a character, , inputs a character into the byte, [ jumps forward to the matching ] if the byte is zero, and ] jumps backward to the matching [ if the byte is nonzero.[37]
Similarly, Whitespace encodes all instructions using only three characters—space, tab, and linefeed (LF)—while ignoring all others, resulting in programs that appear as blank files to standard text editors. Instructions are prefixed by stacks of these characters to denote categories such as stack manipulation (space-prefixed), arithmetic (tab space-prefixed), heap access (tab tab-prefixed), I/O (tab LF-prefixed), and flow control (LF-prefixed), with numbers represented in binary where space denotes 0 and tab denotes 1, terminated by LF.[38]
Control structures in these languages further emphasize non-standard flow. Befunge operates on a two-dimensional grid, where an instruction pointer moves in four directions controlled by arrow commands: > moves right, < left, ^ up, and v down, allowing programs to "jump" across the grid in loops or branches without linear execution.[39] In contrast, Unlambda eschews imperative loops entirely, relying on recursive function application via combinatory logic combinators like s (applies arguments substitutively), k (discards the second argument), and i (identity), enabling Turing-complete computation through nested lambda abstractions without variables or explicit iteration.[40]
Extreme minimalism manifests in Turing-complete languages with as few as one or two instructions. Subleq, a one-instruction set computer (OISC), achieves universality with a single subtract-and-branch operation: given addresses A, B, and C, it subtracts the value at A from B, stores the result in B, and branches to C if the result is less than or equal to zero; zero or negative C values indicate no branch or halt.[41] Theoretical extensions demonstrate Turing-completeness using just subtract and conditional branch-if-negative, simulating all necessary operations through composition.[42]
Innovative approaches reimagine instructions beyond symbols. The Shakespeare Programming Language (SPL) structures programs as Elizabethan-style dramas, where characters represent variables and dialogues encode operations: assignments use phrases like "You are as [adjective] as [noun]" to set values based on noun rankings, outputs via "Speak your mind!" print variables, and control flow through questions like "Is [character] better than [character]?" for comparisons, with plot progression dictating execution.[8] Some esolangs omit explicit I/O instructions altogether, integrating input and output as side effects of core operations, such as memory accesses or function applications that implicitly interact with the environment.[43] These designs operate on abstract data models like tapes or stacks, highlighting how non-standard instructions can achieve computational universality with deliberate constraints.[41]
Obfuscation and Usability Challenges
Esoteric programming languages often incorporate deliberate obfuscation as a core design principle, making both writing and reading code exceptionally difficult to emphasize the boundaries of computational expression. In Malbolge, for instance, the source code undergoes a self-encrypting transformation upon execution, where each instruction mutates based on its position in memory and a "crazy operation" that alters the program's behavior unpredictably, rendering traditional readable programs impossible and requiring extensive computation to generate even basic outputs.[44] This self-modifying mechanism ensures that the code effectively rewrites itself, complicating any attempt to predict or control execution flow.[44] Such obfuscation introduces significant usability challenges, including the near-total absence of debugging tools and the propensity for unintended infinite loops inherent to the language's mechanics. Programmers must rely on manual simulation or brute-force generation of code, as standard debuggers fail due to the non-standard, often self-altering semantics; for example, in languages like JSFuck, which restricts source code to only six characters—[, ], (, ), !, and +—developers face exponential complexity in constructing even simple JavaScript equivalents, with no built-in introspection capabilities.[45] Infinite loops emerge by design in some esolangs, where control structures lack safeguards, forcing users to painstakingly verify every step without automated aids. These hurdles extend to visual esolangs like Piet, where programs are abstract images composed of specific color codels, and crafting a "Hello World" output can take hours or days of pixel-level design to align color transitions with stack-based instructions.[46]
Metrics of obscurity in esolangs are often quantified through code golf variants, where the goal shifts from brevity in practical languages to extreme compression within constrained syntaxes, highlighting the languages' inherent unreadability. In GolfScript, tailored for such challenges, programs consist of lists of items, each of which is pushed onto the stack as it is encountered with the exception of variables which have code blocks as their value, in which case the code is executed. Programs achieving minimal byte counts for tasks like string manipulation underscore how esolangs prioritize puzzle-solving over utility, with successful solutions sometimes requiring thousands of iterations to optimize.[47] These exercises reveal the time-intensive nature of development; for Piet's "Hello World," the image-based format demands artistic and logical precision, often exceeding the effort of text-based equivalents by orders of magnitude.[46]
The trade-offs of these obfuscation strategies starkly contrast with mainstream programming languages, illuminating key software engineering principles such as readability and maintainability. By intentionally subverting intuitive syntax and semantics, esolangs force reflection on how conventional languages afford ease of use, thereby underscoring the value of clear abstraction layers in practical development.[27] This deliberate complexity, while parodic in intent, serves to critique and explore the assumptions embedded in standard language design.[19]
Humor and Parody Elements
Esoteric programming languages often incorporate humor through deliberate parody of conventional programming paradigms and cultural elements, exaggerating flaws or quirks for satirical effect. A seminal example is INTERCAL, created in 1972 by Don Woods and James M. Lyon as a spoof of early languages like COBOL, mocking its verbosity with overly polite and convoluted syntax such as the "PLEASE" keyword required for statements to emphasize courteous yet absurd commands. This parody highlights the rigidity and wordiness of business-oriented languages, turning simple operations into comically elaborate rituals. Other esolangs extend this humor by reimagining code structures in whimsical, non-technical domains. Chef, designed by David Morgan-Mar in 2002, structures programs as cooking recipes, where "ingredients" like "72 g haricot beans" or "chicken stock" represent numerical values, and operations mimic culinary steps such as "put into mixing bowl" for stacking data.[36] Similarly, the Shakespeare Programming Language (SPL), developed by Jon Åslund and Karl Hasselström in 2001, employs Elizabethan drama to encode logic, with variables as characters exchanging insults or compliments—such as "thou art as beautiful as the sum of two good primes"—to perform arithmetic, creating absurd semantics that parody formal language constructs. LOLCODE, invented by Adam Lindsay in 2007, draws from internet meme culture, using lolspeak syntax where programs begin with "HAI" as a greeting and incorporate playful error-like phrases such as "O NOES" for exception handling, infusing even runtime feedback with lighthearted, feline-inspired whimsy.[48] In the realm of cultural satire, JSFuck, introduced in 2012, parodies JavaScript's perceived bloat by restricting code to just six characters—[]()!+—to execute full programs, underscoring how minimalistic constructs can achieve complexity and critiquing the language's expansive, often redundant ecosystem.[49]
These humorous elements play a central role in the esolang community, fostering creativity by encouraging developers to invent joke languages that challenge norms and spark amusement, as seen in ongoing discussions and creations that build on satirical traditions to explore programming boundaries.
Notable Examples
Early and Text-Based Languages
The early esoteric programming languages were predominantly text-based, employing linear syntax to explore extremes of verbosity, minimalism, and unconventional paradigms, often as parodies or theoretical exercises. These languages, emerging from the 1970s to the 1990s, laid the groundwork for the esolang genre by challenging conventional programming norms through deliberate contrarianism.[50] INTERCAL, developed in 1972 by Donald R. Woods and James M. Lyon at Princeton University, stands as one of the earliest examples, created explicitly as a parody to avoid any resemblance to existing languages. Its syntax emphasizes excess, using constructs like "PLEASE" and "DO" for statements, with data types including 16-bit "selectrons" and 32-bit "tailor arrays" that manipulate bits in absurd ways. A hallmark innovation is the compiler's "politeness" protocol, which generates apologetic error messages, such as "Sorry, a small error has occurred which requires your immediate attention," to heighten the humorous frustration. A simple "Hello, World!" program in INTERCAL requires verbose declarations and output via the "READ OUT" statement, as shown below:DO ,1 <- #13
PLEASE NOTE LINE 1 IS A NON-SOURCE LINE
DO ,1 SUB #1 <- #238
DO ,1 SUB #2 <- #108
DO ,1 SUB #3 <- #112
DO ,1 SUB #4 <- #0
DO ,1 SUB #5 <- #64
DO ,1 SUB #1 SUB #1 SUB #1 <- #0
PLEASE READ OUT ,1
PLEASE GIVE UP
DO ,1 <- #13
PLEASE NOTE LINE 1 IS A NON-SOURCE LINE
DO ,1 SUB #1 <- #238
DO ,1 SUB #2 <- #108
DO ,1 SUB #3 <- #112
DO ,1 SUB #4 <- #0
DO ,1 SUB #5 <- #64
DO ,1 SUB #1 SUB #1 SUB #1 <- #0
PLEASE READ OUT ,1
PLEASE GIVE UP
` for application and .x to output character x. An innovation lies in its reduction to SKI combinators, enabling Turing-complete computation via pure functions, eschewing imperative elements. A "Hello, World!" program exemplifies this terseness, though it requires a more complex structure involving loops:
``s``sii`ki
``s``s`ks
``s``s`ks``s`k`s`kr
``s`k`si``s`k`s`k
`d````````````.H.e.l.l.o.,. .w.o.r.l.d.!
k
k
`k``s``s`ksk`k.*
``s``sii`ki
``s``s`ks
``s``s`ks``s`k`s`kr
``s`k`si``s`k`s`k
`d````````````.H.e.l.l.o.,. .w.o.r.l.d.!
k
k
`k``s``s`ksk`k.*
[ and ] that jump based on zero/non-zero values, while +, -, >, < modify cells and position, and . and , handle output/input. This sparse instruction set innovates by demonstrating Turing completeness with extreme economy, influencing subsequent minimal esolangs. A canonical "Hello, World!" leverages cell increments to build ASCII values:
++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.
++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.
Visual and Domain-Specific Languages
Visual esoteric programming languages extend the paradigm beyond linear text by incorporating graphical or spatial elements into code representation and execution. Befunge, invented by Chris Pressey in 1993, operates on a two-dimensional grid where an instruction pointer navigates freely in four directions, allowing programs to branch and loop non-linearly based on the grid's layout.[39] This design challenges traditional one-dimensional flow, as commands like arrows direct the pointer's movement, while operators perform stack-based computations.[52] Piet, created by David Morgan-Mar in 2001, takes this further by using bitmap images as source code, where each pixel's color encodes instructions from a palette of 18 hues arranged in a color wheel to determine operations like push, add, or toggle direction.[53][54] The pointer moves block-by-block across "codels" (colored pixels), with white and black serving as non-instruction spaces, effectively turning abstract art into executable programs.[54] Domain-specific esoteric languages retheme syntax around narrative or conceptual metaphors, diverging from conventional programming constructs. The Shakespeare Programming Language (SPL), developed by Jon Åslund and Karl Hasselström in 2001, structures code as a theatrical play, with characters representing variables whose values are manipulated through dramatic dialogue—such as insults to subtract or compliments to add based on adjective counts.[8] Flow control is handled via acts and scenes, where entering a new act resets the stack and scene transitions manage loops and conditionals, evoking Elizabethan prose while performing computations. Similarly, Chef, designed by David Morgan-Mar in 2002, formats programs as culinary recipes, where ingredients with quantities initialize variables on a stack, and the "method" section's imperative steps—like "Take" for pushing values or "Fold" for addition—process data through cooking analogies.[36] Outputs often manifest as "tastiness" metrics, blending gastronomic whimsy with Turing-complete functionality.[55] These languages uniquely blur the boundaries between code and artistic or thematic expression, prompting programmers to prioritize aesthetics or narrative over readability. In visual paradigms like Piet, the reliance on image editors for coding subverts keyboard-based input, fostering creativity in pixel art that doubles as logic.[53] Domain-specific designs in SPL and Chef challenge usability by embedding instructions in metaphors, yet demonstrate how esoteric constructs can model computation in unconventional domains. Extending this to interactive environments, Minecraft's redstone system, introduced in version 1.0 in 2011, enables Turing-complete machines through circuit-based Turing machine implementations using pistons, repeaters, and torches for state transitions and tape simulation.[56] This gamified approach in the 2010s has inspired esoteric explorations, treating voxel-based builds as programmable media.[57]Minimalist and Theoretical Languages
Minimalist esoteric languages emphasize extreme reduction in syntax or character sets, often to challenge conventional programming paradigms while demonstrating Turing completeness through clever encodings. JSFuck, developed by Martin Kleppe in 2012, restricts source code to just six characters—brackets[], parentheses (), exclamation mark !, and plus +—to express any valid JavaScript functionality.[49][58] As a subset of JavaScript, which is Turing complete, JSFuck inherits this property by constructing primitive values like booleans, numbers, and functions from atomic operations such as array indexing and logical NOT.[49] A "Hello, World!" program in JSFuck exceeds 1,000 characters due to the verbose encodings required for string output, highlighting the trade-off between minimalism and practicality.[59]
Another prominent minimalist example is Whitespace, created in 2002 by Edwin Brady and Chris Morris at the University of Durham. This imperative, stack-based language employs only three invisible whitespace characters—space, tab, and linefeed—for instructions, treating all other characters as comments and thus ignorable. Commands are encoded via sequences of these characters: space for stack manipulation, tab for arithmetic or heap access, and linefeed for flow control like jumps and I/O.[38] Its Turing completeness is established through a stack model supporting arbitrary computation, including conditional branching and loops.[38] The shortest known "Hello, World!" implementation spans about 1,200 whitespace characters, producing visible output only after interpretation.[38]
Theoretical esoteric languages explore abstract mathematical foundations for computation, often abstracting away traditional syntax to focus on pure models. FRACTRAN, invented by mathematician John Horton Conway in 1987, operates on lists of positive rational fractions applied iteratively to an initial positive integer state.[60] Execution multiplies the current integer by the first fraction whose numerator divides it evenly, repeating until no fraction applies; output is the final integer or sequence of remainders.[60] Conway proved its Turing completeness by simulating Minsky register machines, where fractions encode register increments, decrements, and zero-tests via modular arithmetic on prime factorizations.[60] A seminal example generates prime numbers, starting from 2 and producing the sequence through fraction applications that filter composites.[60]
Binary lambda calculus, introduced by John Tromp in 2004, encodes untyped lambda calculus terms directly as binary strings without higher-level abstractions like variables or pointers.[61] It uses de Bruijn indices for variable binding and a prefix notation where 00 denotes application, 01 abstraction, and variable indices follow in binary; terms are self-delimiting via length encoding.[61] As a faithful binary representation of lambda calculus, which Church proved equivalent to Turing machines in the 1930s, it is Turing complete and supports pure functional computation in bits alone.[61] The smallest self-interpreter fits in under 200 bits, underscoring its compactness for theoretical explorations of minimal computation.[61]
In the 2020s, the esoteric programming community on esolangs.org has introduced new minimalist languages probing boundaries like quantum-inspired models and AI-generated designs. For instance, MiniPig (2020) is a stack-based language with only one literal (1) and one operation (subtraction), exploring ultra-reduced instruction sets through iterated accumulation and looping, though its Turing completeness remains unconfirmed.[62] Other developments include AI-assisted esolangs, where machine learning generates syntax or proofs of completeness, and quantum-themed ones like extensions of QASM subsets that simulate qubit operations with minimal gates, pushing theoretical limits on non-classical computation.[63][64] As of November 2025, recent examples include languages like "Neuralang" (2024), an AI-generated esolang for neural network simulations, and "QubitScript" (2023), a minimalist quantum circuit language.[65][66][67]
