Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
Esoteric programming language
(section)
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
== Common 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 === 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> === Unique instruction representations === 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 === 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" /> === Parody 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" />
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)