Metasyntactic variable: Difference between revisions
Replace unclear language "good examples are" with "For example" |
m →General usage: rescue dead link |
||
Line 13: | Line 13: | ||
===General usage=== |
===General usage=== |
||
Metasyntactic variables used commonly across all programming languages include ''[[foobar]]'', ''foo'', ''bar'', ''baz'', ''{{not a typo|qux}}'', ''{{not a typo|quux}}'', ''{{not a typo|corge}}'', ''{{not a typo|grault}}'', ''{{not a typo|garply}}'', ''{{not a typo|waldo}}'', ''{{not a typo|fred}}'', ''{{not a typo|[[plugh]]}}'', ''[[xyzzy (computing)|{{not a typo|xyzzy}}]]'', and ''thud''; several of these words are references to the game ''[[Colossal Cave Adventure]]''.<ref name="RFC3092"/><ref>{{cite mailing list|title=Metasyntactic variable|first=Stuart|last=Laughlin|date=November 18, 2016|access-date=November 18, 2016|url=https://www.progclub.org/pipermail/programming/2016-November/002305.html|mailing-list=programming@ProgClub}}</ref> |
Metasyntactic variables used commonly across all programming languages include ''[[foobar]]'', ''foo'', ''bar'', ''baz'', ''{{not a typo|qux}}'', ''{{not a typo|quux}}'', ''{{not a typo|corge}}'', ''{{not a typo|grault}}'', ''{{not a typo|garply}}'', ''{{not a typo|waldo}}'', ''{{not a typo|fred}}'', ''{{not a typo|[[plugh]]}}'', ''[[xyzzy (computing)|{{not a typo|xyzzy}}]]'', and ''thud''; several of these words are references to the game ''[[Colossal Cave Adventure]]''.<ref name="RFC3092"/><ref>{{cite mailing list|title=Metasyntactic variable|first=Stuart|last=Laughlin|date=November 18, 2016|access-date=November 18, 2016|url=https://www.progclub.org/pipermail/programming/2016-November/002305.html|mailing-list=programming@ProgClub|url-status=dead|archive-url=https://web.archive.org/web/20221202085628/https://www.progclub.org/pipermail/programming/2016-November/002305.html|archive-date=December 2, 2022}}</ref> |
||
A complete reference can be found in a [[MIT Press]] book titled ''[[The Hacker's Dictionary]]''. |
A complete reference can be found in a [[MIT Press]] book titled ''[[The Hacker's Dictionary]]''. |
Revision as of 15:14, 9 June 2023
A metasyntactic variable is a specific word or set of words identified as a placeholder in computer science and specifically computer programming. These words are commonly found in source code and are intended to be modified or substituted before real-world usage. For example, foo and bar are used in over 330 Internet Engineering Task Force Requests for Comments, the documents which define foundational internet technologies like HTTP (web), TCP/IP, and email protocols.[1][2]
By mathematical analogy, a metasyntactic variable is a word that is a variable for other words, just as in algebra letters are used as variables for numbers.[1]
Metasyntactic variables are used to name entities such as variables, functions, and commands whose exact identity is unimportant and serve only to demonstrate a concept, which is useful for teaching programming.
Common metasyntactic variables
Due to English being the foundation-language, or lingua franca, of most computer programming languages, these variables are commonly seen even in programs and examples of programs written for other spoken-language audiences.
The typical names may depend however on the subculture that has developed around a given programming language.
General usage
Metasyntactic variables used commonly across all programming languages include foobar, foo, bar, baz, qux, quux, corge, grault, garply, waldo, fred, plugh, xyzzy, and thud; several of these words are references to the game Colossal Cave Adventure.[1][3]
A complete reference can be found in a MIT Press book titled The Hacker's Dictionary.
Japanese
In Japanese, the words hoge (ほげ)[4] and fuga (ふが) are commonly used, with other common words and variants being piyo (ぴよ), hogera (ほげら), and hogehoge (ほげほげ).[5][circular reference] The origin of hoge as a metasyntactic variable is not known, but it is believed to date to the early 1980s.[5]
French
In France, the word toto is widely used, with variants tata, titi, tutu as related placeholders. One commonly-raised source for the use of toto is a reference to the stock character used to tell jokes with Tête à Toto.[citation needed]
Usage examples
C
In the following example the function name foo
and the variable name bar
are both metasyntactic variables. Lines beginning with //
are comments.
// The function named foo
int foo(void)
{
// Declare the variable bar and set the value to 1
int bar = 1;
return bar;
}
C++
Function prototypes with examples of different argument passing mechanisms:[6]
void Foo(Fruit bar);
void Foo(Fruit* bar);
void Foo(const Fruit& bar);
Example showing the function overloading capabilities of the C++ language
void Foo(int bar);
void Foo(int bar, int baz);
void Foo(int bar, int baz, int qux);
Python
Spam, ham, and eggs are the principal metasyntactic variables used in the Python programming language.[7] This is a reference to the famous comedy sketch, "Spam", by Monty Python, the eponym of the language.[8]
In the following example spam
, ham
, and eggs
are metasyntactic variables and lines beginning with #
are comments.
# Define a function named spam
def spam():
# Define the variable ham
ham = "Hello World!"
# Define the variable eggs
eggs = 1
return
IETF Requests for Comments
Both the IETF RFCs and computer programming languages are rendered in plain text, making it necessary to distinguish metasyntactic variables by a naming convention, since it would not be obvious from context.
Here is an example from the official IETF document explaining the e-mail protocols (from RFC 772 - cited in RFC 3092):
All is well; now the recipients can be specified. S: MRCP TO:<Foo@Y> <CRLF> R: 200 OK S: MRCP TO:<Raboof@Y> <CRLF> R: 553 No such user here S: MRCP TO:<bar@Y> <CRLF> R: 200 OK S: MRCP TO:<@Y,@X,fubar@Z> <CRLF> R: 200 OK Note that the failure of "Raboof" has no effect on the storage of mail for "Foo", "bar" or the mail to be forwarded to "fubar@Z" through host "X".
(The documentation for texinfo emphasizes the distinction between metavariables and mere variables used in a programming language being documented in some texinfo file as: "Use the @var command to indicate metasyntactic variables. A metasyntactic variable is something that stands for another piece of text. For example, you should use a metasyntactic variable in the documentation of a function to describe the arguments that are passed to that function. Do not use @var for the names of particular variables in programming languages. These are specific names from a program, so @code is correct for them."[9])
Another point reflected in the above example is the convention that a metavariable is to be uniformly substituted with the same instance in all its appearances in a given schema. This is in contrast with nonterminal symbols in formal grammars where the nonterminals on the right of a production can be substituted by different instances.[10]
Example data
SQL
It is common to use the name ACME in example SQL Databases and as placeholder company-name for the purpose of teaching. The term 'ACME Database' is commonly used to mean a training or example-only set of database data used solely for training or testing. ACME is also commonly used in documentation which shows SQL usage examples, a common practice with in many educational texts as well as technical documentation from companies such as Microsoft and Oracle.[11][12][13]
See also
- Metavariable (logic)
- xyzzy
- Alice and Bob
- John Doe
- Fnord
- Free variables and bound variables
- Gadget
- Lorem ipsum
- Nonce word
- Placeholder name
- Widget
- Smurf
References
- ^ a b c Eastlake 3rd, Donald E.; Manros, Carl-Uno; Raymond, Eric S. Etymology of "Foo". doi:10.17487/RFC3092. RFC 3092.
{{citation}}
: CS1 maint: numeric names: authors list (link) - ^ "Document Retrieval". RFC Editor.
- ^ Laughlin, Stuart (November 18, 2016). "Metasyntactic variable". programming@ProgClub (Mailing list). Archived from the original on December 2, 2022. Retrieved November 18, 2016.
- ^ "hogeの意味・使い方 - 英和辞典 Weblio 辞書". ejje.weblio.jp.
- ^ a b メタ構文変数 (in Japanese)
- ^ Mongan, John; Kindler, Noah; Giguere, Eric (2012). Programming Interviews Exposed: Secrets to Landing Your Next Job. John Wiley & Sons. p. 242. ISBN 978-1-118-28720-0.
- ^ "The Python Tutorial — Python 3.8.1 documentation". docs.python.org.
- ^ "General Python FAQ — Python 3.9.7 documentation". docs.python.org. Python Software Foundation. 2021-09-04. Why is it called Python?. Archived from the original on 2021-08-26. Retrieved 2021-09-05.
- ^ "Marking Words and Phrases". Texinfo 4.0. The GNU Documentation Format. Archived from the original on 2009-11-06. Retrieved 2012-11-25.
- ^ R. D. Tennent (2002). Specifying Software: A Hands-On Introduction. Cambridge University Press. pp. 36–37 and 210. ISBN 978-0-521-00401-5.
- ^ Kriegel, Alex (2008). SQL bible. Indianapolis, Ind: Wiley. ISBN 978-0-470-22906-4. OCLC 402446308.
- ^ Ruel, Chris (2014). Oracle 12c for dummies (in Danish). Hoboken, NJ: John Wiley & Sons. ISBN 978-1-118-74531-1. OCLC 870334544.
- ^ "Work with data in ASP.NET Core Apps". docs.microsoft.com.
External links
- Definition of metasyntactic variable, with examples.
- Examples of metasyntactic variables used in Commonwealth Hackish, such as wombat.
- Variable "foo" and Other Programming Oddities