web-dev-qa-db-ja.com

ソースコード例での「foo」と「bar」の使用の歴史は何ですか?

多くのコード例、特にチュートリアルで、「Foo」および「Bar」という名前が頻繁に使用されるのはなぜですか。ほぼ目安です。

例えば:

void foo(char* bar) {
  printf("%s", bar);
}
60
user15453

Fooおよびbarは、米軍の第二次世界大戦の頭字語FUBAR、「F -すべての認識を超えて」。これらの用語のファミリー全体が、北アフリカとシチリアのキャンペーン(1942-43)の間に広く使用されるようになりました。リック・アトキンソンの素晴らしい Day of Battle:The War in Sicily and Italy、1943-1944 はこれらのリストを提供します。たとえば、JANFUは「共同軍海軍Fアップ」です。たとえば、1943年7月11日の侵攻艦隊が ハスキー作戦23軍空軍C-47を撃墜したときの事件) ビーチヘッドを強化するために落下傘兵を運ぶ。

更新:ウィキペディアには、関連する頭字語の リスト があり、Atkinsonによってリストされた元の第二次世界大戦の頭字語がいくつか含まれています。

fooおよびbarを使用して変数に名前を付ける動機は、どのプログラマーでも理解できます。 。それらは確かに最初からC/UNIXカルチャーの一部であり、@ Walter Mittyが指摘するように、それを先取りしました。

アップデート(2009年10月5日):アトキンソンの説明:

彼らの蔓延する「文明」は彼らに武道への熱意を警戒させた。 「私たちはケープ・アンド・ソード・ツアドルで満たされたロマン派ではなかった」とシシリーに向かった海軍予備部隊のジョン・メイソン・ブラウンは書いた。 「最後の戦争はそれには近すぎた」と語った。軍事生活は彼らの皮肉な感受性と懐疑論を煽った。兵士の低下した期待を捉えた1つの粗雑な頭字語-SNAFU、「通常の状況、すべてめちゃくちゃ」-は、GIシニシズムの語彙に拡張されました。 FUMTU(通常よりもめちゃくちゃになる); JANFU(共同軍-海軍の性交); JAAFU(英米の共同ファックアップ); FUAFUP(めちゃくちゃと適切にめちゃくちゃ);とFUBAR(すべての認識を超えてめちゃくちゃ)[アトキンソン、p。 36]。

更新(2011年11月23日):@Hugoには、非軍事的な前例の 素晴らしいリスト があります。

65
Jim Ferrans

それはfubarの発音による発音だと思います。

これは以下を意味します:

  • F * cked
  • アップ
  • 超えて
  • すべて
  • 修復
59
FlySwat

New Hacker's Dictionary はこれに関して非常に優れたエントリを持っています-そして私はそれをこの種の事柄に対してWikipediaよりも優れたリソースであると考えています:

メタ構文変数/n./

例で使用され、議論中のあらゆるもの、または議論中のもののクラスの任意のメンバーを表すと理解される名前。単語fooは標準的な例です。混乱を避けるために、ハッカーは「foo」などの単語を永続的な名前として使用することはありません(まあ、ほとんどありません)。ファイル名の一般的な規則は、メタ構文変数名で始まるファイル名は、いつでも削除できるスクラッチファイルであるというものです。

ある程度、好ましいメタ構文変数のリストは文化的な特徴です。それらは、連続して(変数またはオブジェクトの関連グループに使用されて)、シングルトンとして発生します。次に、いくつかの一般的な署名を示します。

foo、bar、baz、quux、quuux、quuuux ...:
MIT/Stanfordの使用法があらゆる場所で見つかりました(このレキシコンの初期バージョンに大きく感謝します!)。 MIT(ただし、スタンフォードではない)で、bazは1970年代と80年代にしばらく使用されなくなりました。このシーケンスの最近の一般的な変異は、quxをquuxの前に挿入します。

バゾラ、ztesch:
スタンフォード(70年代半ば以降)。

