(Впервые опубликовано на Аваксе:
http://www.avaxhome.ru/internet/2005/06/23/foo_bar/.
Воспроизведено с лёгкими изменениями в Сепулькарии:
http://sepulca.blogspot.com/2006/01/04-foo-bar.html)
Очередной disclaimer: чрезмерно патриотических граждан прошу не воспринимать нижеприведённый текст как пропаганду американского сленга, культуры, субкультуры, образа мыслей, образа жизни... Чего там ещё? О! Чуждых нам программистских ценностей! Короче, воспринимать исключительно как курьёз.
Вот.
Темой будет давно волновавший меня вопрос возникновения в компьютерной литаратуре традиционных (я бы даже сказал, уже мифологических) имён Foo и Bar. Возможно, эта тема вызовет интерес не только у компьютерных "гиков" (Geeks - "ботаники", что ли? Как это нынче называется?). Короче, на любителя... Как, впрочем, и любой другой тип контента. Как выяснилось в бурных сечах на разных ресурсах, есть люди, которых от одного упоминания Хентай тошнит, а есть такие, кто без него и дня прожить не может. Я, конечно, утрирую - но, как и сказал, на всё найдутся портебители. Надеюсь, так будет и с моим трёпом.
Главное (что самое сложное) от темы не отвлекаться! ;-)
Ну дык вот, вернёмся к нашим "фу-баранам". FooBar'ам, в смысле.
У неподготовленного человека, незнакомого с американским сленгом прошлых лет, и первый раз берущего в руки учебник по какому-нибудь языку программирования (или чему-нибудь из смежных областей), должно, по идее, слегка уносить крышу: шо за ботва такая, в натуре?! Что за взятые с потолка названия, да ещё такие неблагозвучные - FOO! - в серьёзной книге?!? И какие, нафиг, BAR-ы? Программеры, конечно, не дураки выпить, но, опять же - пропагандировать это в серьёзном учебном пособии?!?
У человека же, имеющего некоторое представление об американском сленге, сразу должны замелькать реминесценции из фильмов про 'Нам (не "про нас", в смысле, а про Вьетнам). А у особо продвинутых камрадов - так даже из фильмов про WWII. Типа "Рядового Райана".
Речь идёт о восхитительном, на мой взгляд сокращении FUBAR. Означает оно, в различных трактовках, Fucked Up Beyond Any Recognition, либо Fucked Up Beyond All Repair. То есть, "затраханы", в моём очень вольном переводе, "по самое немогу", или "до неузнаваемости", или "до состояния, не поддающегося лечению" ;-)
Судя по всему, более поздней версией является FOOBAR = Fucked Over & Over Beyond Any Recognition, т.е. то же самое, но уже хронически, раз за разом... Мда.
Кстати, близким родственником этого акронимического гнезда является даже ещё более восхитительное выражение SNAFU. Восхитительноe настолько, что оно стало моим стандартным ответом на вопросы, как там у меня дела на работе. ;-) Означает оно Situation Normal, All's Fucked Up. Что переводится, приблизительно, "всё как обычно - наперекосяк и через задницу"... Ну ооочень приблизительно, но я сторонник не подстрочных, а наиболее адекватных переводов! ;-)
Однако, поплутав в лабиринтах слэнговых сокращений, вернёмся к основному фигуранту нашего расследования.
Ну, с затраханными до потери пульса солдатами как раз всё ясно, это никому объяснять не нужно. А вот есть ли связь с void Foo(int bar)? Похоже, есть, но весьма косвенная. Как выяснится из приведённой ниже ссылки, слово Foo обладает собственной, весьма запутанной и туманной историей, и обладает определёнными правами и без довеска bar.
Имеет оно несколько значений:
1. Нечто неопознанное, абстрактное, неизвестное.
В этом контексте интересен термин "Foo Fighters"; большинство читателей наверняка ассоциируют его с американской музыкальной командой девяностых. А многие ли знают, что оно означает? Оказывается, у этой абракадабры есть значение: в конце WWII термин был в ходу у операторов радаров, для обозначения загадочных и неопознанных следов на экранах; позднее такие следы были названы UFO (НЛО)... ;-) "Fighters", кстати, в этом контексте означет "истребители" - чтоб никто не подумал, что "боевики" какие-нибудь 8-)
2. Нечто усреднительно-обобщающее. "FOO was here" было британским аналогом "Здесь был Вася", и подобные граффити появлялись там, где проходили их войска. Одно из объяснений утверждает, что FOO, в данном случае, может происходить от Forward Observation Officer, т.е. что-то типа "офицера глубокой разведки", а может и "арткорректировщика"... Да поправят меня специалисты.
Нo, в любом случае, это, похоже, более позднее объяснение.
Таким образом, семантика этого слова (сочетания) в компьютерной литературе, похоже, следующая: сначала кто-то использовал "foo", чтобы обозначить некую условно-абстрактно-усреднённую функцию или переменную. А потом кто-то из авторов, обладающих специфически-программистским чувством юмора, вспомнил боевое прошлое, и добавил "bar". Тонкий такой юмор ;-)
Когда же это произошло? Компетентные источники, пожелавшие остаться анонимными, ;-) утверждают, что дело было в корпорации DEC (Digital Equipment Corporation), впервые включившей его в свои справочные руководства в 60х - начале 70х годов. А оттуда эта зараза уже расползлась так, что сейчас уже является, фактически, стандартом для любого уважающего себя автора ;-)
Более подробную информацию можно почерпнуть, пройдя по приведённой ниже ссылке. Если не лень, и если владение аглицким на достаточном уровне.
Краткая справка для тех, кто не в курсе, что такое RFC. Это Request For Comments, документ, публикуемый в сети для обсуждения, и являющийся, как правило, основой для будущего протокола. Сам по себе RFC уже достаточно серьёзный докУмент, и многие протоколы так и остаются навечно на этой стадии, не будучи формализованы дальше. Таким образом, "прототип протокола Foo", ссылка на который, собственно, и предлагается уважаемой аудитории, уже сам по себе является анекдотом - опять же, специфически-компьютерным ;-)
http://www.faqs.org/rfcs/rfc3092.htmlОт себя могу лишь добавить, что меня потрясло, насколько много у народа, писавшего сей перл, было свободного времени (даже для качественной первоапрельской шутки)! Ведь надо же было не только подобрать материалы, но и собрать статистику использовния "сабджа" в других RFC!
Там ещё куча версий и информации, но я привёл (и перевёл) наиболее, на мой взгляд, интересные и адекватные части сего опуса.
Enjoy! Ну, или не enjoy.
Главное, высказывайтесь, интересно или нет...