it-swarm-eu.dev

Jaká je historie použití výrazů „foo“ a „bar“ v příkladech zdrojového kódu?

Proč mnoho příkladů kódu, zejména výukové programy, používá názvy „Foo“ a „Bar“ tak často? Je to téměř standard.

Například:

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

Foo a bar pochází z zkratky FUBAR americké armády z druhé světové války, „F -ed Up Beyond All Recognition ". Celá rodina těchto termínů se rozšířila během severoafrických a sicilských kampaní (1942-43). Vynikající Rick Atkinson Den bitvy: Válka na Sicílii a Itálii, 1943-1944 uvádí jejich seznam. Například JANFU je "společná armáda námořnictva F Up", jako je incident dne 11. července 1943, kdy invazní flotila pro operace Huskysestřelena 23 transportů letectva armády C-47 nesoucí výsadkáře k posílení předmostí.

Aktualizace: Wikipedia obsahuje seznam souvisejících zkratek, které zahrnují některé původní z druhé světové války uvedené společností Atkinson.

Každý programátor bude rozumět motivaci používat foo a lištu k pojmenování proměnných . Určitě jsou od začátku součástí kultury C/UNIX a jak to upozorňuje @ Walter Mitty, předcházelo to.

Aktualizace (10.5.2009): Zde je popis Atkinsona:

Jejich všudypřítomná „civilita“ je vedla k obavám z bojové horlivosti. „Nebyli jsme romantici plní lovců mečů a mečů,“ napsal John Mason Brown, poručík námořnictva zamířený na Sicílii. "Poslední válka byla na to příliš blízko." Vojenský život zapálil jejich ironické cítění a jejich skepticismus. Jediná hrubá zkratka, která zachytila ​​snížená očekávání vojáka - SNAFU, „normální situace, všichni v prdeli“ - se rozšířila do slovníku GI cynicismu: SUSFU (situace nezměněná, stále v prdeli); FUMTU (v prdeli víc než obvykle); JANFU (společný souboj armády a námořnictva); JAAFU (společný anglo-americký kurva); FUAFUP (v pořádku a v pořádku); a FUBAR (v prdeli nad veškeré uznání) [Atkinson, p. 36].

Aktualizace (23. 11. 2011): @ Hugo má fantastický seznam nevojenských předchůdců.

65
Jim Ferrans

Myslím, že je to fonetická výslovnost fubaru.

Což znamená:

  • F * cked
  • Nahoru
  • Mimo
  • Všechno
  • Opravit
59
FlySwat

New Hacker's Dictionary má k tomu velmi dobrý příspěvek - a já to považuji za lepší zdroj pro tuto věc než Wikipedia:

metasyntaktická proměnná /n./

