История Мэла — архетипический фрагмент фольклора компьютерного программирования . Ее герой, Мелвин Кей , [1] — образцовый « настоящий программист », чьи тонкие приемы завораживают его коллег.
В книге Эда Натера «История Мела» подробно описывается необычайное мастерство программирования его бывшего коллеги «Мела» в Royal McBee Computer Corporation . [2] [3] Хотя изначально история Натера была написана прозой, кто-то ее переделал в форму «свободного стиха», которая получила широкое распространение. [4] [5]
О Меле Кейе известно немного, за исключением того факта, что ему приписывают создание «большой части программирования» компилятора ACT-1 1959 года для компьютера Royal McBee LGP-30 . [6] [7] В истории Нейтера Кей изображён склонным избегать оптимизации ассемблеров в пользу создания кода, использующего особенности оборудования, например, используя вращение барабанной памяти LGP -30, чтобы избежать записи циклов задержки в код.
История, написанная Натером, включала работу Кейя по переписыванию программы для блэкджека с LGP-30 на более новую систему Royal McBee, RPC-4000 ; руководители отдела продаж компании попросили изменить программу так, чтобы они могли переключить переключатель на передней панели и заставить программу проиграть (а пользователя выиграть). Кей неохотно согласился на просьбу, но, к его собственному удовольствию, он ошибся в тесте , и переключатель вместо этого заставил программу каждый раз выигрывать (а пользователя проиграть).
После ухода Кейя Натеру было поручено исправить ошибку. При изучении кода он был озадачен, обнаружив, что он содержал то, что казалось бесконечным циклом , однако управление не оставалось внутри цикла. В конце концов он понял, что Кей использовал самомодифицирующийся код для обработки элементов массива и закодировал цикл таким образом, чтобы воспользоваться переполнением Integer . Добавление 1 к полю адреса инструкции, которая ссылалась на адрес x, обычно просто изменяло адрес на x +1. Но когда x уже был максимально возможным адресом, не только адрес переходил к 0, но и 1 переносилась в биты, из которых должен был считываться код операции — в этом случае код операции менялся на «перейти к», так что полная инструкция становилась «перейти к адресу 0». Это так впечатлило Натера, что из уважения он отказался от задачи и сообщил, что не может найти ошибку.
Натер пересказал эту историю по памяти более 20 лет спустя. Известно, что некоторые технические детали неверны, включая местоположение бита флага «Индекс» в командном слове; использование его Кейем, по-видимому, дало Натеру важную подсказку о том, что использовался трюк с кодированием. Тем не менее, существуют правдоподобные хаки, которые Кейем мог реализовать на реальном RPC-4000 и которые в значительной степени соответствуют рассказу Натера. [8]
Ранние компьютеры конструкции машин IAS не имели индексного регистра. Использование самомодифицирующегося кода было необходимо для операций с массивами. Инструкция LGP-30 y 2000
действительно «заменяла содержимое адресной части слова в ячейке памяти 2000 содержимым адресной части слова в аккумуляторе», чтобы облегчить написание самомодифицирующегося кода. [9]
Первоначально эссе было опубликовано в новостной группе Usenet "net.followup" 21 мая 1983 года пользователем utastro!nather ( адрес электронной почты UUCP Эда Натера в то время). [2] [3]
Компьютеры Royal McBee были разработаны и изготовлены Librascope , а документация, написанная для программы блэкджека , была написана Мелом Кейем из Librascope Inc. В выпуске The Librazette за август 1956 года , информационном бюллетене Librascope, содержится история об обучении на LGP-30, и упоминается, что некоторые инженеры по приложениям Librascope были переведены в штат Royal McBee. Среди названных инженеров есть Мел Кейем. [1]
На первой странице этого выпуска есть фотография, на которой запечатлен первый класс новичков-программистов LGP-30 и инструкторов, включая Мела Кея. [10]
{{cite journal}}
: CS1 maint: DOI неактивен по состоянию на ноябрь 2024 г. ( ссылка )