Книга Игра в имитацию - Эндрю Ходжес
Шрифт:
Интервал:
Закладка:
Алан, Робин и Ник придумали новую игру с незамысловатым названием «Подарки». Один человек выходил из комнаты, а другие составляли список подарков, которые, по их мнению, он хотел бы получить. Когда ведущий возвращался, он задавал вопросы об этих подарках и должен был их выбирать. Один из подарков в тайне от ведущего назывался «Томми». Когда ведущий выбирал его, раунд заканчивался. Потом мнимые подарки переросли в нечто большее.
Манчестерским инженерам предстояло построить образец компьютера, чтобы в компании Ферранти могли использовать его как прототип. В течение всего 1949 года инженеры, которые теперь могли нанимать новых сотрудников, занимались усовершенствованием малой экспериментальной машины. К апрелю у нее появилось еще три электронно-лучевых трубки для оперативной памяти и устройство умножения, а магнитный барабан к тому времени уже был опробован. Каждое машинное слово на электронно-лучевой трубке теперь содержало 40 бит, 20 из них занимала инструкция.
Ньюман изобрел гениальное решение, как можно во всей красе продемонстрировать машину, у которой крохотная память, зато есть умножающее устройство. Решением был поиск больших простых чисел. В 1644 году французский математик Мерсенн предположил, что числа 217 — 1, 219 — 1, 231 — 1, 267 — 1, 2127 — 1, 2257 — 1 должны быть единственными простыми числами в своем диапазоне. В XIIX веке Эйлер доказал, что одно из них — 231 × 1 = 2,146,319,807 — действительно простое. Но чтобы доказать то же самое в отношении других чисел, нужна была новая теория. В 1976 году французский математик Лукас нашел способ вычислить, является ли простым 2p — 1, с помощью возведения в квадрат и избавления от остатков. Он объявил, что число 2127 — 1 было простым. В 1937 году выяснилось, что в теории Мерсенна была ошибка, поэтому число, найденное Лукасом, так и осталось самым большим простым из известных.
Метод Лукаса был как будто специально создан для компьютера, который оперирует двузначными числами. Ньюман объяснил Тутиллу и Килберну задачу, и в июне 1949 года они создали программу, которая помещалась в четыре запоминающие электронно-лучевые трубки и все еще оставляла место для вычислений до P = 353. По пути они проверили все, что успели сделать Эйлер и Лукас, но больше простых чисел не обнаружили.
В это время между инженерами и математиками был заключен нелегкий договор о союзе, две стороны разделили обязанности. Ньюман начал проявлять немного больше интереса к самой машине, а Алан взял на себя роль математика и составил список команд, которые должен выполнять компьютер, хотя инженеры в итоге этот список сократили. При этом в создании самой логической конструкции он участия не принимал — здесь все сделал Тутилл. Но у Алана был контроль над механизмом ввода и вывода, который предназначался для пользователя.
В НФЛ он занимался перфокартами, поэтому здесь взял на себя задачу создать телетайп, который потом можно будет использовать на принтере. Конечно же, он был очень хорошо знаком с системой телепринта Блэтчли и Хэнслоупа, который работал от батареи и «частенько заменял 1 на 0». Все знали, что перфоленты он взял в месте, о котором нельзя было говорить. После того, как все это было соединено вместе, 32 комбинации из нулей и единиц в ленте телетайпа стали языком Манчестерской машины.
Работа Алана заключалась в том, чтобы сделать машину удобной в использовании, однако его понятия об удобстве не всегда совпадали с понятиями окружающих. Конечно же, он раскритиковал принцип, по которому работал Уилкис: он предполагал, что аппаратура должна быть такой, чтобы пользователю было просто отслеживать команды. Так, буква А была символом для добавления команды. Алан, напротив, считал, что удобство должна обеспечивать программа, а не оборудование. Еще в 1947-м году он говорил о вопросах удобства как о «небольших дополнительных деталях» и подчеркивал, что все можно решить «с помощью бумажной работы». Теперь, в Манчестере, он мог доказать это на практике в работе с машиной, которая не была построена так, чтобы обеспечивать удобство программисту. Как бы то ни было, к 1949 году он уже потерял интерес к такому виду работы. Ему казалось, что не стоит беспокоиться о «маленьких дополнительных деталях» при переводе из двоичной системы исчисления в десятичную. Ему было легко работать с позиционной системой счисления с основанием 32, и Алану казалось, что так же должно быть и для всех остальных.
Чтобы использовать позиционную систему счисления с основанием 32, было необходимо найти 32 символа для 32 разных «цифр». За основу он взял систему, которая уже использовалась инженерами, в ней они передавали 5-битные комбинации, согласно коду Бодо. Таким образом, цифра «двадцать два», соответствующая последовательности 10110 двоичных цифр, была бы записана, как «Р», это буква, которая в последовательности 10110 зашифрована для обычного телепринтера. Работа в этой системе означала запоминание кода Бодо и выраженной в нем таблицы умножения, что он и лишь немногие другие могли сделать с легкостью.
Официальной причиной выбора этого примитивного метода кодирования, которая влекла за собой кропотливую работу для пользователя, стало то, что благодаря электронно-лучевой трубке можно и даже нужно было проверять содержимое запоминающего устройства путем «подглядывания», как говорил Алан. Он настаивал на том, что увиденные пятна на трубке должны были цифра за цифрой соответствовать написанной программе. Для того чтобы поддержать этот принцип последовательности, было необходимо выписать позиционную систему счисления с основанием 32 в обратном порядке, так, чтобы наименее значимая цифра шла впереди. Это делалось по техническим причинам, которые также предполагали считывание электронно-лучевых трубок слева направо. Еще одна проблема возникла из-за 5-битной комбинации, которая не соответствовала никакой букве алфавита в коде Бодо. (Это была та же проблема, что и с системой Rockex). Поэтому Джефф Тутилл уже ввел дополнительные символы. Ноль в позиционной системе счисления с основанием 32 был представлен, как «/». В результате целые страницы программ были покрыты такими чертами, в Кэмбридже говорили, что это соответствовало ливням за окнами в Манчестере.
К октябрю 1949 года манчестерская машина была готова, за исключением деталей, которые должен был сделать Ферранти. Пока машина собиралась, на прототипе для экономии времени было решено написать руководство по использованию, а также основные программы, которые можно было бы использовать на компьютере (в будущем он будет называться Марк I).
Это уже было следующей задачей Алана. Наверняка, он потратил много времени на проверку каждой функции на прототипе и спорил об их эффективности с инженерами. К октябрю он написал программу ввода для того, чтобы при первом включении компьютер мог читать информацию с лент, сохранять ее в нужном месте и начать ее использовать.
Но это была работа не для него, на данном этапе Руководство Handbook7, которое он написал для программистов, содержало множество полезных и практичных советов, а также несколько новых идей. Но на самом деле, в нем не было ничего и близко напоминающего его работу в Национальной физической лаборатории Великобритании (НФЛ) с числами с плавающей точкой. Он также ничего не сделал и с подпрограммами. В манчестерском проекте существовало два вида памяти: на машине Ферранти было восемь электронно-лучевых трубок, каждая из них содержала 1280 цифр и магнитный барабан, который предполагал не менее 655360 цифр, расположенных в 256 рядах по 2560 цифр в каждом. Программирование заключалось в процессе передачи данных и программ из барабана в трубки и обратно. Предполагалось, что каждая подпрограмма будет храниться на новом ряду барабана и будет перемещаться согласно требованиям. Схема Тьюринга затрагивала эту тему, но не вдавался в подробности. В своем Руководстве он небрежно написал: