Esoteric programming language: Difference between revisions

Content deleted Content added
Added more information regarding redstone
 
(285 intermediate revisions by more than 100 users not shown)
Line 1:
{{Short description|Experimental or artistic programming language}}
{{technical|date=October 2017}}
An '''esoteric programming language''' (sometimes shortened to '''esolang''') or '''weird language'''{{r|":2"|page=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 ''[[wiktionary:esoteric|esoteric]]'' distinguishes these languagesthem from programming languages that working developers use to write software. Usually,The ancreators esolang'sof creatorsmost esolangs do not intend the languagethem to be used for mainstream programming, although some esoteric features, such as [[visuospatial]]live [[syntaxData (programmingand languages)information visualization|syntaxvisualization]] of code,<ref>{{cite conference |last1=McLean, |first1=A., |last2=Griffiths, |first2=D., |last3=Collins, |first3=N., and |last4=Wiggins, |first4=G. (|date=2010). "|title=Visualisation of Live Code". In ''|conference=Electronic Visualisation and the Arts'', 2010 |___location=London: 2010|url=https://www.researchgate.net/publication/228575469}}</ref> have inspired practical applications in the arts. Such languages are often popular among [[Hacker (hobbyist)culture|hackers]] and hobbyists.{{Citation needed|date=July 2021}}
 
Usability is rarely a goal for designers of esoteric programming languagelanguages; designers—oftenoften ittheir isdesign leads to quite the opposite. Their usual aim is to remove or replace conventional language features while still maintaining a language that is [[Turing completeness|Turing-complete]], or even one for which the [[Computability theory (computer science)|computational class]] is unknown.
 
==History==
[[File:Hello World INTERCAL.png|thumb|"[["Hello, World!" program|Hello World!]]" program in INTERCAL]]
The earliest, and still the canonical example of an esoteric language was [[INTERCAL]],<ref>Matthew Fuller, [https://mitpress.mit.edu/books/software-studies Software Studies], MIT Press, 2008</ref> designed in 1972 by [[Don Woods (programmer)|Don Woods]] and James M. Lyon, with the stated intention of being unlike any other programming language the authors were familiar with.<ref name="Raymond1996">{{cite book|author=Eric S. Raymond|title=The New Hacker's Dictionary|url=https://books.google.com/books?id=g80P_4v4QbIC&pg=PA258|year=1996|publisher=MIT Press|isbn=978-0-262-68092-9|page=258}}</ref><ref name="woods-lyon-intercal">{{citation|url=http://www.muppetlabs.com/~breadbox/intercal/intercal.txt |last1=Woods |first1=Donald R. |last2=Lyon |first2=James M. |year=1973 |title=The INTERCAL Programming Language Reference Manual |accessdate=2009-04-24 |publisher=Muppetlabs.com |archiveurl=https://www.webcitation.org/5gGhTDeaV?url=http://www.muppetlabs.com/~breadbox/intercal/intercal.txt |archivedate=2009-04-24 |deadurl=yes |df= }}</ref> It [[parody|parodied]] elements of established programming languages of the day, such as [[Fortran]], [[COBOL]], and [[assembly language]].
The earliest, and still the canonical example of an esoteric programming language, is [[INTERCAL]],<ref name="software-studies">{{Cite book |first=Matthew |last=Fuller |title=Software studies: a lexicon |date=2008 |publisher=MIT Press |isbn=978-0-262-06274-9 |oclc=1156851190 |url=https://mitpress.mit.edu/9780262062749/software-studies/}}</ref> designed in 1972 by [[Don Woods (programmer)|Don Woods]] and James M. Lyon, who said that their intention was to create a programming language unlike any with which they were familiar,<ref name="Raymond1996">{{cite book|author=Eric S. Raymond|title=The New Hacker's Dictionary|url=https://books.google.com/books?id=g80P_4v4QbIC&pg=PA258|year=1996|publisher=MIT Press|isbn=978-0-262-68092-9|page=258}}</ref> namely [[FORTRAN]], [[BASIC]], [[COBOL]], [[ALGOL]], [[SNOBOL]], [[SPITBOL]], [[FOCAL (programming language)|FOCAL]], SOLVE, TEACH, [[APL (programming language)|APL]], [[LISP]], and [[PL/I]].<ref name="woods-lyon-intercal">{{citation|url=https://muppetlabs.com/~breadbox/intercal/intercal.txt |last1=Woods |first1=Donald R. |last2=Lyon |first2=James M. |year=1973 |title=The INTERCAL Programming Language Reference Manual |access-date=2023-05-01 |publisher=Muppetlabs.com}}</ref> It [[parody|parodied]] elements of established programming languages of the day.{{r|":2"|page=5}}
 
For many years, INTERCAL was represented only by paper copies of the INTERCAL manual. The language'sIts revival in 1990 as an implementation in [[C (programming language)|C]]{{r|":2"|page=6}} under [[Unix]] stimulated a wave of interest in the intentional design of esoteric computer languages.
 
{{anchor|FALSE}}
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. It also has a compiler of only 1024 bytes.<ref name="Wouter">{{cite web | title= Interview with Wouter van Oortmerssen | journal = esoteric.codes | url = http://esoteric.codes/post/122942498363/interview-with-wouter-van-oortmerssen | date = 1 July 2015 | accessdate = 1 December 2015}}</ref> 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. These are canonical examples of minimal [[Turing tarpit]]s and needlessly obfuscated language features. Brainfuck is related to the [[P′′]] family of [[Turing machine]]s.
 
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.<ref name="Wouter">{{cite journal |title=Interview with Wouter van Oortmerssen |journal=Esoteric.codes |url=https://esoteric.codes/blog/interview-with-wouter-van-oortmerssen |date=1 July 2015 |access-date=1 May 2023}}</ref> 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 tarpit]]s and needlessly obfuscated language features. Brainfuck is related to the [[P′′]] family of [[Turing machine]]s.
==Esoteric programming terms==
===Turing tarpit===
{{Main article|Turing tarpit}}
 
== Common features ==
A [[Turing tarpit]] is a [[Turing-complete]] programming language in which any computable function could theoretically be written, but in which it is impractically difficult to do so. Esoteric languages may be described as Turing tarpits, especially when they aim to minimize the number of language features.
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.<ref name="software-studies" /> 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 language]]s.
 
=== Unique data representations ===
===Stateful encoding===
Conventional [[Imperative programming|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 (computer programming)|pointer]], which must be moved to a ___location of interest before data is read. Others, like [[Befunge]] and [[Shakespeare Programming Language|Shakespeare]], utilize one or more [[Stack (abstract data type)|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 numeral system|ternary]] system.<ref name=":1">{{cite book |last=Morr |first=Sebastian |title=Esoteric Programming Languages |date=2015 |url=https://blinry.org/esolangs/esolangs.pdf |s2cid=160025019}}</ref>
A method of encoding programs, such that each substring of the encoding is an instruction to both:
#Locate the next instruction in a list, and
#Apply it to transform the current program state.
 
=== Unique instruction representations ===
A single instruction always includes two sequential phases: choosing an operation, and executing it. The list of operations may either be static—as in [http://esolangs.org/wiki/ReMorse reMorse] or [http://esolangs.org/wiki/THRAT THRAT]—or dynamic—as in reMorse4ever.
Esoteric languages also showcase unique ways of representing program instructions. Some languages, such as [[Befunge]] and [[#Piet|Piet]], represent programs in two or more dimensions, with program control moving around in multiple possible directions through the program.{{sfn|Cox|2013}}{{page needed|date=June 2022}} 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 Programming Language|Shakespeare]] achieves this by making all programs resemble Shakespearian plays. [[Chef programming language|Chef]] achieves the same by having all programs be recipes.<ref name=":1" /> 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.<ref>{{Cite web |last=Mike |date=2013-03-31 |title=Baking a Hello World Cake |url=https://www.mike-worth.com/2013/03/31/baking-a-hello-world-cake/ |access-date=2023-05-01 |website=Products of Mike's Mind |archive-url=https://web.archive.org/web/20230501044254/https://www.mike-worth.com/2013/03/31/baking-a-hello-world-cake/ |archive-date=2023-05-01 |url-status=dead}}</ref>
 
=== Difficulty to read and write ===
Here is an example based on reMorse or THRAT:
Many esoteric programming languages are designed to produce code that is deeply [[Obfuscation (software)|obfuscated]], making it difficult to read and to write.<ref name=":2">{{cite conference |last1=Mateas |first1=M. |last2=Montfort |first2=N. |title=A Box, Darkly: Obfuscation, Weird Languages, and Code Aesthetics. |conference=Digital Arts and Culture: Digital Experience: Design, Aesthetics, Practice (DAC 2005) |___location=Copenhagen, Denmark |date=2005 |url=https://nickm.com/cis/a_box_darkly.pdf}}</ref> 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.<ref name=":2" /> 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.<ref name=":2" />
Select Next Operation in list
Perform Operation
 
===Language paradigmParody and spoof ===
One of the aims of esoteric programming languages is to parody or spoof existing languages and trends in the field of programming.<ref name=":2" /> For instance, the first esoteric language INTERCAL began as a spoof of languages used in the 1960s, such as [[APL (programming language)|APL]], [[Fortran]], and [[COBOL]]. INTERCAL's rules appear to be the inverse of rules in these other languages.<ref>{{cite book |last=Gaboury |first=Jacob |chapter=Critical Unmaking: Toward a Queer Computation |date=2018 |doi=10.4324/9781315730479-50 |editor=Jentery Sayers |title=The Routledge Companion to Media Studies and Digital Humanities |pages=483–491 |___location=New York |publisher=Routledge |isbn=978-1-315-73047-9}}</ref> However, the subject of parody is not always another established programming language. [[Shakespeare 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?"<ref name=":1" />
The [[Programming paradigm|paradigm of a language]] can fall into a number of categories, and these categories are used to get a general understanding of the way that a specific language operates. These include imperative languages such as [[brainfuck]], in which instructions describe how to change data; functional languages such as [[Unlambda programming language|Unlambda]], in which data and code are more or less interchangeable and execution is the repeated application of functions to the results of other functions; and rewriting languages such as [[Thue (programming language)|Thue]], in which transformation functions are applied to an initial state.
 
=== FungesExamples ===
<!-- Please do ''not'' add the language you just created to this list. Add it to the Esoteric Wiki, https://esolangs.org, instead. Wikipedia is not a place to put whatever language you just invented, and Esolangs is. -->
A '''funge''' is an esoteric programming language which models its programs as [[metric space]]s with [[coordinate systems]] (often, but not necessarily, [[Cartesian coordinate system|Cartesian]]) and which execute instructions located at points in their program space by moving an instruction pointer (a [[position vector]] which indicates the currently executing instruction) through that space. Different instructions determine the direction in which the instruction pointer moves, and consequently, the sequence of instructions that is executed.
{{See also|List of programming languages by type#Esoteric languages}}
 
=== Befunge ===
The current official standard for the behaviour of these programming languages is the Funge-98 specification. This specification is a generalisation of the semantics of the [[Befunge]] programming language, which has a two-[[dimension]]al [[torus|toroidal]] topology. Languages which adhere closely to this standard, such as Unefunge (one-dimensional) and Trefunge (three-dimensional), are sometimes called ''funges'', while more "distant relatives" which differ in significant respects, such as {{Not typo|Wierd}}, are referred to as ''fungeoids''.
[[Befunge]] allows the instruction pointer to roam in multiple dimensions through the code. For example, the following program displays [["Hello, World!" program|"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 {{code|>|befunge}}, {{code|:|befunge}}, {{code|v|befunge}}, {{code|_|befunge}}, {{code|,|befunge}}, and {{code|^|befunge}}.
 
{{Syntax highlight|
=== One instruction set computer ===
"dlroW olleH">:v
A [[one instruction set computer]] is a machine which supports only one operation.
^,_@
|befunge}}
 
There are many versions of Befunge, the most common being Befunge-93, named as such because of its release year.<ref>{{Cite web|url=https://catseye.tc/article/Languages.md|title=Languages|website=Cat's Eye Technologies}}</ref>
===Nondeterministic language===
For a deterministic language, if one is given the current state of a program, the next state can always be predicted. This is not true for a [[Nondeterministic programming|nondeterministic language]]. Most languages are deterministic, but some languages, such as Befunge, supply a built-in randomization instruction. Moreover, languages such as [http://p-nand-q.com/programming/languages/java2k/ Java2k] have only randomized instructions. Thus, getting even trivial programs to have a reliable output is often a monumental, if not outright impossible, task.
 
Nondeterministic languages can be used to explore large search spaces, such as grammars, where exhaustive search is impractical. Random text generators such as [http://dev.null.org/dadaengine/ the Dada Engine] and [http://sourceforge.net/projects/rmutt/ rmutt] are examples of this kind of nondeterminstic language.
 
More esoterically, nondeterministic algorithms have been employed in the theoretical investigation of [[hypercomputation]].
 
==Examples==
Below are some characteristic examples of esoteric programming languages:
=== Arnoldc ===
Arnoldc is an esoteric programming language based on one-liners of [[Arnold Schwarzenegger]]. Following is the "Hello, World!" programmed in arnoldc:<syntaxhighlight>
IT'S SHOWTIME
TALK TO THE HAND "Hello, World!"
YOU HAVE BEEN TERMINATED
</syntaxhighlight>
 
=== AsciiDots ===
AsciiDots is an esoteric programming language based on ascii art. In this language, ''dots'', represented by periods (<code>.</code>), travel down ascii art paths and undergo operations. Here is an example of a code-golf counter:<syntaxhighlight>
/#$<.
*-[+]
\#1/
</syntaxhighlight>
 
=== Befunge ===
[[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 [^].
<syntaxhighlight lang="befunge">
"dlroW olleH">:v
^,_@
</syntaxhighlight>
 
=== Binary lambda calculus ===
[[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.<ref>{{cite web |author=John Tromp |title=Most functional |url=https://www.ioccc.org/2012/tromp/index.html |publisher=The International Obfuscated C Code Contest |archive-url=https://web.archive.org/web/20250117050155/https://www.ioccc.org/2012/tromp/index.html |archive-date=2025-01-17 |url-status=live}}</ref>
 
=== Brainfuck ===
[[Brainfuck]] is designed for extreme minimalism and leads to obfuscated code, with programs containing only eight distinct characters. The following program outputs "Hello, Worldworld!":<ref>{{Cite web |title=El Brainfuck|url=https://copy.sh/brainfuck/?c=KysrKysrKysrK1s-KysrKysrKz4rKysrKysrKysrPisrKzw8PC1dPisrLj4rLisrKysrKysKIC4uKysrLj4rKy48PCsrKysrKysrKysrKysrKy4-LisrKy4tLS0tLS0uLS0tLS0tLS0uPisu |access-date=2022-11-30 |website=copy.sh}}</ref>
<syntaxhighlight lang="bf">
++++++++++[>+++++++>++++++++++>+++<<<-]>++.>+.+++++++
..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.
</syntaxhighlight>
 
All characters other than {{code|lang=bf|+-<>,.[]}} are ignored.
 
=== Chef ===
Chef by [[David Morgan-Mar]] is a [[stack-oriented programming language]] created by [[David Morgan-Mar]], designed to make programs look like [[Recipe|cooking recipes]].<ref>{{cite book|last=Cozens|first=Simon|title=Advanced Perl programming|year=2005|publisher=O'Reilly Media|isbn=978-0-596-00456-9|page=269|quote=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: ...}}</ref> Programs consist of a title, a list of variables and their data values, and a list of stack manipulation instructions.<ref name="chef">{{cite web|url=httphttps://www.dangermouse.net/esoteric/chef.html|title=Chef|work=DM's Esoteric Programming Languages|first=David|last=Morgan-Mar|publisher=Self-published|date=2011-03-24|accessdateaccess-date=20142023-0605-2801}}</ref> 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|Hello, World!" program]] with "101 eggs" and "{{cups|111 cups|US}} oil" would produce "a lot of food for one person.".<ref name="chef"/><ref>{{cite web|url=httphttps://www.dangermouse.net/esoteric/chef_hello.html|title=Chef Sample Program:- Hello World Souffle|work=DM's Esoteric Programming Languages|first=David|last=Morgan-Mar|publisher=Self-published|date=2014-06-28|accessdateaccess-date=20142023-0605-2801}}</ref>
 
=== FALSE ===
FALSE is a [[stack-based language]] with single-character commands and variables.<ref>{{cite web |url=http://strlen.com/false/ |title=The FALSE Programming Language |last1=van Oortmerssen |first1=Wouter |publisher=Self-published |access-date=11 February 2016}}</ref> For example, 3 + 1 can be calculated by evaluating (λ x → x + 1)(3):
3[1+]!
 
=== FiM++ ===
FiM++ is an [[Object-oriented programming|object-oriented programming language]] based on the [[My Little Pony: Friendship Is Magic|My Little Pony]] television show.<ref>{{Cite web|url=https://www.equestriadaily.com/2012/10/editorial-fim-pony-programming-language.html|title=Editorial: FiM++, A Pony Programming Language|last=Sethisto|website=www.equestriadaily.com|access-date=2018-01-07}}</ref> FiM++ programs read like plain English, in the style of the show's 'friendship reports'. The following program prints "Hello World!"<syntaxhighlight>
Dear Princess Celestia: Hello World!
 
Today I learned how to say Hello World!
I said "Hello World!".
That's all about how to say Hello World.
 
Your faithful student, Twilight Sparkle.
</syntaxhighlight>
 
=== FRACTRAN ===
A [[FRACTRAN]] program is an ordered list of positive fractions together with an initial positive integer input ''<math>n''</math>. The program is run by multiplying the integer ''<math>n''</math> by the first fraction ''<math>f''</math> in the list for which ''<math>nf''</math> is an integer. The integer ''<math>n''</math> is then replaced by ''<math>nf''</math> and the rule is repeated. If no fraction in the list produces an integer when multiplied by ''<math>n'' then</math>, the program halts. FRACTRAN was invented by mathematician [[John Horton Conway|John Conway]].<ref>{{cite book |last1=Kneusel |first1=Ronald |title=Strange Code: Esoteric Languages That Make Programming Fun Again |date=2022 |publisher=No Starch Press |isbn=978-1718502406 |page=217 |ref=kneusel-strange-code-fractran}}</ref>
 
=== .Gertrude ===
.Gertrude<ref>https://esolangs.org/wiki/.Gertrude</ref> is named after [[Gertrude Stein]], and was designed (by [[Gerson Kurz]]) to enable programs to vaguely resemble her poetry.
 
=== GolfScript ===
Programs in [[GolfScript]] consist of lists of items, each of which is pushed onto the [[Stack (abstract data type)|stack]] as it is encountered with the exception of variables which have code blocks as their value, in which case the code is executed.
 
=== Grass ===
Grass is a functional programming language that only uses the characters "W", "w", and "v". Thus, programs in Grass are said to look like [[ASCII art]] of grass. Grass has the formal specification which is based on [[untyped lambda calculus]] and the [[SECD machine]].<ref>http://www.blue.sky.or.jp/grass/</ref> Grass should not be confused with [[GRASS_(programming_language)|GRASS]], a different programming language.
 
=== INTERCAL ===
Line 113 ⟶ 65:
 
=== JSFuck ===
[[JSFuck]] is an esoteric programming style of [[JavaScript]], where code is written using only six characters: <code>[</code>, <code>]</code>, <code>(</code>, <code>)</code>, <code>!</code>, and <code>+</code>.
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.<ref>{{Cite web|url=https://thedailywtf.com/articles/bidding-on-security|title=Bidding on Security|last=Bailey|first=Jane|date=2016-02-29|website=The Daily WTF|language=en|access-date=2020-03-02}}</ref><ref>{{Cite web|url=https://alligator.io/js/exploring-jsfck/|title=Exploring JSF*ck|website=alligator.io|language=en|access-date=2020-03-02|archive-url=https://web.archive.org/web/20200302154212/https://alligator.io/js/exploring-jsfck/|archive-date=2020-03-02|url-status=dead}}</ref> 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.<ref name="ArsTechnica 2016 eBay">{{cite web|url=https://arstechnica.com/security/2016/02/ebay-has-no-plans-to-fix-severe-bug-that-allows-malware-distribution/|title=eBay has no plans to fix "severe" bug that allows malware distribution [Updated]|work=Ars Technica|author=Dan Goodin|date=3 February 2016}}</ref>
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.<ref>[[JSFuck]]</ref>{{Better source|reason=per WP:CIRCULAR|date=December 2017}}
 
=== La Weá ===
La Weá<ref>https://github.com/pelirodri/LaWea</ref> is a programming language created by Rodrigo Pelissier and released on September 18, 2018. It has 16 commands and it consists entirely of highly colloquial terms in Chilean Spanish.
 
=== LOLCODE ===
[[LOLCODE]] is designed to resemble the speech of [[lolcat]]s. The following is the "helloHello worldWorld" example:
<pre>
HAI
Line 128 ⟶ 77:
</pre>
 
While the [[Semantics (computer science)|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.<ref>{{Cite journal |last1=Zabenkov |first1=A.A. |last2=Morel Morel |first2=D.A. |date=2014 |title=Esoteric programming languages as a state-of-the-art semiotic trend |journal=Experientia Est Optima Magistra: Collected Arts |volume=3 |publisher=Belgorod State University |url=http://dspace.bsu.edu.ru/handle/123456789/9169 |page=170}}</ref>
LOLCODE is frequently criticized for not being very esoteric, but rather being an ordinary procedural language utilizing an unusual vocabulary.<ref>{{cite web|url=http://esolangs.org/wiki/LOLCODE#Criticism|title=LOLCODE#Criticism|website=Esolangs.org|accessdate=30 November 2015|quote=LOLCODE is often criticized for not being Esoteric enough. By design, LOLCODE is actually a normal procedural language behind its lulzy syntax. This is a stark contrast from "True" Esolangs like Befunge, which features a two-dimensional, almost game board-like syntax. For this reason, LOLCODE is technically categorized as a Weirdlang.}}</ref>
 
=== Malbolge ===
[[Malbolge]] (named after the [[Malebolge|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.<ref>{{Cite web|title = Interview with Ben Olmstead|url = https://esoteric.codes/blog/interview-with-ben-olmstead|last = Temkin|first = Daniel|date = 2014-11-03|website = esoteric.codes|accessdate = 2021-01-07}}</ref>
 
=== ModiScriptMinecraft ===
[[Minecraft]] is a [[sandbox game]] developed by Mojang Studios, which contains Redstone, a material used to make circuit-like machines for logical processing.<ref>{{Cite web |title=8-Bit Computer (Turing Complete) - Redstone Creations - Redstone Discussion and Mechanisms - Minecraft: Java Edition - Minecraft Forum - Minecraft Forum |url=https://www.minecraftforum.net/forums/minecraft-java-edition/redstone-discussion-and/redstone-creations/3043582-8-bit-computer-turing-complete |access-date=2025-06-08 |website=www.minecraftforum.net}}</ref> Redstone is turing-complete, and can be considered a three-dimensional esolang.
[https://github.com/VPanjeta/ModiScript/ ModiScript]<ref>{{Cite web|url=https://github.com/VPanjeta/ModiScript|title=VPanjeta/ModiScript|website=GitHub|language=en|access-date=2018-04-18}}</ref> is an esoteric programming language that entirely consists of quotes from Indian Prime Minister [[Narendra Modi]]'s speeches. The language follows many of his ideologies such as the "No import rule', in which importation of code is not allowed, consistent with his "[[Make in India]]" campaign.
The following code prints "Mandir Wahin Banayenge":
<syntaxhighlight start="0">
mitrooon
UP "BJP governed state hai"
SP "opposition me hai"
agar ye sach hai
bhaiyo aur behno "Mandir wahin banayenge"
nahi toh
bhaiyo aur behno "Abhi decision nahi liya gaya hai"
achhe din aa gaye
</syntaxhighlight>
 
=== Piet ===
[[ImageFile:Piet Program.gif|thumb|Piet program that prints 'Piet']]
[[ImageFile:Piet Program Hello World(1).gif|thumb|A "Hello World" program in Piet]]
'''Piet''' is a language designed by [[David Morgan-Mar]], whose programs are [[bitmap]]s that look like [[abstract art]].<ref name=":0">
{{cite web
| title = Piet programming language
| url = httphttps://www.dangermouse.net/esoteric/piet.html
| last = Morgan-Mar
| first = David
| date = 25 January 2008
| accessdateaccess-date = 181 May 20132023}}
</ref> The compilationexecution is guided by a "pointer" that moves around the image, from one continuous coloured region to the next. Procedures are carried throughout 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.<ref name=":0" />{{Primary source inline|date=April 2022}}
 
Variables are stored in memory as signed integers in a single [[Stack (abstract data type)|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.<ref>{{cite book |last1=Kneusel |first1=Ronald |title=Strange Code: Esoteric Languages That Make Programming Fun Again |date=2022 |publisher=No Starch Press |isbn=978-1718502406 |pages=246–247 |ref=kneusel-strange-code-piet}}</ref>
 
Piet was named after the Dutch painter [[Piet Mondrian]].<ref name="Cox2013">{{harvnb|Cox|2013|p=6}}</ref> The originallyoriginal intended name, ''Mondrian'', was already taken by [[Mondrian (software)|an open-source statistical data-visualization system]].<ref name=":0" />
 
===Pikachu===
Pikachu is an esoteric programming language developed by Nilabhro Datta, whose programs look like the dialect of [[Pikachu]]s. Its stated purpose is to be easily usable by Pikachus. Programs written in the language should be readable and writable by any Pikachu.<ref name=":0">{{Cite web|url=http://www.trove42.com/introducing-pikachu-programming-language/|title=Introducing The Pikachu Programming Language – A Programming Language Made For Pikachus|last=|first=|date=|website=|archive-url=|archive-date=|dead-url=|access-date=}}</ref> To this end, Pikachu makes use of only 3 valid syntax elements - pi, pika and pikachu.<ref>{{Cite news|url=http://trove42.com/pikachu-syntax-rules/|title=Pikachu Programming Language - Syntax Rules|date=2017-08-21|work=Trove 42|access-date=2017-08-22|language=en-US}}</ref><ref name=":0" />
 
=== Rockstar ===
[https://github.com/dylanbeattie/rockstar Rockstar] is designed for creating computer programs that are also song lyrics, and is heavily influenced by the lyrical conventions of 1980s hard rock and power ballads. It is dynamically typed and Turing-Complete.
 
In the following example the line of code multiplies the value of ''your heart'' by ''the whole'' and stores it in ''my hands''.
 
* "your heart", "the whole" and "my hand" are variables.
* '''of''' is used for multiplication and is an alias of ''times''
* '''Put/into''' combination is used for assignment
 
<syntaxhighlight>
Put the whole of your heart into my hands
</syntaxhighlight>
 
=== Shakespeare ===
[[Shakespeare (programmingProgramming language)|ShakespeareLanguage]] (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|date=April 2022}}
 
[[Hamlet#Act I|Act I: Hamlet's insults and flattery.]]
 
=== Unlambda ===
[[Unlambda]] is a minimalist functional programming language based on [[SKI calculus]], but combined with first-class [[continuation]]s and imperative I/O (with input usually requiring the use of continuations).<ref>{{Cite web|work=Good Math, Bad Math (blog)|first=Mark C.|last=Chu-Carroll|date=2006-08-11|title=Friday Pathological Programming: Unlambda, or Programming Without Variables|url=http://scienceblogs.com/goodmath/2006/08/11/friday-pathological-programmin-3/|publisher=ScienceBlogs}}</ref>
[[Unlambda]] is a minimalist functional programming language. Most programs consist solely of the characters s, k, and `.
 
=== Whitespace ===
[[File:Whitespace in vim2.png|right|206px|thumb|Whitespace [[hello world program]] with syntax highlighting {{legend|#0000ab|tabs}} {{legend|#ab0000|spaces}}]]
[[Whitespace (programming language)|Whitespace]] uses only whitespace characters (space, tab, and return), ignoring all other characters. 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.
[[Whitespace (programming language)|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|date=April 2022}}
 
== FictionalCultural Examplescontext ==
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",<ref>{{harvnb|Cox|2013|page=5}}</ref> seeing esolangs as similar to code art and code poetry, such as [[Mez Breeze]]'s [[mezangelle]], a belief shared by others in field.<ref>{{Cite web |title=The true meaning of esoteric programming languages |url=https://www.apifonica.com/en/blog/esoteric-programming-languages/ |access-date=2023-11-30 |website=Apifonica |language=en}}</ref> 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''.<ref>{{cite journal|last=Temkin|first=Daniel|title=The Less Humble Programmer|journal=DHQ: Digital Humanities Quarterly|date=2023|volume=17|number=2|url=https://www.digitalhumanities.org/dhq/vol/17/2/000698/000698.html}}</ref>
 
=== ~ath ===
~ath is an esoteric programming language used by the Earthlings and Alternians in the webcomic [[Homestuck]]. The name when spoken is "[[tilde]] ath", a pun on "til death." It is known to be insufferable to work with, despite its relative simplistic syntax. The language can only compile when using infinite loops. In the context of the story, it has the capability to import and change objects from a wide library, like the author and the universe itself. This wide range, combined with the inability to interact with anything that has a short lifespan, leads to files being tied to long-term events, such as the deaths of characters and the universe. ~ath is also sensitive to the color that the text is written in, and accepts unusual characters. One ~ath program shown in the story uses a command called bifurcate to split the program into red text and blue text. Another ~ath program contains a character that appears as an animated flickering [[billiard ball]].
 
~ATH(THIS) {
// ADDITIONAL GRAVES...
} EXECUTE(NULL);
THIS.DIE();
The ~ath code above is the simplest in the language, and any code deviating from the pattern does not compile.
 
== Cultural context of esolangs ==
The cultural context of esolangs has been studied by people like Geoff Cox, who writes that esolangs "shift attention from command and control toward cultural expression and refusal",<ref>{{harvnb|Cox|2013|page=5}}</ref> seeing esolangs as similar to code art and code poetry, such as [[Mez Breeze]]'s mezangelle. Daniel Temkin describes brainfuck as "refusing to ease the boundary between human expression and assembly code and thereby taking us on a ludicrous journey of logic,"<ref>{{cite journal|last=Temkin|first=Daniel|title=Glitch && Human/Computer Interaction|journal=NOOART: The Journal of Objectless Art|date=15 January 2014|issue=1|url=http://nooart.org/post/73353953758/temkin-glitchhumancomputerinteraction}}</ref> exposing the inherent conflict between human thinking and computer logic. He connects programming within an esolang to performing an event score such as those of the [[Fluxus]] movement, where playing out the rules of the logic in code makes the point of view of the language clear.<ref>{{cite journal|last=Temkin|first=Daniel|title=brainfuck|url=http://median.s151960.gridserver.com/?page_id=947|journal=Media-N Journal|issue=Spring 2013|accessdate=2014-05-06}}</ref>
 
==References==
{{Reflist}}
 
== Further readingBibliography ==
* Camille{{cite book |last=Paloque-Bergès (|first=Camille |year=2009). "|chapter=Langages ésotériques". ''|title=Poétique des codes sur le réseau informatique''. |publisher=Archives contemporaines. {{ISBN|isbn=978-2-914610-70-4}}.
* {{cite book|authorfirst=Geoff |last=Cox|title=Speaking Code: Coding as Aesthetic and Political Expression|url=https://books.google.com/books?id=wgnSUL0zh5gC&pg=PA6|year=2013|publisher=MIT Press|isbn=978-0-262-01836-4}}
* {{cite book |last1=Kneusel |first1=Ronald |title=Strange Code: Esoteric Languages That Make Programming Fun Again|url=https://books.google.com/books?id=qy1mEAAAQBAJ|year=2022 |publisher=No Starch Press |isbn=978-1718502406}}
 
==External links==
{{Commons category|Esoteric programming languages}}
* [https://esolangs.org/wiki/Main_Page Esolang, the esoteric programming languages wiki]
* {{dmoz|Computers/Programming/Languages/Obfuscated/|Obfuscated Programming Languages}}
 
* [[esolang:Main Page|Esolang]] &mdash; a wiki devoted to esoteric programming languages
{{Types of programming languages}}
{{Programming language}}
{{Use dmy dates|date=July 2017}}
 
{{Esoteric programming languages}}
 
{{DEFAULTSORT:Esoteric Programming Language}}
[[Category:Programming language classification]]
[[Category:Esoteric programming languages| ]]
[[Category:Computer humour]]