Whitespace (programming language): Difference between revisions

Content deleted Content added
Reverted 1 edit by 66.220.227.162 (talk): Unsourced
Rewrite first sentence with most interest aspect of the language (don't bury the lead); re-write rest for clarity and active voice and singular; removed see alsos since covered by in-line links or only loosely related
Line 1:
{{Short description|Esoteric programmingProgramming language written in whitespace}}
{{Use dmy dates|date=April 2021}}
{{For|syntactically significant whitespace in non-esoteric programming languages|Off-side rule}}
[[File:Whitespace in vim2.png|right|206px|thumb|Whitespace [[hello world program]] with syntax highlighting {{legend|#0000ab|tabs}} {{legend|#ab0000|spaces}}]] <!-- make SVG file -->
 
'''Whitespace''' is an [[esoteric programming language|esoteric]] [[programming language]] with [[syntax]] where ''only'' [[whitespace characters]] ([[Space character|space]], [[Tab character|tab]] and [[linefeed]]) have meaning {{endash}} contrasting typical languages that largely ignore whitespace characters.
'''Whitespace''' is an [[esoteric programming language]] developed by Edwin Brady and Chris Morris at the [[University of Durham]] (also developers of the Kaya and [[Idris (programming language)|Idris]] programming languages). It was released on 1 April 2003 ([[April Fool's Day]]). Its name is a reference to [[whitespace character]]s. Unlike most programming languages, which ignore or assign little meaning to most whitespace characters, the Whitespace interpreter ignores any non-whitespace characters. Only [[Space character|spaces]], [[Tab character|tabs]] and [[linefeed]]s have meaning.<ref name="whitespace">{{cite web|url=http://compsoc.dur.ac.uk/whitespace/tutorial.php|title=Whitespace|website=Compsoc|access-date=2015-12-08|url-status=dead|archive-url=https://web.archive.org/web/20150618184706/http://compsoc.dur.ac.uk/whitespace/tutorial.php|archive-date=18 June 2015}}</ref><ref name=parker>{{cite book|title=Humble Pi: a comedy of maths errors|publisher=Allen Lane|date=2019|first=Matt|last=Parker|author-link=Matt Parker|ISBN=978-0-241-36023-1|page=21}}</ref>
 
AAs a consequence of thisits propertysyntax, isWhitespace that[[source a Whitespace programcode]] can easily be contained within the whitespace characters of a programcode written in a language whichthat ignores whitespace, {{endash}} making the text a [[polyglot (computing)|polyglot]].<ref name=parker />
 
Whitespace is an [[imperative programming|imperative]], [[stack-oriented programming|stack-based]] language.
The [[programming language|language]] itself is an [[imperative programming|imperative]] [[stack-based language]]. The [[virtual machine]] on which the programs run has a stack and a [[dynamic memory allocation|heap]]. The programmer is free to push arbitrary-width integers onto the stack (currently there is no implementation of floating point numbers) and can also access the heap as a permanent store for variables and [[data structure]]s.
The programmer can push arbitrary-width [[integer]] values onto a [[Stack (abstract data type)|stack]] and access a [[dynamic memory allocation|heap]] to store data.
 
An [[Interpreter (computing)|interpreter]] and its [[Haskel]] source code, is provided by the Whitespace creators.
 
== History ==
 
Whitespace was created by Edwin Brady and Chris Morris in 2002. [[Slashdot]] published a review of the [[programming language]] on 1 April 2003.<ref>{{Cite web |url=http://developers.slashdot.org/story/03/04/01/0332202/New-Whitespace-Only-Programming-Language |title=New Whitespace-Only Programming Language |date=2003-04-01 |website=Slashdot |author=Timothy |access-date=2014-01-23}}</ref>
Edwin Brady and Chris Morris, who also developed the Kaya and [[Idris (programming language)|Idris]] languages, created Whitespace in 2002 at the [[University of Durham]].
Whitespace was created by Edwin Brady and Chris Morris in 2002. [[Slashdot]] published a review of theon [[programmingApril Fool's languageDay]] on 1 April 2003.<ref>{{Cite web |url=http://developers.slashdot.org/story/03/04/01/0332202/New-Whitespace-Only-Programming-Language |title=New Whitespace-Only Programming Language |date=2003-04-01 |website=Slashdot |author=Timothy |access-date=2014-01-23}}</ref>
 
The idea of using whitespace characters as operators for the [[C++]] language had been facetiously suggested five years earlier by [[Bjarne Stroustrup]].<ref>{{cite web |url=http://www.stroustrup.com/whitespace98.pdf |title=Generalizing Overloading for C++2000 |first=Bjarne |last=Stroustrup |publisher=AT&T Labs |___location=Florham Park, NJ, USA |access-date=2014-01-23}}</ref>
 
== Syntax ==
Commands are composed of sequences of spaces, tab stops and linefeeds. All other characters are ignored and thus can be used for comments. For example, tab-space-space-space performs arithmetic addition of the top two elements on the stack.
 
CommandsWhitespace aredefines composeda ofcommand as a sequences of spaces, tab stops and linefeeds. All otherwhitespace characters are ignored and thus can be used for comments. For example, tab-space-space-space<code>[Tab][Space][Space][Space]</code> performs arithmetic addition of the top two elements on the stack.
Code is written as an ''Instruction Modification Parameter'' (IMP) followed by the operation.<ref name="whitespace" /> The table below shows a list of all the IMPs in Whitespace.
 
A command is written as an instruction modification parameter (IMP) followed by an operation and then any parameters.
<ref name="whitespace" />
 
IMP sequences include:
 
{| class="wikitable"
|-
Line 34 ⟶ 45:
|}
 
EachOperator IMPsequences, is followedorganized by one operation defined for that IMP, and a parameter if needed. The list of operations supported in Whitespace isinclude:<ref name="whitespace"/>
 
{| class="wikitable"
|-
! IMP !! Command Operator !! Parameter !! Meaning
|-
| [Space] || [Space] || Number || Push the number onto the stack
Line 89 ⟶ 100:
|}
 
The "''copy"'' and "''slide"'' operations were added in Whitespace 0.3 and may not be supported by all implementations.<ref name="whitespace"/>
 
==== ExamplesComments ====
 
Characters other than <code>space</code>, <code>tab</code> and <code>linefeed</code> are ignored and thus can be used for comments.
 
=== Numbers ===
Numbers are composed of spaces (0) and tabs (1), and they are terminated by a linefeed. The first space/tab in the number represents the sign of the number, if it's a space the number is positive, if it's a tab the number is negative. The rest of the trailing spaces and tabs represent the rest of the binary number.
 
A numeric value is represented as a sequence of <code>space</code> and <code>tab</code> characters that represent 0 and 1 respectively and terminated by a <code>linefeed</code>. The first character represents the [[Sign (mathematics)|sign]] of the value {{endash}} <code>space</code> for positive and <code>tab</code> for negative. Subsequent characters before the terminator represent the binary digits of a value.
==== Examples ====
 
For example:
 
* [space-][tab-][space-][space-][tab-][space-][tab-][tab-][linefeed] (STSSTSTTL) representsis thepositive binarysince numberstarts 1001011with (positive,<code>space</code> becauseand therepresents number1001011 startsbinary withwhich ais space)75 decimal
* [tab][tab][tab][space][space][tab][space][linefeed] (TTTSSTSL) is negative since starts with <code>tab</code> and represents -110010 binary which is −50 decimal
** 75 in decimal.
* tab-tab-tab-space-space-tab-space-linefeed (TTTSSTSL) represents the binary number 110010 (negative, because the number starts with a tab)
** −50 in decimal.
 
=== Labels ===
 
Labels are simply [LF] terminated lists of spaces and tabs. There is only one global namespace so all labels must be unique.<ref name="whitespace"/>
A label is used for [[control flow]]. It is a <code>linefeed</code>-terminated sequence of <code>space</code>and <code>tab</code> characters. As there is only one namespace, all labels must be unique.
<ref name="whitespace"/>
 
==Sample code==
 
<!--NOTE: Please be careful when copying/editing the code below. Some user agents may automatically insert linefeed characters for text wrapping, which will cause the code to run incorrectly.-->
The following is a commented Whitespace program that simply prints [[Hello world program|"Hello, world!"]], where each <span style="color:#ffffff;background:#ff9999">Space</span>, <span style="color:#ffffff;background:#9999ff">Tab</span>, or Linefeed character is preceded by the identifying comment "S", "T", or "L", respectively:
S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>T<span style="background:#9999ff">&#9;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>T<span style="background:#9999ff">&#9;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>L:Push_+1001000=72='H'_onto_the_stack&#10;T<span style="background:#9999ff">&#9;</span>L&#10;S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>:Output_'H';_S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>T<span style="background:#9999ff">&#9;</span>T<span style="background:#9999ff">&#9;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>T<span style="background:#9999ff">&#9;</span>S<span style="background:#ff9999">&#32;</span>T<span style="background:#9999ff">&#9;</span>L:Push_+1100101=101='e'_onto_the_stack&#10;T<span style="background:#9999ff">&#9;</span>L&#10;S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>:Output_'e';_S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>T<span style="background:#9999ff">&#9;</span>T<span style="background:#9999ff">&#9;</span>S<span style="background:#ff9999">&#32;</span>T<span style="background:#9999ff">&#9;</span>T<span style="background:#9999ff">&#9;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>L:+1101100=108='l'&#10;T<span style="background:#9999ff">&#9;</span>L&#10;S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>T<span style="background:#9999ff">&#9;</span>T<span style="background:#9999ff">&#9;</span>S<span style="background:#ff9999">&#32;</span>T<span style="background:#9999ff">&#9;</span>T<span style="background:#9999ff">&#9;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>L:+1101100=108='l'&#10;T<span style="background:#9999ff">&#9;</span>L&#10;S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>T<span style="background:#9999ff">&#9;</span>T<span style="background:#9999ff">&#9;</span>S<span style="background:#ff9999">&#32;</span>T<span style="background:#9999ff">&#9;</span>T<span style="background:#9999ff">&#9;</span>T<span style="background:#9999ff">&#9;</span>T<span style="background:#9999ff">&#9;</span>L:+1101111=111='o'&#10;T<span style="background:#9999ff">&#9;</span>L&#10;S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>T<span style="background:#9999ff">&#9;</span>S<span style="background:#ff9999">&#32;</span>T<span style="background:#9999ff">&#9;</span>T<span style="background:#9999ff">&#9;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>L:+101100=44=','&#10;T<span style="background:#9999ff">&#9;</span>L&#10;S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>T<span style="background:#9999ff">&#9;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>L:+100000=32=Space&#10;T<span style="background:#9999ff">&#9;</span>L&#10;S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>T<span style="background:#9999ff">&#9;</span>T<span style="background:#9999ff">&#9;</span>T<span style="background:#9999ff">&#9;</span>S<span style="background:#ff9999">&#32;</span>T<span style="background:#9999ff">&#9;</span>T<span style="background:#9999ff">&#9;</span>T<span style="background:#9999ff">&#9;</span>L:+1110111=119='w'&#10;T<span style="background:#9999ff">&#9;</span>L&#10;S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>T<span style="background:#9999ff">&#9;</span>T<span style="background:#9999ff">&#9;</span>S<span style="background:#ff9999">&#32;</span>T<span style="background:#9999ff">&#9;</span>T<span style="background:#9999ff">&#9;</span>T<span style="background:#9999ff">&#9;</span>T<span style="background:#9999ff">&#9;</span>L:+1101111=111='o'&#10;T<span style="background:#9999ff">&#9;</span>L&#10;S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>T<span style="background:#9999ff">&#9;</span>T<span style="background:#9999ff">&#9;</span>T<span style="background:#9999ff">&#9;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>T<span style="background:#9999ff">&#9;</span>S<span style="background:#ff9999">&#32;</span>L:+1110010=114='r'&#10;T<span style="background:#9999ff">&#9;</span>L&#10;S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>T<span style="background:#9999ff">&#9;</span>T<span style="background:#9999ff">&#9;</span>S<span style="background:#ff9999">&#32;</span>T<span style="background:#9999ff">&#9;</span>T<span style="background:#9999ff">&#9;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>L:+1101100=108='l'&#10;T<span style="background:#9999ff">&#9;</span>L&#10;S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>T<span style="background:#9999ff">&#9;</span>T<span style="background:#9999ff">&#9;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>T<span style="background:#9999ff">&#9;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>L=+1100100=100='d'&#10;T<span style="background:#9999ff">&#9;</span>L&#10;S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>T<span style="background:#9999ff">&#9;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>T<span style="background:#9999ff">&#9;</span>L:+100001=33='!'&#10;T<span style="background:#9999ff">&#9;</span>L&#10;S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>:Output_'!';_L&#10;L&#10;L:End_the_program&#10;
 
The following source code is for a Whitespace [[Hello world program|"Hello, world!"]] program. For clarity, it is annotated with <code>S</code>, <code>T</code> and <code>L</code> before each
Note that when Whitespace source code is displayed in some browsers, the horizontal spacing produced by a tab character is not fixed, but depends on its ___location in the text relative to the next [[Tab key#HTML|horizontal tab stop]]. Depending on the software, tab characters may also get replaced by the corresponding variable number of space characters.
<code><span style="color:#ffffff;background:#ff9999">space</span></code>,
<code><span style="color:#ffffff;background:#9999ff">tab</span></code>, and <code>linefeed</code>.
 
S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>T<span style="background:#9999ff">&#9;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>T<span style="background:#9999ff">&#9;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>L:Push_+1001000=72='H'_onto_the_stack&#10;T<span style="background:#9999ff">&#9;</span>L&#10;S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>:Output_'H';_S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>T<span style="background:#9999ff">&#9;</span>T<span style="background:#9999ff">&#9;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>T<span style="background:#9999ff">&#9;</span>S<span style="background:#ff9999">&#32;</span>T<span style="background:#9999ff">&#9;</span>L:Push_+1100101=101='e'_onto_the_stack&#10;T<span style="background:#9999ff">&#9;</span>L&#10;S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>:Output_'e';_S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>T<span style="background:#9999ff">&#9;</span>T<span style="background:#9999ff">&#9;</span>S<span style="background:#ff9999">&#32;</span>T<span style="background:#9999ff">&#9;</span>T<span style="background:#9999ff">&#9;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>L:+1101100=108='l'&#10;T<span style="background:#9999ff">&#9;</span>L&#10;S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>T<span style="background:#9999ff">&#9;</span>T<span style="background:#9999ff">&#9;</span>S<span style="background:#ff9999">&#32;</span>T<span style="background:#9999ff">&#9;</span>T<span style="background:#9999ff">&#9;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>L:+1101100=108='l'&#10;T<span style="background:#9999ff">&#9;</span>L&#10;S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>T<span style="background:#9999ff">&#9;</span>T<span style="background:#9999ff">&#9;</span>S<span style="background:#ff9999">&#32;</span>T<span style="background:#9999ff">&#9;</span>T<span style="background:#9999ff">&#9;</span>T<span style="background:#9999ff">&#9;</span>T<span style="background:#9999ff">&#9;</span>L:+1101111=111='o'&#10;T<span style="background:#9999ff">&#9;</span>L&#10;S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>T<span style="background:#9999ff">&#9;</span>S<span style="background:#ff9999">&#32;</span>T<span style="background:#9999ff">&#9;</span>T<span style="background:#9999ff">&#9;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>L:+101100=44=','&#10;T<span style="background:#9999ff">&#9;</span>L&#10;S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>T<span style="background:#9999ff">&#9;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>L:+100000=32=Space&#10;T<span style="background:#9999ff">&#9;</span>L&#10;S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>T<span style="background:#9999ff">&#9;</span>T<span style="background:#9999ff">&#9;</span>T<span style="background:#9999ff">&#9;</span>S<span style="background:#ff9999">&#32;</span>T<span style="background:#9999ff">&#9;</span>T<span style="background:#9999ff">&#9;</span>T<span style="background:#9999ff">&#9;</span>L:+1110111=119='w'&#10;T<span style="background:#9999ff">&#9;</span>L&#10;S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>T<span style="background:#9999ff">&#9;</span>T<span style="background:#9999ff">&#9;</span>S<span style="background:#ff9999">&#32;</span>T<span style="background:#9999ff">&#9;</span>T<span style="background:#9999ff">&#9;</span>T<span style="background:#9999ff">&#9;</span>T<span style="background:#9999ff">&#9;</span>L:+1101111=111='o'&#10;T<span style="background:#9999ff">&#9;</span>L&#10;S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>T<span style="background:#9999ff">&#9;</span>T<span style="background:#9999ff">&#9;</span>T<span style="background:#9999ff">&#9;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>T<span style="background:#9999ff">&#9;</span>S<span style="background:#ff9999">&#32;</span>L:+1110010=114='r'&#10;T<span style="background:#9999ff">&#9;</span>L&#10;S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>T<span style="background:#9999ff">&#9;</span>T<span style="background:#9999ff">&#9;</span>S<span style="background:#ff9999">&#32;</span>T<span style="background:#9999ff">&#9;</span>T<span style="background:#9999ff">&#9;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>L:+1101100=108='l'&#10;T<span style="background:#9999ff">&#9;</span>L&#10;S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>T<span style="background:#9999ff">&#9;</span>T<span style="background:#9999ff">&#9;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>T<span style="background:#9999ff">&#9;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>L=+1100100=100='d'&#10;T<span style="background:#9999ff">&#9;</span>L&#10;S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>T<span style="background:#9999ff">&#9;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>T<span style="background:#9999ff">&#9;</span>L:+100001=33='!'&#10;T<span style="background:#9999ff">&#9;</span>L&#10;S<span style="background:#ff9999">&#32;</span>S<span style="background:#ff9999">&#32;</span>:Output_'!';_L&#10;L&#10;L:End_the_program&#10;
==See also==
 
* [[Polyglot (computing)|Polyglot]], a program valid in more than one language
Note that whenWhen Whitespace source code is displayed in some browsers, the horizontal spacing produced by a tab character is not fixed, but depends on its ___location in the text relative to the next [[Tab key#HTML|horizontal tab stop]]. Depending on the software, tab characters may also get replaced by the corresponding variable number of space characters.
* [[Steganography]], the technique of concealing a message within another message
* [[Off-side rule#Off-side rule languages|Off-side rule languages]], where blocks are expressed by whitespace indentation
** [[Python syntax and semantics#Indentation|Python]], the best-known example of a language with syntactically significant whitespace
* [[Esoteric programming language]]s
** [[Brainfuck]], which consists of only eight simple commands and an instruction pointer
** [[INTERCAL]], the "Compiler Language With No Pronounceable Acronym"
** [[LOLCODE]], which is patterned after a [[Lolcats|series]] of [[Internet meme]]s
** [[Malbolge]], which is specifically designed to be nearly impossible to program in
 
==References==
 
<references/>
 
==External links==
 
*{{Official website|https://web.archive.org/web/20150618184706/http://compsoc.dur.ac.uk/whitespace/tutorial.php}}
*[http://developers.slashdot.org/article.pl?sid=03/04/01/0332202 Release announcement on Slashdot]