Книга Игра в имитацию - Эндрю Ходжес
Шрифт:
Интервал:
Закладка:
Столь оригинальное восприятие проистекало из самой универсальности машины, которую предполагалось использовать для любого типа «определенного метода», не обязательно арифметического. Импульсы «1101», хранимые в линии задержки, могли не соотноситься каким-либо образом с числом «тринадцать», а воплощать шахматный ход или фрагмент кода (шифра). Либо, даже если машина занималась арифметическими вычислениями, импульсы «1101» могли не представлять «тринадцать», а указывать на возможную погрешность порядка 13 единиц или обозначать тринадцать в представлении чисел с плавающей запятой, либо еще что-либо, по выбору пользователя машины. Алан с самого начала сознавал, что сложение и умножение не сводились к подаче импульсов на вход сумматора или умножителя аппаратного обеспечения. Импульсы нужно было упорядочить, расшифровать, распределить и свести вместе снова сообразно той схеме, по которой они использовались. Особенно подробно Алан рассмотрел вопрос выполнения арифметических задач в формате с плавающей запятой; он показал, что даже простое сложение двух числе с плавающей запятой требует целой таблицы команд. Алан написал несколько таблиц такого типа. Таблица MULTIP, например, имела целью умножение двух чисел, закодированных и хранимых в формате с плавающей запятой, и кодирование и сохранение результата. Его таблицы зиждились на этой «очень действенной» возможности машины самой транслировать с языка ассемблера в машинный язык биты необходимых команд и затем выполнять их.
Но если даже такая простая операция, как умножение чисел с плавающей запятой, требовала набора команд, тогда процедура любого полезного масштаба должна была включать сведение множества таких наборов команд вместе. Алан представлял себе это не как связывание таблиц, а как иерархию, в которой второстепенные таблицы команд, типа MULTIP, обслуживали бы «главную» таблицу. В качестве конкретного примера главной таблицы он привел таблицу под названием CALPOL, задачей которой было вычисление пятнадцатой степени многочлена в формате с плавающей запятой. Каждый раз, когда требовалось произвести умножение или сложение, она должна была задействовать второстепенной таблицы. Осуществление этого процесса вызова и обратной отсылки второстепенных таблиц само по себе требовало команд, как видел это Алан:
Чтобы начать выполнение второстепенной операции (подпрограммы), нам необходимо отметить только место, где мы покинули главную программу. Когда второстепенная операция завершена, мы находим это место и продолжаем выполнять основную операцию. Каждая из этих второстепенных операций (подпрограмм) должна оканчиваться командой, определяющей упомянутое место. Вопрос — как скрывать и отыскивать это место? Есть несколько способов. Одни из них — сохранить список таких мест на одной или нескольких линий задержки стандартной длины… самое свежее место сокрытия должно быть в нем последним. Указание на нахождение этого последнего места будет храниться на короткой линии задержки, и эта отсылка будет меняться каждый раз, когда будет начинаться или завершаться второстепенная операция. Процессы сокрытия и отыскания довольно замысловаты, зато, к счастью, отпадает необходимость повторять каждый раз команды; сокрытие производится посредством стандартной таблицы команд BURY [скрыть], а отыскание — с помощью таблицы UNBURY [раскрыть].
Возможно, свое представление о сокрытии и отыскании (раскрытии) Алан почерпнул из истории о серебряном слитке. Это была совершенно новая идея. Фон Нейман рассуждал только в ракурсе проработки последовательности команд.
Концепция иерархии таблиц расширяла возможности модификации программы. Так, например, Алан предлагал «держать таблицы команд в сокращенной форме и развертывать их каждый раз, когда мы захотим» — эту работу выполняла бы сама машина, используя таблицу под названием EXPAND [развернуть, расширить]. Чем дальше он развивал идею иерархии таблиц, тем отчетливей он сознавал, что АВМ можно было бы использовать для подготовки, сопоставления, упорядочения и структурирования своих собственных программ. Тьюринг писал:
Таблицы команд должны создаваться математиками с опытом вычислительной работы и, пожалуй, определенной способностью решать головоломки. Придется проделать большой объем работы подобного типа, поскольку каждое известное действие должно быть на каком-то этапе преобразовано в форму таблицы команд. Эта работа будет вестись, пока создается сама машина, чтобы можно было сразу запустить машину и получить результаты. Отставание в работе по созданию таблиц команд в силу всяких неизбежных загвоздок и затруднений допускается до того момента, когда лучше оставить эти затруднения, как есть, чем тратить время на их устранение (сколько десятков лет на это уйдет?). Этот процесс создания таблиц команд должен быть очень увлекательным. Страшиться его не следует, как, впрочем, и не следует превращать его в рабский труд, так как все процессы, которые по сути своей являются механическими, могут быть возложены на саму машину.
Не удивительно, что Алан расценивал процесс написания программ (таблиц команд), как «очень увлекательный». Ведь он создал нечто очень оригинальное и при том именно свое. Он изобрел искусство компьютерного программирования. Это был полный разрыв со старомодными арифмометрами — о которых он, в любом случае, знал немногое. Они объединяли суммирующие и умножающие механизмы, да еще они заправлялись бумажной лентой, без которых они не работали исправно. Они были машинами для совершения арифметических действий, для которых логическая структура была лишь обременением. АВМ была принципиальной иной машиной. Она задумывалась, как машина, выполняющая программы «каждого известного действия». Акцент делался на логическое структурирование и управление процессом работы, а арифметические устройства добавлялась только ради быстрого доступа к наиболее часто использующимся операциям.
На настольных счетных машинах цифры от 0 до 9 становились видны на регистрах и клавиатуре, и у оператора могло возникать ощущение, будто каким-то образом цифры хранятся в самой машине. В действительности, в них не было ничего, кроме колес и рычагов управления, однако иллюзия присутствия цифр в машине была сильна. Эта иллюзия отличала и большие релейные счетные машины, и машины Эйкена и Стибица, и ЭНИАК. Даже в докладе о машине ЭДВАК сохранялось ощущение, будто импульсы в линиях задержки будут на самом деле числами. Однако концепция Тьюринга несколько отличалась и имела более абстрактный вид. В АВМ импульсы могли восприниматься, как представляющие числа, либо команды. Хотя это все было, конечно, только в уме наблюдателя. Машина работала, как указывал Алан, «не думая», и на самом деле оперировала не числами и не командами, а электронными импульсами. Человек мог «делать вид, будто команда была числом», поскольку сама машина ничего не знала ни об одном, ни о другом. Соответственно, он мог свободно допускать в мыслях соединение данных и команд, управление командами, вводе таблиц команд посредством других команд «высшего порядка».
Причина готовности Алана к применению столь вольного подхода была. С того самого момента, когда Тьюринг впервые задумался о математической логике, он воспринимал математику как игру, в которую играют знаками на бумаге, не считаясь с их «значением» и по правилам, напоминающим шахматные. Такой взгляд Алана на математику подпитывал подход Гильберта. Теорема Геделя бодро смешала «числа» и «теоремы». И в статье «О вычислимых числах» таблицы команд представлялись, как «описательные числа». Его доказательство существования нерешаемых задач опиралось на это смешение чисел и команд на трактовке и тех, и других, как абстрактных символов. Посему это был маленький шаг считать команды (инструкции) и таблицы команд «зерном для помола» на собственной мельнице Алана.