今天在 WebKit 看了 CSS 伪类的文章,其中对 :matches() 的介绍出现了 foobar

:matches(.foo, .bar) {
    background-color: green;
}

随即想起,以前在不少编程书里经常看到 foobar 这对 couple,一直不知道他们的具体含义,于是默默去 google 搜了一下,发现结果都几有意思。

首先在 Quora 里发现一位名为 Thom Parkin 的网友回答:

“foo” has been (until very recently) always used as part of a pair (with “bar”) when representing arbitrary names in computer science. This is primarily in the instance of examples.

Much like the “Hello World” is a standard for examples in computer programming the use of “foo” and “bar” had grown in popularity.

The origin comes from a common phrase much older than computers and computer programming.

The choice of “foo” coupled with “bar” is derived from the coloquial acronym FUBAR (pronounced FOO-bar).

Legendarily from the military world, it represents the phrase:
“Fucked Up Beyond All Recognition” (in ‘mixed company’ the first word could be “Fouled”).

大概的意思是说:

在计算计领域里,“foo” 和 “bar” 通常会成对出现,在举例的时候用作没有明确意义的命名,就好像 “Hellow World” 例子在计算机编程里面作为标准的例子一样,“foo” 和 “bar” 的使用已经变得很流行。

而该词在常用的习语里面出现的时间远比在计算机或计算机编程里面出现的早,“foo” 和 “bar” 成对出现则起源于口语 “FUBAR” 一词(发音和 Foo-bar 一样)。

来自军事世界的传说中,“FooBar” 的含义则是 “Fucked Up Beyond All Recognition,全句意思是 “糟糕糟到面目全非/真是混乱不堪” ?

看完 Thom Parkin 的解释,隐隐约约觉得此词来头不小,但是啊 Thom 的介绍又不够详细,然后继续 search 一下,发现万能 Wiki Sir 对此有更详细的描述。

Wiki Sir 直接就来一句 “Not to be confused with FUBAR”,心里只想说:666666

Wiki 对 “Foobar” 一词的定义是这样的:

The terms foobar (/ˈfuːbɑr/), fubar, or foo, bar, baz and qux (alternatively, quux) and sometimes norf[1][2][3][4] and many others[5][6] are sometimes used as placeholder names (also referred to as metasyntactic variables) in computer programming or computer-related documentation.[7] They have been used to name entities such as variables, functions, and commands whose exact identity is unimportant and serve only to demonstrate a concept. The words themselves have no meaning in this usage. Foobar is sometimes used alone; foo, bar, and baz are sometimes used, when multiple entities are needed.

大概意思是:

  • Foobar 还有一群兄弟姐妹,例如 “fubar” 、“baz”、“qux”、“quux”、“norf”,他们很多时候都会作为占位名(或者作为伪变量)被应用在计算机编程或与计算机相关的文档中。

  • 他们被用作变量命名、函数命名、和命令命名,这些命名基本都是不重要的,仅仅作为某个概念阐述的示例,他们本身并没有什么具体含义

  • Foobar有时候单独使用,而当多个这种用法出现的时候, “foo”,“bar”,“baz” 会组合使用。

嗯~~ 原来是这样~~

那么出处呢?Wiki Sir 介绍得比较详细,有兴趣的同学自己 Click Here 去看看原文,在下也试下意译到本文

Foo 一词起源于 20 世纪 30 年代的一个并没有任何意义的词(nonsense word)和 20 世界 40 年代军事术语里面的 “FUBAR” 以及大约在 20 世纪 60 年代麻省理工学院铁路模型技术俱乐部(TMRC)在一个程序上下文用到的词汇。然而,这些词汇之间明确的联系仍然不清晰,从而使得一些有趣的理论学说进一步去定义他们。

Foo 在文献 《Internet Engineering Task Force (IETF) RFC 3092》里有定义(文献标题为 Etymology of “Foo”),文献给出了 foo 最早的使用记录,就是出现在 20 世纪 30 年代由美国 Bill Holman 创作的连载漫画 Smokey Stoverfoo 被用作没有具体含义的词,如下图的 “foomobile”:

image

(Smokey Stover driving a “foomobile”)

作者 Holman 说使用这个词是因为他在旧金山唐人街看到一尊中国玉雕像底部的“福”字,foo 大概是 福(fu) 的音译。而当时像 “福祿壽”、“福满处”等象征上帝的虚构形象在中国非常流行。

Smokey Stover 从 1935 连载到 1973,期间一直重点保留着 “foo” 的特征,就好像上面 “foomobile” 的插图。这个词在 20 世纪 30 年代非常流行,除了在 Smokey Stover 出现,还在其它卡通和连载漫画里出现,如由 Bob Clampett 创办的 Looney Tunes(兔巴哥)卡通系列里的 The Daffy DocPorky in Wackyland 以及漫画 Pogo

接着,Foo 走进了军事俚语 “FUBAR”(Fucked Up Beyond All Recognition)一词中,合并到词里的 “FU”。在第二次世界大战里盟军飞行员用词汇 “foo fighter” 描述各种各样的 UFO 或者一些神秘的空中现象

Foo 第一次在正式的程序类印刷品作为较为人知的词汇出现于 1965 年 TMRC 的一版印刷品,关于紧急开关(scram switches)方面的内容:

在复杂的模型系统中,一些紧急开关被安装在许多场所附近可以利用的空间里,这些场所有可能会发生突发的不幸事故,如全速前进的火车遇到障碍物。这种模型系统的另一个特性就是调试模拟盘上的数码时钟。当有人按下紧急开关,数码时钟就停止工作,显示屏上亦随之换成 “FOO” 这个词。在 TMRC 里面,紧急开关也因此称作 “Foo开关”(Foo switches)。正因为这样,“foo” 一词录入了 TMRC 语言字典。

有一本书描述了 MIT(麻省理工学院) 列车室靠门侧的两个分别标上 “foo” 和 “bar” 标签的按钮。在那时期,这两个词通常应用到各种按钮上;当 MIT 的黑客们有新奇想法的时候也会反复使用他们。因此,foobar 被广泛用作变化不定的命名。在 TMRC 语言字典精简版中有这样的描述:

Multiflush: stop-all-trains-button. Next best thing to the red door button. Also called FOO. Displays “FOO” on the clock when used.

Multiflush(不知道叫啥):停下所有列车按钮,门边的红色按钮,也叫做 “FOO”,当使用后,时钟上会显示 “FOO”。

好了,现在终于知道 foobar 是什么了,简单总结下就是:

  1. 20 世纪 30 年代,一位美国漫画达人在一尊中国玉雕像上看到一个中国字 – “福” ,然后就将其音译成 “foo”,并应用到他自己的漫画上

  2. 漫画大叔将 “foo” 发扬光大不久,唯恐不乱的军事世界将 “foo” 放到了俚语 “FUBAR” 里面,演变成了 “Foobar”

  3. 之后 MIT 人才在介绍一项 “complex model system” 的紧急开关中引入了 “foo” 一词,并发表出去,于是乎 MIT 的黑客们一有新奇想法就用 “foo” 一词,并用上了瘾,久而久之大家就对 “foo” 和 “bar” 认识达成了共识

一句话概括就是:FooBar 什么鬼都不是却能代表一切,FUBAR!

The End