Jméno použité v příkladech a chápané jako zkratka pro cokoli, o čem se diskutuje, nebo jakýkoli náhodný člen třídy věcí, o nichž se diskutuje. Slovo foo je kanonickým příkladem. Aby nedocházelo k nejasnostem, hackeři nikdy (dobře, sotva někdy) používají `foo 'nebo jiná podobná slova jako trvalé názvy pro cokoli. V názvech souborů je běžnou konvencí to, že jakýkoli název souboru začínající názvem metasyntaktické proměnné je odkládací soubor, který lze kdykoli smazat.

Do určité míry je seznam preferovaných metasyntaktických proměnných kulturním podpisem. Vyskytují se jak v sérii (používané pro příbuzné skupiny proměnných nebo objektů), tak jako singletony. Zde je několik společných podpisů:

foo, bar, baz, quux, quuux, quuuux ...:
Používání MIT/Stanford, které se nyní nachází všude (hlavně díky raným verzím tohoto lexikonu!). V MIT (ale ne ve Stanfordu), baz vypadl z užívání na chvíli v 70. a 80. letech. Společná nedávná mutace této sekvence vloží qux před quux.

bazola, ztesch:
Stanford (od poloviny 70. let).

foo, bar, thud, grunt:
Tato série byla populární na CMU. Jiné proměnné spojené s CMU zahrnují gorp.

foo, bar, fum:
Tato série je uváděna jako běžná v XEROX PARC.

fred, barney:
Viz záznam pro fred. Jsou to obvykle britští příslušníci.

corge, grault, flarp:
Populární na Rutgers University a mezi hackery GOSMACS.

zxc, spqr, wombat:
Cambridge University (Anglie).

shme
Berkeley, GeoWorks, Ingres. Výrazný/shme/s krátkým/e /.

šnorchlovat
Brown University, začátek sedmdesátých let.

foo, bar, zot
Helsinská technická univerzita ve Finsku.

blarg, wibble
Nový Zéland.

toto, titi, tata, tutu
Francie.

pippo, pluto, paperino
Itálie. Pippo/pee'po/a Paperino/pa-per-ee'-no/jsou italská jména Goofyho a Donalda Ducka.

aap, noot, mies
Nizozemí. Toto jsou první slova, která se dítě naučilo hláskovat na nizozemské tabuli pro hláskování.

Ze všech těchto, pouze 'foo' a 'bar' jsou univerzální (a baz téměř tak). Sloučeniny foobar a „foobaz“ mají také velmi širokou měnu.

Některé termíny žargonu jsou také používány jako metasyntactic jména; barf a mumble, například. Viz také Commonwealth Hackish pro diskusi o četných metasyntaktických proměnných nalezených ve Velké Británii a Commonwealthu.

41
ColinYounger

Wikipedia uvádí tuto definici metasyntaktické proměnné :

V informatice používají programátoři metasyntaktické proměnné k popisu zástupného jména nebo termínu aliasu běžně používaného k označení předmětu, který je předmětem diskuse, nebo libovolného člena třídy diskutovaných věcí. Použití metasyntaktické proměnné je užitečné při osvobozování programátora od vytváření logicky pojmenované proměnné, což je často užitečné při vytváření nebo výuce příkladů algoritmu. Slovo foo je hlavním příkladem.
Termín „metasyntaktická proměnná“ se primárně nachází v neformální literatuře. To je někdy také používáno jako synonymum pro metavariable.
Jakýkoli symbol nebo slovo, které neporušuje pravidla jazyka, lze použít jako metasyntaktickou proměnnou, ale běžně se používají nesmyslná slova. Stejný koncept se používá v jiných oblastech, kde je vyjádřen pojmy jako je schematická proměnná (viz logická podoba ).
Matematickou analogií: Metasyntaktická proměnná je Slovo, které je proměnnou pro jiná slova, stejně jako v algebraských dopisech se používá jako proměnná pro čísla.

Článek také uvádí běžné příklady takových proměnných v různých programovacích jazycích:

[~ # ~] c [~ # ~]
V následujícím příkladu programovacího jazyka C jsou název funkce foo a lišta s názvy proměnných metasyntaktické proměnné. Řádky začínající // jsou komentáře.

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

   return bar;
}

Python

Spam, šunka a vejce jsou hlavní metasyntaktické proměnné používané v programovacím jazyce Python) [5] Toto je odkaz na slavnou komediální skicu Spam Monty Python, eponym [6] V následujícím příkladu jsou spam, šunka a vejce metasyntaktické proměnné a řádky začínající na # jsou komentáře.

# Define a function named spam
def spam():

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

    #define the variable eggs
    eggs = 1

    return

Ruby

V následujícím příkladu jsou baz, foo a bar metasyntaktické proměnné a řádky začínající na # jsou komentáře.

# 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

Zde je odpověď wikipedie:

Pojmy foobar, foo, bar a baz jsou běžné zástupné názvy zástupců (také označované jako metasyntaktické proměnné) používané v počítačovém programování nebo dokumentaci vztahující se k počítači. Obvykle se používají k reprezentaci neznámých hodnot, obvykle při popisu scénáře, kde se rozumí účelu neznámých hodnot, ale jejich přesné hodnoty jsou libovolné a nedůležité. Výrazy mohou být použity k reprezentaci jakékoli části složitého systému nebo nápadu, včetně dat, proměnných, funkcí a příkazů. Samotná slova nemají v tomto použití žádný význam a jsou pouze logickými reprezentacemi, podobně jako písmena xay jsou používána v algebře. Foobar se často používá samostatně; foo, bar a baz se obvykle používají v tomto pořadí, když je potřeba více entit.

Foo vstoupil do anglického jazyka jako neologismus a je mnohými považován za kanonický příklad metasyntaktické proměnné. Je nezbytně používán v příkladech počítačového programování (někdy vyjádřených jako „pouze jednou“) a pseudokódu. Eric S. Raymond to nazval „důležitým hackerstvím“ vedle kludge a cruft. [1]

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

A z RFC 3092:

Když použitý ve spojení s 'bar' to je obecně stopováno do 2. světové války Army slang zkratka FUBAR ('Fucked Up Beyond All Repair'), později upravený na foobar. Časné verze souboru Jargon [JARGON] interpretovaly tuto změnu jako poválečnou bowdlerizaci, ale nyní se zdá pravděpodobnější, že FUBAR byl sám o sobě derivátem „foo“, možná ovlivněného německou „furchtbar“ (hroznou) - „foobar“ může ve skutečnosti to byla původní forma.

Zdá se, že samotné slovo „foo“ mělo bezprostředně předválečnou historii komiksů a karikatur. V karikatuře Warner Brothers z roku 1938 režiséra Roberta Clampetta „The Daffy Doc“, velmi časná verze Daffy Duck, drží nápis „SILENCE IS FOO!“ ... ... (odstřihnout)

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

19
Daniel A. White

tl; dr

  • "Foo" a "bar" jako metasyntaktické proměnné byly zpopularizovány MIT a DEC, první odkazy jsou v práci na LISP a PDP-1 a projektu MAC od roku 1964).

  • Mnoho z těchto lidí bylo v MIT's Tech Model Railroad Club, kde v roce 1959 najdeme první zdokumentované použití „foo“ v tech kruzích (a varianta v roce 1958).

  • Jak „foo“, tak „bar“ (a dokonce i „baz“) byly dobře známé v populární kultuře, zejména od komiků Smokey Stover a Pogo, které si přečetlo mnoho členů TMRC.

  • Zdá se také pravděpodobné, že k jejich oblibě přispěl vojenský FUBAR.


Použití osamělého „foo“ jako nesmyslného slova je v populární kultuře na počátku 20. století velmi dobře zdokumentováno, stejně jako vojenský FUBAR. (Nějaké čtení na pozadí: FOLDOC FOLDOC soubor žargonsoubor žargonWikipediaRFC3092 )


Dobře, najdeme nějaké reference.

STOP PRESS! Po zveřejnění této odpovědi jsem objevil tento dokonalý článek o „foo“ v pátek 14. ledna 1938 vydání The Tech („Nejstarší a největší noviny MIT a první noviny zveřejněné na webu“), svazek LVII. Č. 57, Cena Tři centy:

Na Foo-ismu

Lounger si myslí, že tento obchod Foo-ismu byl příliš zavlečen jeho zavádějícími zastánci, a tímto způsobem a okamžitě se staví proti jeho zneužití. Je možné, že neexistuje žádné foo jako staré foo, a my jsme to, ale stejně, foo a jeho peníze jsou nějaká párty. (Hlas od tribunářů - "Nebuď foo-lish!")

Jako vyčerpávající, samozřejmě, "foo!" má v našem jazyce jednoznačné a pravděpodobně nenahraditelné postavení, i když se obáváme, že nadměrné používání, kterému je v současné době vystaveno, může mít za následek jeho upadnutí do časného (a bohužel, temného) zapomnění. Říkáme bohužel, protože správné použití Slova může vést k tak šťastným incidentům, jako je následující.

Jednalo se o 8.50 termodynamickou přednášku profesora Slatera v místnosti 6-120. Profesor, který zakryl přední stranu tabule, postavil rukojeť, která ovládá zdvihací mechanismus, a mezitím otočil třídu, aby pokračoval v diskusi. Čelní deska se pomalu, majestátně zvedla, odhalila desku za ní a na této desce pište velkými symboly, které znamenají „FOO“!

The Tech noviny , o rok dříve, Dopis redaktorovi, září 1937 :

Než vlak dorazí na stanici, jsou novomanželé tak naplnění příběhy slávy Phi Omicron Omicron, obvykle označované jako Foo, že jsou snadnou kořistí.

...

Neznamená to, že mi vadilo, že jsem ztratil své první čtyři syny ve Velkém a univerzálním bratrství Phi Omicron Omicron, ale přeji si, aby byl můj pátý syn, moje dítě, alespoň varován předem.

Doufejme, že vaše,

Rozhořčená matka pěti.

A Tech v prosinci 1938 :

Obecný trend myšlení by mohl být nejlépe interpretován z poznámek na konci hlasovacích lístků. Jeden hlas řekl: „„ Nemyslím si, že to, co dělám, je Pulverovo podnikání, “zatímco jiný pouze přidal strohý„ Foo “.


První zdokumentované „foo“ v technických kruzích je pravděpodobně 1959 s Slovník jazyka TMRC :

FOO: posvátná slabika (FOO MANI PADME HUM); mluvit, jen když je pod inspirací komunikovat s Božstvem. Naší první povinností je udržovat otáčky čítačů Foo.

Jsou vysvětleny na FOLDOC . Překladač slovníku Pete Samson řekl v roce 2005:

Použití tohoto slova v TMRC předznamenalo můj příchod. Počítadlo foo by mohlo mít náhodně blikající světla, nebo by to mohlo být skutečné počítadlo s nejasným vstupem.

A od roku 1996 soubor Jargon 4.0. :

Dřívější verze tohoto lexikonu odvozovaly „baz“ jako Stanfordovu korupci baru. Pete Samson (překladatel TMRC lexikonu) však uvádí, že to bylo aktuální, když se připojil k TMRC v roce 1958. Říká: „Pocházelo to z„ Pogo “. nebo 'Rowrbazzle!' Rozložení klubu bylo řekl, aby modeloval (mýtické) Nové Anglie hrabství Rowrfolk a Bassex (Rowrbazzle se mísil s (Norfolk/Suffolk/Middlesex/Essex). "

Rok před slovníkem TMRC, 1958 's MIT Voo Doo Gazette ("Humor doplnění MIT Děkanát ') (PDF) zmiňuje Foocoma v „The Law of Murphy and Finagle“ od Johna Banzhafa (studenta elektrotechniky):

Další výzkum v rámci společného grantu Foocom a Anarcom rozšířil zákon tak, aby byl všeobjímající a univerzálně použitelný: Pokud se něco může pokazit, bude to!

Také 1964 's MIT Voo Doo (PDF) odkazuje na použití TMRC:

Ano! Chci být okamžitý úspěch a zákazníci na sněhu. Pošlete mi titul v: ...

  • Foo čítače

  • Foo Jung


Ale pamatujme si, že tato otázka je o příkladech kódu, takže pojďme najít "foo", "bar" a "foobar" zveřejněné v kódu.

Takže Jargon File 4.4.7 říká o "foobar":

Pravděpodobně původně propagoval prostřednictvím manuálů DECsystem společností Digital Equipment Corporation (DEC) v 60. a začátkem 70. let; potvrzené pozorování se vrací do roku 1972.

První publikovaný odkaz, který mohu najít, je od února 1964 , ale napsaný v červnu 1963, Programovací jazyk LISP: jeho provoz a aplikace od společnosti Information International, Inc., s mnoha autory, ale včetně Timothyho P. Hart a Michaela Levina:

Jelikož tedy „FOO“ je jméno samo o sobě, „COMITRIN“ bude s „FOO“ i „(FOO)“ zacházet stejně.

Zahrnuje také další metasyntaktické proměnné, jako například: FOO CROCK GLITCH/POOT TOOR/ON YOU/SNAP CRACKLE POP/X Y Z

Očekávám, že je to totéž jako tento další odkaz na "foo" z MIT's Project MAC v lednu 1964 's AIM-064, nebo LISP Cvičení Timothy P. Hart a Michael Levin:

auto [((FOO. CROCK). GLITCH)]

Sdílí mnoho dalších metasyntaktických proměnných, jako například: CHI/BOSTON NEW YORK/SPINACH BUTTER STEAK/FOO CROCK GLITCH/POOT TOOP/TOOT TOOT/ISTHISATRIVIALEXCERCISE/PLOOP FLOT TOP/SNAP CRACKLE POP/ONE TWO THREE)/PLANE SUB THRESHER

Pro obě "foo" a "bar" dohromady, nejčasnější odkaz, který jsem našel, je z MIT's Project MAC v červnu 1966 's AIM-098, nebo PDP-6 LISP nikdo jiný než Peter Samson:

EXPLODE, jako PRIN1, vloží lomítka, takže (EXPLODE (QUOTE FOO/BAR)) PRIN1 je jako (FO O ///B A R) nebo PRINC's jako (FO O/B A R).


Další vzpomínky.

@ Walter Mitty připomenout na tomto webu v roce 2008:

Zařadil jsem žargonu o Foo Bar. Mohu ji vystopovat alespoň do roku 1963 a sériového čísla PDP-1 2, které bylo ve druhém patře budovy 26 na MIT. Byly zde použity Foo a Foo Bar a po roce 1964 v místnosti PDP-6 na projektu MAC.

John V. Everett vzpomíná v roce 1996:

Když jsem se připojil k DEC v roce 1966, foobar se již běžně používal jako jméno pro odhození. Věřím, že fubar se stal foobarem, protože PDP-6 podporoval šest jmen jmen, ačkoli jsem vždy předpokládal, že termín migrovaný na DEC z MIT. V té době bylo mnoho DEC MIT typů v DEC, z nichž někteří pracovali s CTSS 7090/7094. Protože 709x byl také 36bitový stroj, mohl být foobar používán jako obyčejný název souboru tam.

Foo a bar byly také běžně používány jako přípony souborů. Protože textové editory dne fungovaly na vstupním souboru a vytvořily výstupní soubor, bylo běžné upravovat ze souboru .foo do souboru .bar a zpět.

Při úpravách pomocí TECO bylo také obvyklé použít foo k vyplnění vyrovnávací paměti. Textový řetězec, který přesně vyplnil jeden blok disku, byl IFOO $ HXA127GA $$. Téměř všichni programátoři PDP-6/10, se kterými jsem pracoval, používali stejný příkazový řetězec.

Daniel P. B. Smith v roce 1998:

Dick Gruen měl ve své koleji zařízení, obvyklou sestavu B-baterie, rezistory, kondenzátory a NE-2 neonové trubice, které nazval „čítač foo“. Bylo by to asi v roce 1964.

Robert Schuldenfrei v roce 1996:

Použití FOO a BAR jako příkladů proměnných sahá nejméně do roku 1964 a IBM 7070. I to může být starší, ale tam jsem ho poprvé viděl. To bylo v Assembleru. Jaký by byl celočíselný ekvivalent FORTRAN? IFOO a IBAR?

Paul M. Wexelblat v roce 1992:

Nejdříve PDP-1 Assembler používal dva znaky pro programátory symbolů (18bitový stroj), vždy ponechal několik slov jako opravný prostor pro vyřešení problémů. (Přejít na místo pro opravu, udělat nový kód, přeskočit zpět) Tento prostor se obvykle jmenoval FU: což znamená Fxxx Up, místo, kde jste opravili Fxxx Ups. Když mluvil, to bylo známé jako FU prostor. Pozdější Assemblery (např. MIDAS povolil tři char značky, takže FU se stal FOO, a jako všichni PDP-1 programátoři budou říct, že to byl FOO prostor.

Bruce B. Reynolds v roce 1996:

Na straně IBM FOO (FU) BAR je použití strany BAR jako základní registr adres; v polovině 70. let se museli programátoři CICS starat o různé xxxBARy ... myslím, že jedním z nich byl FRACTBAR ...

Tady je přímý IBM "BAR" z roku 1955.


Další rané reference:


Nebyl jsem schopen najít žádné odkazy na foo bar jako „invertovaný foo signál“, jak se navrhuje v RFC3092 a jinde.

Zde jsou některé z dřívějších F00, ale myslím, že jsou náhody/falešné pozitivy:

19
Hugo

pomocí slov jako „foo“ a „bar“ se můžete zaměřit na koncept, nikoli na to, co můžete pochopit na základě podmínek, které znáte. Například:

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");
    }
}

Výše uvedený kód vám umožní vrátit se ke svým znalostem skutečného světa.

Pokud se snažíte vysvětlit koncept, kde důležitou součástí není to, co se děje (například tisk meow nebo kůra), ale jak se to dělá, pak odstranění částí, které znáte, vám pomůže:

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");
    }
}

Nyní se musíte soustředit na to, co se skutečně děje, už si nemůžete hádat, co se stane.

Krátká verze je taková, že foo, bar a podobně se používají ke zdůraznění konceptů, kde obsah opravdu nezáleží, ale myšlenka ano.

13
TofuBeer

Od http://en.wikipedia.org/wiki/Foobar

V technologii bylo slovo pravděpodobně původně propagováno prostřednictvím systémových příruček společností Digital Equipment Corporation v 60. a začátkem 70. let. Další možností je, že foobar se vyvinul z elektroniky jako obrácený foo signál. Je to proto, že pokud je digitální signál aktivní nízký (takže podmínka záporného nebo nulového napětí představuje „1“), pak je obvykle nad signální štítek umístěna vodorovná lišta. Soubor žargonu vytváří případ, který foo pravděpodobně předchází FUBAR

7
Cetra

Ze souborů žargonu http://www.catb.org/jargon/html/F/foo.html

foo:/foo /

  1. interj. Termín znechucení.
  2. [velmi časté] Používá se velmi obecně jako vzorový název pro absolutně cokoli, esp. programy a soubory (zejména stírací soubory).
  3. Nejprve na standardním seznamu metasyntaktických proměnných použitých v příkladech syntaxe. Viz také bar, baz, qux, quux, garply, waldo, fred, plugh, xyzzy, thud.

bar:/bar /, n.

  1. [velmi časté] Druhá metasyntaktická proměnná, po foo a před baz. "Předpokládejme, že máme dvě funkce: FOO a BAR. FOO volá BAR .... “
  2. Často připojil k foo produkovat foobar.
7
jop

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

Původy termínů nejsou známy s jistotou a bylo identifikováno několik anekdotických teorií. Foobar může pocházet z vulgární vojenské zkratky FUBAR, nebo může získat popularitu díky skutečnosti, že je vyslovován stejně.

5
RichieHindle

Zařadil jsem žargonu o Foo Bar.

Mohu ji vystopovat alespoň do roku 1963 a sériového čísla PDP-1 2, které bylo ve druhém patře budovy 26 na MIT. Byly zde použity Foo a Foo Bar a po roce 1964 v místnosti PDP-6 na projektu MAC.

4
Walter Mitty

Pokud vím, foo pochází z foobar, což je změna „fubaru“, vojenské frázy, která znamená „ F *** ed u p b eyond a ll r ecognition. "

Potom mohou existovat i jiné zdroje.

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

2
Chris

Foo and Bar (jinak známý jako FUBAR ... F *** ed Up Beyond All Recognition) byl právě používán jako standardní obecná jména pro věci jako třídy, vlastnosti, názvy metod atd.

V zásadě je myšlenkou předat váš kód bez tolika cizích informací, které by se mohly dostat pryč od toho, jak kód funguje (tj. Nepotřebujeme vědět, že vaše funkce se jmenuje AddUser, abychom kód viděli a pochopili, co to dělá, když jej přejmenujeme) na Foo ()).

0
TheTXI