foo、bar、thud、grunt:
このシリーズはCMUで人気がありました。他のCMU関連変数にはgorpが含まれます。

foo、bar、fum:
このシリーズはXEROX PARCで一般的であると報告されています。

フレッド、バーニー:
フレッドのエントリを参照してください。これらはブリティッシュ主義である傾向があります。

corge、grault、flarp:
ラトガース大学やGOSMACSハッカーの間で人気。

zxc、spqr、wombat:
ケンブリッジ大学(イングランド)。

shme
バークレー、GeoWorks、イングレス。短い/ e /で/ shme /と発音します。

シュノーク
ブラウン大学、1970年代初頭。

foo、bar、zot
フィンランドのヘルシンキ工科大学。

ブラッグ、ウィブル
ニュージーランド。

トト、ティティ、タタ、チュチュ
フランス。

pippo、pluto、paperino
イタリア。 Pippo/pee'po /およびPaperino/pa-per-ee'-no /は、グーフィーとドナルドダックのイタリア語の名前です。

aap、noot、mies
オランダ。これらは、子供がオランダのスペルボードでスペルを学ぶために使用した最初の単語です。

これらすべての中で、 'foo'と 'bar'だけが普遍的です(そしてbazはほとんどそうです)。化合物foobarと `foobaz 'も非常に幅広い通貨を持っています。

一部の専門用語はメタ構文名としても使用されます。たとえば、バーフとマンブル。イギリスと連邦で見られる多くのメタシンタックス変数の議論については、Commonwealth Hackishも参照してください。

41
ColinYounger

ウィキペディアはメタ構文変数のこの定義を提供します

コンピューターサイエンスでは、プログラマーはメタ構文変数を使用して、議論中の主題または議論中のクラスの任意のメンバーを表すために一般的に使用されるプレースホルダー名または別名を記述します。メタ構文変数の使用は、プログラマーが論理的に名前が付けられた変数を作成することから解放するのに役立ちます。これは、アルゴリズムの例を作成または教えるときにしばしば役立ちます。 Word fooが主な例です。
「メタ構文変数」という用語は、主に非公式の文献で使用されています。メタ変数の同義語として使用されることもあります。
言語の規則に違反しない任意の記号または単語をメタ構文変数として使用できますが、一般的に意味のない単語が使用されます。他の分野でも同じ概念が採用されており、回路図変数( 論理形式 を参照)などの用語で表現されます。
数学的類推による:メタシンタクティック変数は、代数のように文字が数字の変数として使用されるのと同じように、他の単語の変数である単語です。

この記事では、さまざまなプログラミング言語でのこのような変数の一般的な例も示しています。

[〜#〜] c [〜#〜]
次のCプログラミング言語の例では、関数名fooと変数名barはどちらもメタ構文変数です。 //で始まる行はコメントです。

// The function named foo
int foo(void)
{
   // Declare the variable bar and set the value to 1
   int bar = 1;

   return bar;
}

Python

スパム、ハム、卵は、Pythonプログラミング言語で使用される主要なメタシンタクティック変数です。[5]これは、Monty Python、 language。[6]次の例では、spam、ham、eggsがメタ構文変数で、#で始まる行がコメントです。

# Define a function named spam
def spam():

    # define the variable ham
    ham = "Hello World!"

    #define the variable eggs
    eggs = 1

    return

ルビー

次の例では、baz、foo、およびbarがメタ構文変数で、#で始まる行がコメントです。

# Declare the variable foo and set equal to 1
foo = 1

# Declare the variable bar and set equal to 2
bar = 2

# Declare the method (function) named baz, which prints the text 'Hello world'
def baz
   puts 'Hello world'
end
25
Brian

ここにウィキペディアの答えがあります:

Foob​​ar、foo、bar、およびbazという用語は、コンピュータープログラミングまたはコンピューター関連のドキュメントで使用される一般的なプレースホルダー名(メタ構文変数とも呼ばれます)です。これらは一般に、不明な値を表すために使用されます。通常、不明な値の目的は理解されていますが、正確な値は任意で重要ではありません。これらの用語は、データ、変数、関数、コマンドなど、複雑なシステムやアイデアのあらゆる部分を表すために使用できます。単語自体はこの使用法では意味がなく、単に文字xとyが代数で使用されているように、単なる論理表現です。 Foobarはしばしば単独で使用されます。複数のエンティティが必要な場合、通常、foo、bar、bazがこの順序で使用されます。

Fooは新奇論として英語を入力しており、メタシンタクティック変数の標準的な例であると多くの人が考えています。[引用が必要]コンピュータープログラミングの例(「1回だけ」と表現されることもあります)と疑似コードで広く使用されています。エリックS.レイモンドは、これをクラッジやクラフトと並んで「重要なハッカー主義」と呼んでいます[1]。

http://en.wikipedia.org/wiki/Foo

そしてRFC 3092から:

「バー」に関連して使用される場合、それは通常、第二次世界大戦時代の陸軍スラングの頭字語FUBAR(「Fucked Up Beyond All Repair」)に由来し、後でfoobarに変更されます。ジャーゴンファイル[JARGON]の初期バージョンでは、この変更を戦後の弓なり化と解釈していましたが、FUBAR自体がおそらく「foo」の派生物であり、ドイツ語の「furchtbar」(恐ろしい)の影響を受けている可能性が高いようです。実際には元の形でした。

というのも、「foo」という言葉自体が、戦前の漫画や漫画の歴史を持っているようです。 1938年にロバートクランペットが監督したワーナーブラザーズの漫画「The Daffy Doc」では、非常に初期のバージョンのDaffy Duckが「SILENCE IS FOO!」...(snip)と書かれた看板を掲げています。

http://www.faqs.org/rfcs/rfc3092.html

19
Daniel A. White

tl; dr

  • メタ構文変数としての "Foo"と "bar"はMITとDECによって普及しました。最初のリファレンスは、LISPとPDP-1、および1964年以降のProject MACで機能しています。

  • これらの人々の多くはMITのTech Model Railroad Clubにいて、1959年に技術界で最初に記録された "foo"の使用法を発見しました(1958年にはバリアント)。

  • "foo"と "bar"(さらには "baz"も)は大衆文化でよく知られており、特に多くのTMRCメンバーが読んだスモーキーストーバーやポゴのコミックからよく知られています。

  • また、軍のFUBARが彼らの人気に貢献したようです。


20世紀初頭の大衆文化では、軍用のFUBARと同様に、孤立した「foo」を使用することはかなりよく文書化されています。 (背景情報の一部: [〜#〜] foldoc [〜#〜][〜#〜] foldoc [〜#〜]用語ファイル用語ファイルWikipediaRFC3092


では、いくつかの参照を見つけましょう。

STOP PRESS!この回答を投稿した後、1月14日金曜日に「foo」に関するこの完璧な記事を発見しました1938 The Tech のエディション(「MITの最も古くて最大の新聞&ウェブで最初に発表された新聞」)、第LVII巻。 No. 57、価格3セント:

フーイズムについて

ラウンジャーは、Foo-ismのこのビジネスは、その誤った支持者によってあまりにも遠くまで運ばれてきたと考えており、これによって、そしてこれからも、その乱用に対抗します。古いfooのようなfooは存在しないかもしれませんが、私たちはそうですが、とにかく、fooと彼のお金はパーティーです。 (観覧席からの声-「ばかげてはいけない!」)

もちろん、 "foo!"私たちの言語では、明確でおそらくかけがえのない地位を占めていますが、現在使用されている過度の使用は、初期の(そして悲しいことに、暗い)忘却に陥る可能性があることを恐れています。あえて言うのは、みことばをきちんと使うと次のような幸せな出来事が起きるからです。

それは、ルーム6-120でスレーター教授による8.50熱力学講義でした。教授は黒板の表側を覆ったので、リフト機構を操作するハンドルをセットし、その間クラスに向かい議論を続けた。正面の板がゆっくりと堂々と持ち上げられ、その後ろの板が現れ、その板の上に「FOO」と綴られたシンボルが大きく書かれました!

Tech新聞 、1年前、編集者への手紙、9月1937

列車が駅に到着するまでに、新生物は、通常Fooと呼ばれるPhi Omicron Omicronの栄光の物語でいっぱいになり、簡単に獲物になります。

...

私の最初の4人の息子がピオオミクロンのグランドユニバーサルブラザーフッドに亡くなってもかまいませんが、5番目の息子である私の赤ちゃんは、少なくとも事前に警告されるべきです。

うまくいけば、

憤慨する5人の母。

そして 12月のTech1938

投票の終わりに行われた発言から、思考の一般的な傾向を最もよく解釈できます。ある投票は「私がすることはプルバーの事業のどれでもないと思います」と言い、別の投票は単に「フー」というカートを追加しただけです。


技術界で最初に文書化された「foo」は、おそらく1959TMRC言語の辞書 です。

FOO:神聖な音節(FOO MANI PADME HUM);神と交わるインスピレーションの下にあるときだけ話されるべきです。私たちの最初の義務は、フーカウンターを回し続けることです。

これらは [〜#〜] foldoc [〜#〜] で説明されています。辞書のコンパイラーであるピートサムソンは2005年に次のように述べています。

TMRCでこのWordを使用すると、そこに来るのが早くなります。 fooカウンターは単にランダムに点滅するライトを備えていたり、入力が不明瞭な実際のカウンターであったりします。

そして1996の Jargon File 4.0.0 から:

このレキシコンの以前のバージョンでは、スタンフォードのバーの腐敗として「baz」が派生していました。しかし、ピートサムソン(TMRCレキシコンのコンパイラー)は、1958年にTMRCに参加したとき、それはすでに最新であったと報告しています。または「Rowrbazzle!」クラブのレイアウトは、ローフォークとバスセックスの(神話的な)ニューイングランド郡(ローフォークと(ノーフォーク/サフォーク/ミドルセックス/エセックス)を混ぜ合わせたもの)をモデル化すると言われています。」

TMRC辞書の1年前、1958のMIT Voo Doo Gazette( "_Humor suplement of the MIT Deans 'office ") (PDF) は、John Banzhaf(電気工学の学生)による" The Laws of Murphy and Finagle "でFoocomについて言及しています:

FoocomとAnarcomの共同助成金の下でのさらなる研究により、法律はすべてを包含し、普遍的に適用できるように拡大されました。

また、1964のMIT Voo Doo (PDF) は、TMRCの使用法を参照しています:

はい!私は一瞬の成功と雪の顧客になりたいです。私に学位を送ってください:...

  • フーカウンター

  • フ・ジョン


ただし、この質問はコード例に関するものであることを忘れないでください。コードで公開されている「foo」、「bar」、「foobar」を見つけましょう。

したがって、 Jargon File 4.4.7 は「foobar」について言います:

おそらくもともとは、1960年代から1970年代初頭にDigital Equipment Corporation(DEC)によってDECsystemのマニュアルを通じて広まったものです。確認された目撃情報は1972年に遡ります。

私が見つけることができる最初に公開されたリファレンスは2月1964ですが、1963年6月 に書かれましたプログラミング言語LISP:その操作and Information Information International、Inc.によるもので、多くの著者がいますが、ティモシーP.ハートとマイケルレビンを含みます。

したがって、「FOO」はそれ自体の名前であるため、「COMITRIN」は「FOO」と「(FOO)」の両方をまったく同じ方法で扱います。

次のような他のメタ構文変数も含まれます:FOO CROCK GLITCH/POOT TOOR/ON YOU/SNAP CRACKLE POP/X Y Z

これは1月のMITのProject MACからの "foo"の次の参照1964のAIM-064、または ティモシーP.ハートとマイケルレビンによるLISP演習

車[((FOO。CROCK)。GLITCH)]

CHI /ボストンニューヨーク/スピナッチバターステーキ/フークロックグリッチ/トゥートトゥート/トゥートトゥート/ ISTHISATRIVIALEXCERCISE /フロップフロートトップ/ SNAPクラックルポップ/ 1つ2つ/平面脱穀機

「foo」と「bar」の両方について、私が見つけることができる最も早い参照は、6月のMITのProject MAC1966のAIM-098から、または PDP-6 LISP ピーターサムソン以外:

EXPLODEはPRIN1と同様にスラッシュを挿入するため、(EXPLODE(QUOTE FOO/BAR))PRIN1は(F O O ///B A R)として、またはPRINCは(F O O/B A R)として挿入されます。


さらにリコール。

@ Walter Mitty がこのサイトで2008年に呼び戻しました:

Foo Barに関する専門用語ファイルの2番目です。私はそれを少なくとも1963年まで遡ることができ、PDP-1のシリアル番号2はMITのビルディング26の2階にありました。そこではFooとFoo Barが使用され、1964年以降はプロジェクトMACのPDP-6ルームで使用されました。

John V. Everett は1996年に次のように回想しています:

1966年にDECに参加したとき、foobarはすでに使い捨てファイル名として一般的に使用されていました。 PDP-6は6文字の名前をサポートしていたので、fubarはfoobarになったと思いますが、私は常にMITからDECに移行した用語を想定していました。当時DECには多くのMIT型があり、その一部は7090/7094 CTSSで動作していました。 709xも36ビットマシンだったため、foobarがそこでの共通ファイル名として使用された可能性があります。

Fooとbarもファイル拡張子として一般的に使用されていました。その日のテキストエディターは入力ファイルを操作して出力ファイルを生成するため、.fooファイルから.barファイルに編集したり、元に戻したりするのが一般的でした。

TECOで編集する場合、fooを使用してバッファを埋めることも一般的でした。 1つのディスクブロックを正確に埋めるテキスト文字列はIFOO $ HXA127GA $$でした。私が一緒に働いたほとんどすべてのPDP-6/10プログラマーはこれと同じコマンド文字列を使用しました。

1998年のダニエルP. B.スミス

Dick Gruenは、寮の部屋にBバッテリー、抵抗器、コンデンサー、およびNE-2ネオン管の通常の集まりであるデバイスを所有しており、「fooカウンター」と呼んでいました。これは1964年頃のことでしょう。

1996年のロバートシュルデンフライ

変数名の例としてのFOOとBARの使用は、少なくとも1964年とIBM 7070にまで遡ります。これも古い可能性がありますが、私が最初に目にしたのはここです。これはアセンブラにありました。 FORTRAN整数に相当するものは何でしょうか? IFOOおよびIBAR?

Paul M. Wexelblat in 1992:

初期のPDP-1アセンブラは、記号(18ビットマシン)に2文字を使用し、プログラマは常に問題を修正するためのパッチスペースとして数ワードを残していました。 (パッチスペースにジャンプして、新しいコードを実行し、元に戻ります)そのスペースは、従来、FU:Upを修正した場所であるFxxx Upを表すFU:と呼ばれていました。話されたとき、それはFU空間として知られていました。後のアセンブラー(たとえば、MIDASは3つの文字タグを許可したため、FUはFOOになりました。すべてのPDP-1プログラマーがそれをFOOスペースであると通知します。

1996年のブルースB.レイノルズ

FOO(FU)BARのIBM側では、BAR側をベースアドレスレジスタとして使用しています。 1970年代半ばに、CICSプログラマーはさまざまなxxxBARを心配する必要がありました...それらの1つはFRACTBARだったと思います...

これは、1955年のストレート IBM "BAR" です。


その他の初期の参考文献:


RFC3092や他の場所で提案されているように、fooバーへの参照を「反転foo信号」として見つけることができませんでした。

ここにさらに初期のF00のいくつかがありますが、それらは偶然/誤検知だと思います:

19
Hugo

「foo」や「bar」などの単語を使用すると、知っている用語に基づいて把握できるものではなく、概念に集中できます。例えば:

public abstract class Animal
{
    public abstract void speak();
}

public class Cat 
    extends Animal
{
    public abstract void speak()
    {
        System.out.println("meow");
    }
}

public class Dog
    extends Animal
{
    public abstract void speak()
    {
        System.out.println("bark");
    }
}

上記のコードを使用すると、現実の世界についての知識に頼ることができます。

重要な部分は何が行われているのか(たとえば、ニャーや樹皮を印刷している)ではなく、それがどのように行われているのかという概念を説明しようとしている場合は、慣れ親しんだヘルプの部分を削除します。

public abstract class Foo
{
    public abstract void star();
}

public class Bar
    extends Foo
{
    public abstract void star()
    {
        System.out.println("A");
    }
}

public class Car
    extends Foo
{
    public abstract void star()
    {
        System.out.println("b");
    }
}

今、あなたは本当に何が起こっているのかに焦点を合わせる必要があり、あなたはもはや何が起こるのかを推測することができません。

つまり、短いバージョンは、fooやbarなどが、内容が実際には重要ではないがアイデアが重要であるという概念を強調するために使用されることです。

13
TofuBeer

から http://en.wikipedia.org/wiki/Foobar

テクノロジーでは、Wordはおそらく1960年代から1970年代初頭にDigital Equipment Corporationによってシステムマニュアルを通じて広まったものと思われます。もう1つの可能性は、foobarが反転foo信号としてエレクトロニクスから進化したことです。これは、デジタル信号がアクティブLOWの場合(負またはゼロの電圧状態が「1」を表すため)、通常、水平バーが信号ラベルの上に配置されるためです。 Jargonファイルは、fooがFUBARよりも古いと思われるケースを作成します

7
Cetra

専門用語ファイルから http://www.catb.org/jargon/html/F/foo.html

foo:/ foo /

  1. 間嫌悪の期間。
  2. [非常に一般的]非常に一般的に、特に何でも絶対にサンプル名として使用されます。プログラムとファイル(特にスクラッチファイル)。
  3. 構文例で使用されるメタ構文変数の標準リストの最初。 bar、baz、qux、quux、garply、waldo、fred、plugh、xyzzy、thudも参照してください。

バー:/ bar /、n。

  1. [非常に一般的] fooの後、bazの前の2番目のメタ構文変数。 「FOOとBARの2つの関数があるとします。 FOOはBARを呼び出します...」
  2. 多くの場合、foobarを生成するためにfooに追加されます。
7
jop

http://en.wikipedia.org/wiki/Foo によると:

これらの用語の起源は確実にわかっていないため、それらを特定するためにいくつかの事例理論が進められています。 Foobarは、下品な軍事頭字語FUBARに由来する可能性があります。

5
RichieHindle

Foo Barに関する専門用語ファイルの2番目です。

私はそれを少なくとも1963年まで遡ることができ、PDP-1のシリアル番号2はMITのビルディング26の2階にありました。そこではFooとFoo Barが使用され、1964年以降はプロジェクトMACのPDP-6ルームで使用されました。

4
Walter Mitty

私の知る限り、fooはfoobarから派生したもので、これは「F ***ed」を表す軍事キャッチフレーズです。 upbeyonda llr認識。」

次に、他のソースが存在する可能性があります。

http://en.wikipedia.org/wiki/Foo

2
Chris

FooとBar(別名FUBAR ... F *** ed Up Beyond All Recognition)は、クラス、プロパティ、メソッド名などの標準的な総称名として使用されています。

基本的に、アイデアは、コードの機能から逃れる可能性のある余分な情報なしでコードを伝達することです(つまり、コードを表示し、名前を変更した場合に何が行われるかを理解するために、関数がAddUserという名前であることを知る必要はありません。 Foo()に)。

0
TheTXI