«Foo» и «bar»: как в программировании появились два самых популярных «зарезервированных имени»

Задумывались ли вы о том, откуда в программировании появились «зарезервированные имена» foo и bar? Недавно такой вопрос был задан на Stack Overflow, и, помимо лучшего ответа, мы собрали несколько различных мнений по этому поводу.

На Stack Overflow был задан вопрос:

Почему во многих примерах кода (в частности, в руководствах) используются имена foo и bar? Например:

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

Вот лучший пользовательский ответ:

Foo и bar произошли от армейского акронима времён Второй мировой, FUBAR — “Fucked Up Beyond All Recognition” (англ. “Разбито в хлам”). Во время кампаний в Северной Африке и Сицилии (1942–1943) возникло целое семейство таких сокращений, которые можно найти в книге Рика Эткинсона Day of Battle: The War in Sicily and Italy, 1943-1944. Например, сокращение JANFU означает “Joint Army Navy Fucked Up” (англ. “Союз армии и флота облажался”), и применялось, в частности, для описания инцидента 11 июля 1943 года, когда британский флот сбил 23 транспортных самолёта США с десантом.

Вот описание Эткинсона (в оригинале):

Their pervasive “civilianness” made them wary of martial zeal. “We were not romantics filled with cape-and-sword twaddle,” wrote John Mason Brown, a Navy Reserve lieutenant headed to Sicily. “The last war was too near for that.” Military life inflamed their ironic sensibilities and their skepticism. A single crude acronym that captured the soldier’s lowered expectations — SNAFU, “situation normal, all fucked up” — had expanded into a vocabulary of GI cynicism: SUSFU (situation unchanged, still fucked up); FUMTU (fucked up more than usual); JANFU (joint Army-Navy fuck-up); JAAFU (joint Anglo-American fuck-up); FUAFUP (fucked up and fucked up proper); and FUBAR (fucked up beyond all recognition) [Atkinson, p. 36].

А вот ответ Википедии:

Термины foobar, foo, bar и baz часто используются как метапеременные в программировании или документации. В основном они означают неизвестные переменные, обычно в случаях, когда их цель известна, а значение не важно. Их используют в качестве названий переменных, функций, команд и т.д. Сами по себе они бессмысленны и являются простыми логическими представлениями чего-либо, как x и y в алгебре. Foobar обычно используется один, в то время как foo, bar и baz используются вместе и именно в таком порядке.

Вот что говорит RFC 3092:

Совместное использование вместе с “bar” берёт начало в сленге армии США времён Второй мировой войны в виде FUBAR (“Fucked Up Beyond All Repair”), впоследствии изменённом до foobar. Раньше считалось, это изменение было вызвано оцензуриванием аббревиатуры FUBAR, но похоже, что сама аббревиатура произошла от “foo”, возможно, под влиянием немецкого “furchtbar” (ужасный), то есть вероятно, что слово “foobar” было исходной формой.