что такое foo и bar
Атрибуты и протокол дескриптора в Python
Рассмотрим такой код:
Сегодня мы разберём ответ на вопрос: «Что именно происходит, когда мы пишем foo.bar?»
Вы, возможно, уже знаете, что у большинства объектов есть внутренний словарь __dict__, содержащий все их аттрибуты. И что особенно радует, как легко можно изучать такие низкоуровневые детали в Питоне:
Давайте начнём с попытки сформулировать такую (неполную) гипотезу:
Пока звучит похоже на правду:
Теперь предположим, что вы уже в курсе, что в классах можно объявлять динамические аттрибуты:
Хм… ну ладно. Видно что __getattr__ может эмулировать доступ к «ненастоящим» атрибутам, но не будет работать, если уже есть объявленная переменная (такая, как foo.bar, возвращающая ‘hello!’, а не ‘goodbye!’). Похоже, всё немного сложнее, чем казалось вначале.
И действительно: существует магический метод, который вызывается всякий раз, когда мы пытаемся получить атрибут, но, как продемонстрировал пример выше, это не __getattr__. Вызываемый метод называется __getattribute__, и мы попробуем понять, как в точности он работает, наблюдая различные ситуации.
Пока что модифицируем нашу гипотезу так:
foo.bar эквивалентно foo.__getattribute__(‘bar’), что примерно работает так:
Проверим практикой, реализовав этот метод (под другим именем) и вызывая его напрямую:
Выглядит корректно, верно?
Отлично, осталось лишь проверить, что поддерживается присвоение переменных, после чего можно расходиться по дом… —
my_getattribute возвращает некий объект. Мы можем изменить его, если он мутабелен, но мы не можем заменить его на другой с помощью оператора присвоения. Что же делать? Ведь если foo.baz это эквивалент вызова функции, как мы можем присвоить новое значение атрибуту в принципе?
Когда мы смотрим на выражение типа foo.bar = 1, происходит что-то больше, чем просто вызов функции для получения значения foo.bar. Похоже, что присвоение значения атрибуту фундаментально отличается от получения значения атрибута. И правда: мы может реализовать __setattr__, чтобы убедиться в этом:
Пара вещей на заметку относительно этого кода:
А ведь у нас есть ещё и property (и его друзья). Декоратор, который позволяет методам выступать в роли атрибутов.
Давайте постараемся понять, как это происходит.
Просто ради интереса, а что у нас в f.__dict__?
В __dict__ нет ключа bar, но __getattr__ почему-то не вызывается. WAT?
bar — метод, да ещё и принимающий в качестве параметра self, вот только это метод находится в классе, а не в экземпляре класса. И в этом легко убедиться:
Ключ bar действительно находится в словаре атрибутов класса. Чтобы понять работу __getattribute__, нам нужно ответить на вопрос: чей __getattribute__ вызывается раньше — класса или экземпляра?
Видно, что первым делом проверка идёт в __dict__ класса, т.е. у него приоритет перед экземпляром.
Погодите-ка, а когда мы вызывали метод bar? Я имею в виду, что наш псевдокод для __getattribute__ никогда не вызывает объект. Что же происходит?
Вся суть тут. Реализуйте любой из этих трёх методов, чтобы объект стал дескриптором и мог менять дефолтное поведение, когда с ним работают как с атрибутом.
Если объект объявляет и __get__(), и __set__(), то его называют дескриптором данных («data descriptors»). Дескрипторы реализующие лишь __get__() называются дескрипторами без данных («non-data descriptors»).
Оба вида дескрипторов отличаются тем, как происходит перезапись элементов словаря атрибутов объекта. Если словарь содержит ключ с тем же именем, что и у дескриптора данных, то дескриптор данных имеет приоритет (т.е. вызывается __set__()). Если словарь содержит ключ с тем же именем, что у дескриптора без данных, то приоритет имеет словарь (т.е. перезаписывается элемент словаря).
Чтобы создать дескриптор данных доступный только для чтения, объявите и __get__(), и __set__(), где __set__() кидает AttributeError при вызове. Реализации такого __set__() достаточно для создания дескриптора данных.
Короче говоря, если вы объявили любой из этих методов — __get__, __set__ или __delete__, вы реализовали поддержку протокола дескриптора. А это именно то, чем занимается декоратор property: он объявляет доступный только для чтения дескриптор, который будет вызываться в __getattribute__.
Последнее изменение нашей реализации:
foo.bar эквивалентно foo.__getattribute__(‘bar’), что примерно работает так:
Попробуем продемонстрировать на практике:
Мы лишь немного поскребли поверхность реализации атрибутов в Python. Хотя наша последняя попытка эмулировать foo.bar в целом корректна, учтите, что всегда могут найтись небольшие детали, реализованные по-другому.
Надеюсь, что помимо знаний о том, как работают атрибуты, мне так же удалось передать красоту языка, который поощряет вас к экспериментам. Погасите часть долга знаний сегодня.
Почему во многих примерах функции называют foo?
2 ответа 2
What’s Foo? My uncle found this word engraved on the bottom of a jade statue in San Francisco’s China town. The word Foo means Good-Luck.
Что такое Foo? Мой дядя нашел это слово выгравированным на дне нефритовой статуэтки в «China town» в Сан Франциско. И обозначает (переводится) оно «удача» или «удачи!».
Также в популяризации данных слов сыграла роль военная аббревиатура FUBAR («Fucked Up Beyond All Repair», что можно перевести как «ремонту не подлежит», что относилось к военной технике, либо «Fucked Up Beyond All Recognition» — речь шла о людских жертвах, которые невозможно опознать), которая появилась во время второй мировой войны и по слухам была придумана неким рядовым, которого «задолбали» всякие военные аббревиатуры.
Технари из TRMC клуба в MIT использовали слово «FOO» для обозначения ситуаций когда была необходима аварийная остановка системы. В случае, когда кто-нибудь нажимал один из аварийных выключателей на системном табло вместо времени появлялась надпись «FOO» и поэтому эти выключатели назвали «Foo switches». Позже в этом клубе стали использовать кнопки с подписями «FOO» и «BAR» (уже как дань традиции), и использовались они в самых разных ситуациях.
Впоследствии это стало использоваться в IT мире как «placeholders», то есть для названия переменных/классов в тех случаях, когда это не важно (например в примерах) или когда на ум ничего лучшего не приходит.
Какова история использования «foo» и «bar» в примерах исходного кода?
Почему многие примеры кода, особенно учебные пособия, так часто используют имена «Foo» и «Bar»? Это почти стандарт.
Обновление: Википедия имеет список связанных сокращений, который включает некоторые оригинальные Второй мировой войны, перечисленные Аткинсоном.
Любой программист поймет мотивацию использования foo и bar для именования переменных. Они, безусловно, были частью культуры C / UNIX с самого начала, и, как указывает @Walter Mitty, предшествовали этому.
Обновление (05.10.2009): вот описание Аткинсона:
Обновление (23.11.2011): у @Hugo фантастический список невоенных предшественников.
Я думаю, что это фонетическое произношение фубара.
Имя, используемое в примерах и понимаемое для обозначения того, что обсуждается, или любого случайного члена класса обсуждаемых вещей. Слово foo является каноническим примером. Чтобы избежать путаницы, хакеры никогда (ну, почти никогда) не используют `foo ‘или другие подобные слова в качестве постоянных имен для чего-либо. В именах файлов распространенным соглашением является то, что любое имя файла, начинающееся с имени метасинтаксической переменной, является рабочим файлом, который может быть удален в любое время.
В некоторой степени список предпочтительных метасинтаксических переменных является культурной сигнатурой. Они встречаются как последовательно (используются для связанных групп переменных или объектов), так и в виде синглетонов. Вот несколько распространенных подписей:
Базола, ztesch:
Стэнфорд (с середины 70-х годов).
foo, bar, thud, grunt:
этот сериал был популярен в CMU. Другие переменные, связанные с CMU, включают gorp.
foo, bar, fum:
Сообщается, что эта серия распространена на XEROX PARC.
Фред, Барни:
см. запись для Фред. Это, как правило, британцы.
corge, grault, flarp:
популярный в университете Rutgers и среди хакеров GOSMACS.
zxc, spqr, wombat:
Кембриджский университет (Англия).
Шме
Беркли, GeoWorks, Ingres. Произносится / шме / с коротким / е /.
Университет
Брауна, начало 1970-х годов.
foo, bar, zot
Хельсинкский технологический университет, Финляндия.
blarg, качать
Новая Зеландия.
Тото, Тити, Тата, пачка
Франция.
aap, noot, mies
Нидерланды. Это первые слова, которые ребенок использовал, чтобы научиться писать по буквам на голландской орфографической доске.
Из всего этого, только ‘foo’ и ‘bar’ универсальны (а baz почти так). Составы foobar и `foobaz ‘также имеют очень широкую валюту.
Некоторые жаргонные термины также используются как метасинтаксические имена; например, бормочет и бормочет. См. Также Commonwealth Hackish для обсуждения многочисленных метасинтаксических переменных, найденных в Великобритании и Содружестве.
В статье также приведены общие примеры таких переменных на разных языках программирования:
C
В следующем примере языка программирования C имя функции foo и строка имени переменной являются метасинтаксическими переменными. Строки, начинающиеся с //, являются комментариями.
Спам, ветчина и яйца являются основными метасинтаксическими переменными, используемыми в языке программирования Python. [5] Это ссылка на знаменитый комедийный набросок «Спам» Монти Пайтона, одноименный язык. [6] В следующем примере спам, ветчина и яйца являются метасинтаксическими переменными, а строки, начинающиеся с #, являются комментариями.
В следующем примере baz, foo и bar являются метасинтаксическими переменными, а строки, начинающиеся с #, являются комментариями.
Вот ответ Википедии:
Термины foobar, foo, bar и baz являются общими именами-заполнителями (также называемыми метасинтаксическими переменными), используемыми в компьютерном программировании или документации, связанной с компьютером. Они обычно используются для представления неизвестных значений, как правило, при описании сценария, в котором цель неизвестных значений понятна, но их точные значения являются произвольными и неважными. Термины могут использоваться для обозначения любой части сложной системы или идеи, включая данные, переменные, функции и команды. Сами слова не имеют смысла в этом использовании и являются просто логическими представлениями, так же, как буквы x и y используются в алгебре. Foobar часто используется один; foo, bar и baz обычно используются в том порядке, когда требуется несколько сущностей.
Фу вошел в английский язык как неологизм и считается многими каноническим примером метасинтаксической переменной. [Цитата нужна] Он широко используется в примерах компьютерного программирования (иногда выражается как «только один раз») и псевдокоде. Эрик С. Рэймонд назвал это «важным хакерством» наряду с клуджем и храбростью. [1]
«Не баг, а фича» — учимся понимать язык программистов
Понять смысл IT-терминов можно, только узнав, как они употребляются
Программисты говорят на особом языке, в котором полно терминов и сленга. Эта речь не всегда понятна не только обычным людям, далёким от компьютеров, но и начинающим айтишникам — новичкам в разработке.
Есть куча статей, объясняющих смысл терминов, но неподготовленному человеку от них мало пользы. И если вы общаетесь с программистами или собираетесь стать одним из них, то, скорее всего, во всём придётся разбираться самостоятельно. Иначе можете оказаться в ситуации, похожей на ту, что в клипе:
Пишет о программировании, в свободное время создает игры. Мечтает открыть свою студию и выпускать ламповые RPG.
Гораздо проще понять, что значит «пичупидо», если знать контекст, в котором употребляются все эти слова. Поэтому попробую объяснить некоторые термины и сленг на примере истории одного программиста (вымышленного).
Дисклеймер. Все совпадения случайны, а персонажи и ситуации вымышлены. В художественных целях они наделены негативными качествами, поэтому не берите с них пример: это касается как профессиональных качеств, так и отношения к алкоголю, курению и энергетическим напиткам. Также некоторые слова используются и в других сферах.
Новая задача
Ваня — обычный джун в веб-студии. Его работа — поддержка бэкенда сайтов старых клиентов студии.
Джуниор ( англ. junior — младший) в данном случае — младший разработчик в веб-студии. Также бывают мидл- ( англ. middle — средний) и сеньор-разработчики ( англ. senior — старший).
Бэкенд или бэк ( англ. back end — задний край) — серверная часть сайта или приложения, которая нужна для обработки и хранения данных. Его противоположность — фронтенд или фронт ( англ. front end — передний край) — видимая часть приложения или сайта. Если же разработчик занимается сразу фронтендом и бэкендом, его называют фуллстек-разработчиком ( англ. full stack — полная куча / полный набор).
Рабочая неделя Вани начинается с митингов, потому что спринт в его компании длится всего неделю.
Митинг — собрание, на котором обсуждается, что успели или не успели сделать сотрудники, а также чем они будут заниматься в новом спринте.
Спринт — период от одной до четырёх недель, за который сотрудники должны успеть выполнить задачу или задачи. Спринты являются частью Скрам.
Скрам ( англ. scrum) — метод управления проектами. Относится к гибкой методологии разработки эджайл ( англ. agile — гибкий).
На этот раз он получил задачу по добавлению валидации в один из интернет-магазинов. До этого вся валидация была на стороне пользователя.
Валидация — проверка данных, которые вводит пользователь.
До пятницы ещё целая неделя, поэтому с митинга Ваня пошёл сразу в курилку. Достав сигарету, он стал слушать разговор мидла и сеньора:
— Недавно залез в репозиторий, а там одни foobar’ы. Целый час голову ломал, а потом махнул рукой и заново переписал.
— Как наберут новых джунов, так всегда говнокод появляется. Как он вообще код ревью проходит?
— Надо проверить в гитхабе историю коммитов.
Тут Ваня поперхнулся, затушил сигарету и заторопился на рабочее место — от греха подальше.
Репозиторий — хранилище исходных файлов проекта.
Foo и Bar — имена функций или переменных, по которым невозможно понять, зачем они нужны. Использование таких имён допускают в учебниках и документации, но не в реальных проектах, потому что они замедляют чтение и понимание кода другими программистами.
Говнокод — очень плохой код.
Код ревью — проверка кода.
Гитхаб — сервис для хранения репозиториев IT-проектов и совместной работы над ними.
Коммит — запись изменений в репозиторий. Коммит содержит в себе данные об изменениях, комментарий и имя автора коммита.
У стола его уже ждал тимлид:
— Ваня, после того как ты добавил функцию загрузки фотографии в личном кабинете, появился баг. Теперь всё ломается, если ввести промокод.
— Вы уверены, что это из-за меня? Мой код вообще промокодов не касался.
— Уверен. Откати сайт и исправь всё до конца недели — нельзя ждать, пока клиент заметит, что одна из фич пропала.
— Но у меня уже есть задача на эту неделю, я не успею всё исправить.
— Это далеко не первый твой факап, поэтому, если не успеешь, мы поставим новый рекорд — так быстро мы джунов ещё не увольняли.
Тимлид ( англ. team leader — лидер команды) в данном случае — программист, который выполняет роль менеджера. Тимлид редко пишет код, вместо этого он следит, чтобы его команда хорошо справлялась с задачами.
Баг ( англ. bug — жук) — неожиданный результат или неожиданное поведение программы, ошибка.
Откатить ( англ. rollback) — отменить изменения, вернуться к прошлой версии.
Фича ( англ. feature — особенность) — полезная (а иногда забавная) функция / особенность программы.
Исправление багов
Дебажить было сложно, но Ваня не мог облажаться и в этот раз. За год его уже успели уволить из трёх компаний, после четвёртого увольнения его резюме будет испорчено окончательно.
Дебаг (англ. debug — устранение багов) — исправление ошибок в коде программы.
Три дня и три ночи Ваня корпел над кодом, но ничего не выходило. В отчаянии он обратился к коллеге, который проводил код ревью для его коммита в прошлый раз.
— Прости, но если бы я знал, что не так в твоём коде, я бы твой пул реквест не заапрувил.
— Но ты же написал lgtm в комментарии!
— И теперь мне за это прилетело. Слушай, я уже сто раз пожалел, что помог тебе сюда устроиться. Тимлид просёк, что я сквозь пальцы смотрю на твой код, поэтому сейчас проблемы у нас обоих. В случае чего я найду новую работу, а ты — вряд ли. Так что сейчас у тебя отличный повод подтянуть знания.
— Ладно, разберусь как-нибудь.
Апрув ( англ. approve) — подтвердить что-нибудь.
Пул реквест ( англ. pull request) — запрос на подтверждение коммита.
LGTM ( англ. looks good to me — На мой взгляд, хорошо) — сокращение, которое часто встречается на гитхаб в комментариях к подтверждению коммитов. Обычно его используют, когда не получается сказать ничего конструктивного по поводу кода.
Осталось всего два дня, чтобы исправить баг и добавить новую фичу, а у Вани не было почти никаких продвижений. После работы он, как обычно, зашёл в магазин, но вместо энергетиков решил взять пиво, потому что вспомнил о Пике Балмера.
Пик Балмера — шуточная теория, что при содержании алкоголя в крови между 0,129 и 0,138% (примерно 2 бутылки пива) программист получает сверхспособности к написанию кода. Теорию выдвинул Стив Балмер, CEO Microsoft с 2000 по 2014 год.
Бессонные ночи и пиво сделали своё дело, поэтому Ваня заснул прямо за компьютером.
Наутро он не сразу понял, что проснулся, и, лёжа лицом на клавиатуре, продолжал слушать разрывающийся будильник. Прошло всего несколько минут, но Ване они показались вечностью.
Ненавидя себя, он поплёлся на работу. Сев за рабочий стол и посмотрев в код, внезапно понял, в чём была ошибка (известно, что многие проблемы в разработке приложений решаются, когда программист спит). Исправив всё за пару минут, он пошёл к тимлиду.
— Я разобрался с багом.
— Отлично, но странно, что у тебя ушло так много времени. Давай протестируем твой код и выгрузим на прод.
Прод или продакшн ( англ. production environment — рабочее окружение) — компьютер (чаще всего сервер), на котором запускается готовое к работе приложение.
Тестирование прошло успешно. И хотя Ване стало спокойнее, он не спешил радоваться — за полтора дня нужно было успеть выполнить задачу, на которую требовалась как минимум неделя.
К счастью, недавно он начал изучать JavaScript, поэтому мог просто скопировать код валидации с фронта и переделать его для бэкенда.
JavaScript — язык фронтенд-разработки.
Помучившись день, он всё-таки закончил. Тимлид оценил усилия:
— Ну вот, можешь же, когда захочешь. Тебе повезло, что мы не деплоим на прод по пятницам, поэтому у тебя ещё есть время до середины понедельника, чтобы ещё раз всё проверить и поправить.
Деплой ( англ. to deploy) — процесс перевода кода в рабочее приложение, чтобы запустить его на каком-нибудь компьютере.
Воодушевлённый успехом, Ваня ещё раз всё протестировал, поэтому к следующему митингу он был спокоен — больше исправлять старые баги ему не придётся.
По крайней мере на этот спринт.
Заключение
Научила ли чему-нибудь Ваню эта история? Возможно. Но вы наверняка стали на один шаг ближе к пониманию программистов. Или даже к тому, чтобы стать одним из них.
Каково происхождение foo и bar? [закрытый]
откуда они взялись и когда их впервые использовали?
2 ответов
«Foo» и «bar» поскольку метасинтактические переменные были популяризированы MIT и DEC, первые ссылки находятся в работе над LISP и PDP-1 и Project MAC с 1964 года.
многие из этих людей были в технологическом модельном железнодорожном клубе MIT, где мы находим первое документированное использование » foo » в технических кругах в 1959 году (и вариант в 1958 году).
оба » foo » и » bar «(и даже «baz») были хорошо известны в популярная культура, особенно из комиксов Smokey Stover и Pogo, которые будут прочитаны многими членами TMRC.
кроме того, похоже, что военный ФУБАР способствовал их популярности.
использование одинокого » фу » как бессмысленного слова довольно хорошо документировано в популярной культуре в начале 20-го века, как и военный ФУБАР. (Справочную чтении: FOLDOC FOLDOC жаргон Файл Жаргон Википедия RFC3092)
хорошо, давайте найдем некоторые ссылки.
СТОП ПРЕСС! после публикации этого ответа я обнаружил эту идеальную статью о » foo » в пятницу 14 января 1938 редакция Техника («самый старый и самый большой MIT газета и первая газета, опубликованная в сети»), том LVII. № 57, Цена Три Центы:
как ругательство, конечно, » фу!»имеет определенный и, вероятно, незаменимый положение в нашем языке, хотя мы опасаемся, что чрезмерное использование, которому он в настоящее время подвергается, вполне может привести к его падению в раннее (и, увы, темное) забвение. Мы говорим «увы», потому что правильное употребление этого слова может привести к таким счастливым случаям, как следующие.
техническая газета, годом раньше, письмо редактору, сентябрь 1937:
к тому времени, как поезд достиг станции, неофиты настолько наполнены историями о славе Фи Омикрона Омикрон, обычно называемый Фу, что они легкая добыча.
возмущенная мать пятерых детей.
и Техника in Декабрь 1938:
общая тенденция мысли может быть лучше всего интерпретирована из замечаний в конце бюллетеней. Один голос сказал:» Я не думаю, что то, чем я занимаюсь, касается Пулвера», а другой просто добавил: «Фу».»
первый документированный » foo » в технических кругах, вероятно,1959 ‘ s словарь языка TMRC:
Это объясняется в FOLDOC. Составитель словаря Пит Самсон сказал в 2005 году:
использование этого слова в TMRC предшествует моему приходу туда. Счетчик foo может просто иметь случайно мигающие огни или может быть настоящим счетчиком с неясным вход.
более ранние версии этого лексикона производные «баз» как Стэнфордская коррупция бара. Однако Пит Самсон (составитель лексикона TMRC) сообщает, что он был уже текущим, когда он присоединился к TMRC в 1958 году. Он говорит: «это пришло от»Пого». Аллигатор Альберт, раздраженный или возмущенный, кричал: «Базз Фазз! или » Rowrbazzle!»Макет клуба, как говорят, моделирует (мифические) графства Новой Англии из Rowrfolk и Bassex (Rowrbazzle смешался с (Норфолк / Саффолк / Мидлсекс / Эссекс).»
за год до словаря TMRC,1958 ‘ S MIT Voo Doo Gazette («Юмор suplement of the MIT Deans’ office»)(PDF) упоминает Foocom в «законах Мерфи и Финагла» Джона Банжафа (студент-электротехник):
дальнейшие исследования в рамках совместного гранта Foocom и Anarcom расширили закон, чтобы быть всеохватывающим и универсально применимый: если что-то может пойти не так, это будет!
и 1964 ‘ S MIT Voo Doo (PDF) ссылки на использование TMRC:
давайте найдем» foo»,» bar «и» foobar», опубликованные в коде образцы.
Вероятно, первоначально распространялся через DECsystem руководства Digital Equipment Corporation (DEC) в 1960-х и начале 1970-х годов; подтвержденные наблюдения там вернуться к 1972 году.
также включает другие метасинтактические переменные, такие как: Foo CROCK GLITCH / POOT TOOR / ON YOU / SNAP CRACKLE POP / X Y Z
Я ожидаю, что это почти то же самое, что и следующая ссылка на «foo» из проекта MIT MAC в январе 1964 цель-064, или LISP упражнения Тимоти П. Харт и Майкл Левин:
он разделяет многие другие метасинтактические переменные, такие как: CHI / Бостон Нью-Йорк / шпинат масло стейк / FOO CROCK Глюк / пут туп / тук тук / ISTHISATRIVIALEXCERCISE / PLOOP FLOT TOP / SNAP CRACKLE POP / ONE TWO THREE / PLANE SUB THRESHER
для обоих «foo» и » bar » вместе, самый ранний ссылка, которую я мог найти, из проекта MIT MAC в июне 1966 цель-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. Я могу проследить его по крайней мере до 1963 года и серийного номера 2 PDP-1, который был на втором этаже здания 26 В MIT. Здесь использовались Foo и Foo Bar, а после 1964 года-PDP-6 room в project MAC.
Джон В. Эверетт вспоминает в 1996 году:
когда я присоединился к DEC в 1966 году, foobar уже широко использовался в качестве имени файла выброса. Я считаю, что fubar стал foobar, потому что PDP-6 поддерживал шесть имена персонажей, хотя я всегда предполагал, что термин мигрировал в DEC из MIT. В те дни в DEC было много типов MIT, некоторые из которых работали с 7090/7094 CTSS. Поскольку 709x также был 36-битной машиной, foobar, возможно, использовался в качестве общего имени файла.
также было распространено использовать foo для заполнения буфера при редактировании с помощью TECO. Текстовая строка для точного заполнения одного блока диска была IFOO$HXA127GA$$. Почти все программисты PDP-6/10, с которыми я работал, использовали эту же командную строку.
использование FOO и BAR в качестве примера имен переменных восходит, по крайней мере, к 1964 году и IBM 7070. Это тоже может быть старше, но именно там я впервые увидел его. Это было в ассемблере. Каким будет эквивалент целого числа FORTRAN? Ифу и Ибар?
самый ранний ассемблер PDP-1 использовал два символа для символов (18-битная машина) программисты всегда оставляли несколько слов в качестве патча для устранения проблем. (Перейти к патч пространства, сделать новый код, прыгать назад) это пространство условно называлось FU: который стоял для Fxxx вверх, место, где вы исправили Fxxx ИБП. Когда его произносили, он был известен как Fu space. Позже ассемблеры (например, Мидас разрешил три тега char, так что FU стал FOO, и, как все программисты PDP-1 скажут вам, что это было пространство FOO.
на стороне IBM Foo (FU)BAR используется сторона бара в качестве Базового регистра адресов; в середине 1970-х годов программистам CICS пришлось беспокоиться о различных xxxBARs. Думаю, одним из них был ФРАКТБАР.