Вычисления в докомпьютерную эпоху

Великий почин

Природа научных знаний такова, что малопонятные и совершенно бесполезные приобретения сегодняшнего дня становятся популярной пищей для будущих поколений

Чарльз Бэббидж

Чем только не занимался британский ученый и изобретатель Чарльз Бэббидж (1791–1871)! Математик по образованию (Кембриджский университет), он написал 18 математических статей, большинство из которых посвящены созданию аппарата, аналогичного дифференциальному и интегральному исчислениям, в котором роль переменной должна играть функция[1]. Кроме того, Бэббидж был пионером научных методов исследования производства, автором работ по вопросам налогообложения, страхования, статистики, криптологии; он изучал геологические, оптические и электромагнитные явления, изобрел динамометр для измерения силы тяги паровоза, коронограф и сконструировал офтальмоскоп; составил таблицу логарифмов чисел от 1 до 108 000, создал поперечно-строгальный и токарно-револьверный станки, предложил метод изготовления зубчатых колес литьем под давлением и многое, многое другое… И все же главным делом его жизни были вычислительные машины – предмет его гордости и жесточайших разочарований, превративших жизнерадостного и общительного человека в желчного мизантропа.

Чарльз Бэббидж в начале 1870-х

Чарльз Бэббидж в начале 1870-х (с сайта www-history.mcs.st-andrews.ac.uk)

Еще полвека назад имя ученого было известно лишь узкому кругу специалистов, но для современных компьютерщиков Бэббидж – культовая фигура, и редкий учебник по ВТ обходится без упоминания или краткого описания его пионерских работ. О Бэббидже написан десяток книг[2], издано 11-томное собрание его сочинений, в Миннеаполисе (США, шт. Миннесота) основан Институт Чарльза Бэббиджа, занимающийся вопросами истории ВТ… Мог ли предвидеть великий и непонятый обществом провидец, что его ждет такая посмертная слава?

Бэббидж разработал две вычислительные машины – Разностную (Difference Engine) и Аналитическую (Analytical Engine). Первая из них предназначалась для табулирования функций по способу конечных разностей, хорошо известному в численном анализе. Бэббидж видел в ней средство повышения точности вычисления различных таблиц, находивших в его время большое практическое применение. По замыслу автора, Разностная машина должна была табулировать функции с постоянными шестыми разностями с точностью до 18 знаков и состояла из вычислительной и печатающей частей. Я не буду останавливаться на описании машины[3] и лишь отмечу, что числа в ней представлялись с помощью регистров, состоящих из вертикально расположенных и находившихся на одной оси 18 десятизубчатых колес, и что ее арифметические способности были невелики – она выполняла лишь операцию сложения.

От предшествовавших механических счетных машин Разностная машина отличалась тем, что в процессе вычислений не требовала вмешательства человека, но так же, как и они, обладала ограниченными возможностями. Она, пользуясь современной терминологией, представляла собой специализированное вычислительное устройство с фиксированной программой действий: установив в регистрах машины некоторые исходные данные, можно было табулировать функцию только одного вида. Чтобы перейти к вычислению другой функции, требовалось вмешательство человека – он должен был ввести в регистры новые исходные данные.

Замысел Разностной машины возник у Бэббиджа в 1820-м или 1821 году. Благодаря поддержке научных кругов и некоторых знатных особ ему удалось получить у правительства средства для найма чертежников и рабочих и в январе 1832 г. собрать и успешно испытать часть машины, которая содержала более 2000 деталей и могла рассчитывать полиномы с постоянными разностями третьего порядка. Далее, однако, работа застопорилась: Бэббидж рассорился и прекратил всякие отношения со своим "главным инженером" – выдающимся машиностроителем Джозефом Клементом (Joseph Clement, 1779–1884), правительство со скрипом выделяло средства для завершения постройки машины, а в ноябре 1842 г. объявило, что, затратив на поддержку Бэббиджа 17 000 фунтов (6000 он вложил сам), прекращает финансирование столь дорогостоящего проекта.

Собранная часть Разностной машины (январь 1832)

Собранная часть Разностной машины (январь 1832)

Но еще ранее, в середине 1834 г., Бэббидж оказался во власти новой грандиозной идеи – идеи построения универсальной вычислительной машины! Во время своего вынужденного простоя он понял, что Разностная машина – это лишь первый и весьма робкий шаг на пути к автоматизации вычислений, и задумал создать машину, которая вычисляла бы не только таблицы, но и решала бы все многообразие тех задач, с которыми регулярно сталкиваются математики и инженеры. В течение двух следующих лет он разрабатывает основные принципы построения и первый вариант конструкции новой машины, названной им "Аналитической" и являющейся прообразом универсальных цифровых вычислительных машин, появившихся более чем через столетие!

По словам Генри Превоста Бэббиджа, сына ученого, его отец пришел к концепции Аналитической машины путем следующих рассуждений. При табулировании функций приходится время от времени заменять значение последней разности, причем это делается в зависимости от результата в "регистре таблицы". Бэббидж попытался автоматизировать эту замену, предложив круговую конструкцию Разностной машины, в которой регистры "последней разности" и "таблицы" располагались бы рядом, а "регистр таблицы" управлял бы ходом вычислительного процесса[4].

Прежде чем рассмотреть устройство и принцип действия Аналитической машины, замечу, что в работе над нею было два периода. Временные рамки первого – середина 1834-го – конец 1848-го. Эти годы Бэббидж посвятил разработке различных вариантов построения (компоновки) машины, а также полного комплекта ее чертежей: он еще питал угасавшую с каждым годом надежду, что правительство согласиться финансировать изготовление новой машины. Характерно, что Бэббидж отказался от ее макетирования и экспериментально проверял только работоспособность отдельных узлов; по-видимому, он был полностью уверен в правильности выбранного им пути и в качестве чертежей.

Второй период начался в январе 1857 г. и продолжался почти до самой смерти ученого. В это время Бэббидж генерирует все новые и новые идеи, касающиеся, с одной стороны, упрощения конструкции машины, а с другой – внесения в нее изменений, увеличивающих вычислительные возможности и все больше приближающих ее к средствам современной ВТ. Кроме того, пытаясь удешевить изготовление машины, он предлагает и успешно реализует новые технологии – штамповку и литье зубчатых колес.

В течение первого периода Бэббидж сформулировал несколько основополагающих принципов построения машины, не всегда напрямую связанных с технической реализацией.

  1. Прежде всего он отделил устройство для хранения чисел от устройства, предназначенного для выполнения арифметических операций (в Разностной машине они были совмещены).
  2. Дальнейшее развитие этого принципа позволило Бэббиджу предложить совершенно новую структурную организацию машины. В ее состав должны были входить:
    • "склад" (store) для хранения чисел (по современной терминологии – запоминающее устройство, память);
    • "мельница" (mill) для выполнения арифметических операций –арифметическое устройство;
    • устройство, управляющее в определенной последовательности действиями машины (автор не дал ему названия, но сейчас оно называется устройством управления);
    • устройства ввода и вывода данных.
  3. Бэббидж рассматривал возможность представления чисел в машине не только в десятичной системе счисления, но и в системах с основанием 2, 3, 4, 5 и 100. Он пришел к выводу, что при использовании двоичной системы потребовалось бы иметь в каждом регистре слишком большое число колес (если сохранять ту же разрядность "машинного слова"). С другой стороны, использование системы с основанием 100 позволило бы сделать "склад" более компактным, но привело бы к тому, что арифметические операции выполнялись слишком медленно.
  4. Чтобы обеспечить большой диапазон представимых в машине чисел и достичь высокой точности вычислений, Бэббидж планировал создать "склад", способный хранить от 100 до 1000 чисел по 40–50 десятичных знаков в каждом ("что позволяет иметь некоторый запас по отношению к наибольшему числу, которое может потребоваться"), и "мельницу", соответствующую этой разрядности. Для сравнения скажу, что емкость запоминающего устройства одной из первых английских ЭВМ EDSAC составляла 250 десятиразрядных чисел.
  5. Оценивая возможности будущей машины, Бэббидж предположил, что она может быть использована для выполнения операций не только над числами, но и над алгебраическими выражениями. 10 июля 1836 г. он записал в своей рабочей тетради: "Сегодня я пришел к общей, но еще не совсем четкой концепции создания машины, вырабатывающей алгебраические (курсив Бэббиджа. – Ю. П.) формулы… Я имею в виду, что она должна это делать без обращения к конкретным числовым значениям алгебраических символов".
  6. Кроме того, Бэббидж высказал соображения, чрезвычайно важные для современного программирования: предложил идеи "цикла" (правда, не дал ему названия), "библиотеки подпрограмм", операции "условной передачи управления" (о последней будет подробнее сказано позднее).
Часть Аналитической машины – “мельница” и печатающее устройство

Часть Аналитической машины – “мельница” и печатающее устройство (с сайта) www.virtualtravelog.net)

Конечно, перечисленным выше не исчерпываются все "вычислительные" идеи Бэббиджа. Он, например, предложил вариант Аналитической машины с двумя "мельницами", каждая их которых, работая параллельно, выполняла бы вычисления над 30-разрядными числами; будучи соединены между собой, они смогли бы обрабатывать числа с вдвое большей разрядностью.

Бэббидж, как уже говорилось, предложил множество вариантов компоновки машины (он называл их "планами"). В качестве примера рассмотрим "План № 16", датированный августом 1840 г.

Для хранения чисел в "складе" использовались регистры (колонки), состоявшие из десятизубчатых колес. Каждое из них, расположенное на общей для колонки оси, могло совершать независимые вращательные движения и останавливаться в одном из десяти положений, "запоминая" таким образом один десятичный знак. Для указания алгебраического знака числа использовалось самое верхнее колесо регистра. Колеса располагались по обе стороны от группы зубчатых реек, которые передавали числа со "склада" в "мельницу". Для того чтобы "считать" число из памяти, рейки продвигалась до тех пор, пока соответствующие колеса в "складе" не занимали "нулевое" положение. Уменьшение числа до нуля на одном регистре заставляло поворачиваться колеса другого на такую же величину, и тем самым осуществлялась "запись" числа в "мельницу". При этом число, хранившееся в памяти, "стиралось", однако при желании могло быть восстановлено: для этого рейки при своем обратном движении вводились в зацепление с необходимыми колесами.

Описанный способ передачи чисел с помощью зубчатых реек Бэббидж считал одним из своих важнейших изобретений. Однако в связи с тем, что рейки имели большую длину[5], возникла чисто техническая трудность: чтобы обеспечить перемещение реек с небольшим усилием, в зубчатых зацеплениях должны были быть люфты, однако при большом пути движении реек эти люфты "накапливались", что приводило к сбоям в работе машины. Бэббидж преодолел эту трудность, использовав ряд "стопоров" – клиньев, которые входили между зубьями колес и фиксировали их в "правильном" положении.

"Мельница" имела примерно 2 м в диаметре и около 5 м в высоту. Она состояла из ряда регистров, аналогичных регистрам памяти и расположенных вокруг группы "центральных колес". Эти колеса использовались для передачи чисел внутри "мельницы" и выполняли, таким образом, функции зубчатых реек. "Стирание" числа из "мельницы" не всегда оказывалось желательным, поэтому в ней большинство регистров состояло из двух групп колес: одна группа принимала числа, а другая служила для их передачи в другие узлы и блоки машины. Входной и выходной регистры использовались в качестве буферов при передаче чисел между "складом" и "мельницей". "Головной" и "замыкающий" регистры вместе образовывали накопитель двойной длины (для данного варианта плана – 80-разрядный), который предназначался для хранения произведения при умножении, а также делимого и остатка при делении.

"Базовыми" арифметическими операциями в Аналитической машине были сложение и вычитание. Чтобы сделать выполнение этих операций единообразным, Бэббидж заменил операцию вычитания на операцию сложения с десятичным дополнением вычитаемого. С этой целью он использовал регистр, в котором накапливались частичные суммы, представленные в дополнительном коде. Операнд передавался со "склада" в буферный регистр, а затем суммировался с числом, находившимся в этом регистре. Если результат суммирования (вычитания) необходимо было сохранить в памяти, то он предварительно передавался в другой буферный регистр, преобразовывался в случае необходимости в прямой код и затем "записывался" в "склад". Суммирование выполнялось в две фазы – сложения и переноса. Если колесо регистра переходило от положения "9" в положение "0", то сдвигался особый рычаг, что означало необходимость десятичного переноса в следующий (старший) разряд.

Операция умножения начиналась с того, что с помощью специального механизма предварительно определялся сомножитель, имеющий меньшее число значащих цифр (он становился множителем). После этого множимое извлекалось из памяти и последовательно суммировалось с самим собой, образуя первые девять кратных значений, которые запоминались в регистрах. Затем "считывалась" первая цифра множителя (начиная с младшего разряда), и содержимое одного из этих регистров, соответствующее значению "считанной" цифры, помещалось в сдвоенный регистр, в котором накапливались частные произведения. Процесс повторялся со следующей цифрой множителя с той разницей, что очередное кратное сдвигалось в сдвоенном регистре на один разряд влево и суммировалось с первым частным произведением и т. д. Результат умножения из регистра пересылался в "склад". Отдельные операции, выполняемые в процессе умножения, перекрывали друг друга во времени, так что время, необходимое для получения каждого частного произведения, оказывалось равным времени сложения двух чисел.

Операция деления выполнялась аналогичным образом. Сначала формировались кратные значения делителя. Две старшие цифры остатка, находящегося в сдвоенном регистре, сравнивались одновременно с двумя старшими цифрами всех кратных значений делителя для того, чтобы оценить, правильно ли определена очередная цифра частного. Если в результате сравнения оказывалось, что эта цифра больше необходимой, то выбранное кратное значение делителя вычиталось из остатка; при отрицательном значении результата вычитания к нему вновь добавлялся делитель, образуя новый остаток. Затем новый остаток сдвигался на один разряд, и процесс повторялся. Как и при выполнении умножения отдельные "микрооперации" перекрывали друг друга во времени, так что время одного шага деления оказывалось равным времени сложения (вычитания) двух чисел вне зависимости от того, правильно ли было сделано предположение о значении цифры частного. Самые верхние ("знаковые") колеса регистров "мельницы" не были соединены с устройствами переноса. Если на цифровых роликах этих колес находилось четное число, то знак числа считался положительным, в случае нечетного числа – отрицательным. При умножении знак образовывался сложением чисел на верхних колесах, при делении – вычитанием этих чисел.

Операцию извлечения квадратного корня Бэббидж первоначально намеревался выполнять "аппаратными" средствами, но затем отказался от этого плана и для осуществления данной операции решил использовать метод последовательных итераций. Для этого он разработал упрощенную схему выполнения операций умножения и деления, которая позволяла получать произведение или частное с ограниченным числом знаков (на первых шагах итеративного процесса не требовалось иметь большое число значащих цифр в результатах вычислений).

Поскольку в Разностной машине время, затрачиваемое на фазу сложения, было значительно меньше времени, необходимого для выполнения последовательного переноса десятков, Бэббидж упорно работал над усовершенствованием механизма переноса. Он придумал множество вариантов его исполнения, пока не понял, что для кардинального ускорения процесса нужен совершенно новый принцип, и предложил схему "переноса с предварением" (по современной терминологии "сквозного переноса") – изобретение, которым он особо гордился. Название "перенос с предварением" объясняется тем, что если на некотором колесе была "девятка", то возникший сигнал переноса в этот разряд "обходит" его, попадая сразу в следующий, и т. д. Благодаря этому значительно сокращается время переноса. В целом операции сложения или вычитания выполнялись за один оборот главного приводного вала машины.

Еще одно изобретение Бэббиджа связано с принципом построения устройства управления, имевшего в Аналитической машине иерархическую структуру. На нижнем уровне управление осуществлялось с помощью ряда "барабанов" (barrels), к поверхности которых на различной высоте болтами были прикреплены особые штифты, имеющие в сечении прямоугольную форму. Когда "барабаны" вращались, каждый ряд этих штифтов воздействовал на определенные рычаги, которые, в свою очередь, передавали механическую энергию от главного вала машины ее различным механизмам. Бэббидж предполагал использовать в машине до семи "барабанов", причем каждый из них мог содержать от 50 до 100 рядов штифтов (до 200 в каждом ряду).

На верхнем уровне управления Бэббидж решил использовать механизм, аналогичный механизму ткацкого станка Жаккара. Так как он играет принципиальную роль в работе машины, полезно сначала коротко ознакомиться с его действием.

Ткань представляет собой переплетение взаимно перпендикулярных нитей. Нити основы (продольные) продеты через глазки – отверстия в проволочных петлях (ремизках), прикрепленных по нескольку штук к расположенным на раме крючкам. При самом простом переплетении петли поднимаются через одну, приподнимая продетые через них нити основы. Между поднятыми и оставшимися на месте нитями образуется промежуток, в который челнок протягивает за собой нить утка (поперечную), после чего поднятые петли опускаются, а остальные – поднимаются. Если нужен более сложный узор, переплетения петли следует приподнимать в различных других комбинациях. Сын лионского ткача Жозеф Мари Жаккар (1752–1834) после настойчивой тридцатилетней работы изобрел в 1801 г. механизм, позволявший автоматизировать движение петель в соответствии с заданным законом. Для этого он использовал цепочку из связанных между собой веревочными петлями картонных карт, в которых пробиты отверстия. В станке Жаккара крючки соединены с длинными иглами, упирающимися в карту. Встречая отверстие, иглы продвигаются, в результате чего соответствующие глазки приподнимаются. Иглы, упирающиеся в карты в том месте, где отверстий нет, остаются на месте вместе со связанными с ними крючками. Таким образом, промежуток для челнока, в который протягивается уток, а тем самым и узор переплетения нитей, определяется набором отверстий на соответствующих картах.

Идея Бэббиджа заключалась в том, чтобы заставить два жаккаровских механизма (с цепочкой карт в каждом) управлять работой машины путем передачи определенных воздействий на барабаны. Один механизм с "картами операции" должен был приводить в движение тот барабанчик, который управлял работой "мельницы" и выполнением той или иной арифметической операции в зависимости от отверстий, пробитых в соответствующей карте. Второй механизм должен был работать с "управляющими картами", которые управляли "барабанами", приводившими в действие механизм переносом чисел из "склада" в "мельницу" и обратно (Бэббидж называл их "картами переменных"), а также управлявшими вводом новых чисел в "склад" и выводом результатов вычислений на печать ("цифровые карты"). В машине использовались три разновидности "карт переменных": "поставляющие карты"[6] предназначались для передачи чисел из памяти в арифметическое устройство, "нулевые карты" обеспечивали передачу чисел со "склада" на "мельницу", причем при этом содержимое соответствующего регистра становилось равным нулю (осуществлялось стирание регистра), а "сохраняющие карты" служили для того, чтобы содержимое регистра оставалось прежним после передачи чисел. С помощью "цифровых карт" в машину могли вводиться не только числа, необходимые для решения конкретной задачи, но и константы, логарифмические и другие таблицы.

О движении карт при выполнении операций Бэббидж писал так: "Средства, которые я применил, ежедневно используются при ткачестве. Они включают систему карт с различными отверстиями, которые объединяются в массив до достижения любого требуемого объема. Два больших ящика, один из которых пустой, а другой – наполненный картами с отверстиями, располагаются спереди и сзади многогранной призмы. Эта призма прерывисто вращается на своей оси и каждый раз продвигается вперед на короткое расстояние, после чего немедленно возвращается. Карта проходит над призмой только перед каждым ходом челнока. Те карты, что прошли, падают вниз, пока не достигнут пустого ящика для сбора карт, в котором они располагаются одна над другой. При заполнении одной коробки устанавливается другая пустая коробка для приема поступающих карт, а новая полная коробка на противоположной стороне заменяет только что опустевшую. Когда число карт на входной стороне точно соответствует числу карт на выходной, они полностью уравновешивают друг друга, так что вне зависимости от рассчитываемой формулы, крайне сложной или очень простой, сила, которая должна быть приложена, всегда остается почти той же самой".

Остается лишь сожалеть, что Бэббидж не оставил подробного описания того, как взаимодействовали между собой два уровня управления. Однако очевидно, что использование карт и жаккаровского механизма расширяли "программные" возможности Аналитической машины. Например, цикл (если пользоваться современной терминологией) реализовывался путем движения "управляющих карт" вперед или назад. Если карты продвигались вперед, то часть программы пропускалась. Если же они двигались в обратном направлении, то повторялась. Тем самым можно было повторять некоторую последовательность операций нужное число раз.

Другой пример – библиотеки подпрограмм. "За исключением цифровых карт, – писал Бэббидж, – все карты, однажды использованные и изготовленные для одной задачи, могут быть использованы для решения тех же задач с другими данными, поэтому нет необходимости готовить их во второй раз – они могут быть тщательно сохранены для будущего использования. Каждая формула требует своего массива карт, и со временем машина будет иметь собственную библиотеку".

Бэббидж большое внимание уделял вопросам вывода результатов вычислений из машины и предусмотрел для этого несколько способов: печатание одной или нескольких копий конечных или промежуточных результатов, изготовление стереотипного отпечатка, перфорирование на бланках или металлических пластинах. К сожалению, он не оставил указаний на то, как должны стыковаться эти периферийные устройства с соответствующими механизмами машины.

Изобретатель четко представлял, что его машина является универсальным вычислителем, имея в виду, что она способна выполнить любые арифметические вычисления, если для ее работы будет отведено достаточно времени. В доказательство он приводил следующие аргументы.

Во-первых, операции над числами, имеющими большее число знаков, чем предусмотрено в регистрах "склада", могут быть выполнены, если разбить эти числа на сегменты соответствующей разрядности и обрабатывать сегменты по отдельности. Следовательно, конечная разрядность регистров не является принципиальным ограничением.

Во-вторых, вычисления на машине могут иметь любую степень сложности и длительности, если снабдить ее необходимым числом соответствующих "карт операций"; количество операций при этом может производиться в любом порядке и повторяться неограниченное число раз.

В-третьих, ограниченная емкость памяти (число регистров) также не является принципиальным ограничением, поскольку хранящиеся в "складе" числа могут быть отперфорированы на "картах переменных" и при необходимости вновь введены в память (Бэббидж, таким образом, рассматривал эти карты как внешнее запоминающее устройство).

Время выполнения арифметических операций Аналитической машиной оценивалось Бэббиджем так: сложение или вычитание – несколько секунд; умножение (двух 50-разрядных чисел) – 2 мин; деление (100-разрядного числа на 50-разрядное) – 4 мин.

О новом изобретении Бэббиджа стало известно не только в научных кругах его страны, но и за рубежом. В 1840 г. итальянский математик Джованни Антонио Амадео барон Плана (1781–1868), президент Туринской Академии наук, пригласил его принять участие в конференции итальянских ученых. Плана писал о том, что от многих англичан слышал об удивительной вычислительной машине, которую изобрел Бэббидж, и надеется при встрече узнать подробности этого изобретения: "До настоящего времени законодательная часть анализа была весьма мощной, исполнительная – совершенно ничтожной; ваша машина, кажется, предоставляет нам возможность управления исполнением, которую мы имели ранее только над законодательной частью" (курcив Планы. – Ю. П.). Весьма польщенный, Бэббидж собрал имеющиеся чертежи и плакаты, поясняющие действие машины, и отправился в Турин.

Впоследствии он писал: "В комнате заседания были развешаны плакаты с формулами, чертежи и различные иллюстрации, которые я привез с собой. В первый день был представлен краткий набросок идеи. Мои друзья время от времени просили объяснить те места, о которых я выразился недостаточно четко. Плана первым предложил делать заметки с целью описания принципов работы машины. Но собственные напряженные занятия заставили его отказаться от этого замысла и предложить эту задачу своему более юному другу Менабреа" (военный инженер Луиджи Федерико граф Менабреа (1809–1806), впоследствии генерал в армии Гарибальди, а затем премьер-министр Италии, подробно законспектировал выступление докладчика, и через два года в швейцарском научном журнале Bibliotheque Universelle de Geneve появилась его статья "Очерк Аналитической машины, изобретенной Чарльзом Бэббиджем").

На той же конференции, отвечая на вопрос одного из видных итальянских математиков профессора Мосотти, докладчик пояснил, как выполняется операция условной передачи управления. "Он заметил, – вспоминал Бэббидж, – что вполне готов поверить в способность механизма овладеть арифметическими и даже алгебраическими соотношениями в любой нужной степени. Но добавил, что не понимает, как машина может сделать выбор, который часто необходим при Аналитическом исследовании (т. е. в процессе вычислений. – Ю. П.), когда представляются два или более путей, особенно в том случае, когда правильный путь, как это часто бывает, неизвестен до тех пор, пока не проделаны предшествующие вычисления". В ответ Бэббидж сказал, что решение вопроса о выборе одного из двух возможных путей зависит от того, какой знак (плюс или минус) имеет некоторая вычисляемая величина. Если она отрицательна, то это значит, что из меньшего числа вычитается большее. Процесс переноса приведет в этом случае к тому, что на всех местах слева от значимых цифр появятся девятки. Движение механизма переноса, который заставил бы девятку появиться левее самого левого из существующих в машине разрядов, можно использовать для пуска любой требуемой последовательности действий.

Куратор лондонского Музея науки Дорон Суэйд у “Разностной машины 2”

Куратор лондонского Музея науки Дорон Суэйд у “Разностной машины 2” (с сайта www.es.flinders.edu.au), воспроизведенной к 200-летию рождения Чарльза Бэббиджа

Бэббидж многократно, вплоть до июня 1852 г., пытался убедить высоких правительственных чиновников в необходимости выделить средства на постройку Аналитической машины, хотя и понимал тщетность этих попыток. В письме американскому ученому Натаниэлю Баудичу (1773–1838) он писал: "Вы можете оценить влияние такой машины (Аналитической. – Ю. П.) на будущий прогресс науки. Я же живу в стране, которая не в состоянии это понять... Я уже принес большие жертвы и готов к тому, что принесу в дальнейшем еще большие. Однако есть предел, за которым мой долг перед моими детьми требует, чтобы я остановился после завершения разработки чертежей... Они останутся, когда я уйду и когда другая страна, более просвещенная, чем моя, в будущем осознает значение моего изобретения...".

Но мог ли ученый построить действующую Аналитическую машину, имей он необходимое финансовое обеспечение? На основе анализа чертежей машины и возможностей современной Бэббиджу техники Алан Бромли и некоторые другие историки отвечают на этот вопрос утвердительно. Доказательствами такой точки зрения (отчасти косвенными) могут служить следующие факты.

  1. В 1887 г. под руководством Генри Превоста Бэббиджа была изготовлена "мельница" Аналитической машины, соединенная с печатающим устройством, и 21 января 1888 г. она вычислила и напечатала 20-значную таблицу результатов умножения числа на члены натурального ряда (от 1 до 44).
  2. В 1848 г., завершив работу над документацией Аналитической машины, Бэббидж сделал полный комплект чертежей нового варианта машины для вычисления таблиц, которую назвал Разностной машиной № 2 (в ней, в частности, использовалась схема сквозного переноса). В 1991 г. английские инженеры под руководством сотрудника Лондонского научного музея Дорона Суэйда изготовили эту машину по чертежам Бэббиджа, обнаружив в них лишь две ошибки!

Видимо, не совсем прав был Норберт Винер, когда, отмечая большое значение работ британского первопроходца, писал: "он имел удивительно современные представления о вычислительных машинах, однако имевшиеся в его распоряжении технические средства намного отставали от его представлений".

Что же нового предложил Бэббидж в 1857–1871 гг.? К сожалению, чертежи, выполненные им в этот период, и записи в рабочих тетрадях не всегда позволяют однозначно интерпретировать его новые идеи. Тем не менее, многое из того, к чему пришел в своих размышлениях ученый, рассматривается его благожелательными биографами как прорыв в следующий компьютерный век. Примером может служить план Аналитической машины, помеченный 1858 г.

На нем изображена совершенно новая, матричная структура машины, в которой имеется 18 "складов", расположенных вертикально и параллельно друг другу. Каждый "склад" содержит свой набор зубчатых реек для передачи чисел в "мельницы", и, кроме того, имеется реечная "главная магистраль" (мы бы сказали сегодня – общая шина), которая расположена под прямым углом к "складам" и служит для обмена данными между ними, а также между "мельницами". Еще одна группа реек связывает между собой "мельницы". Работой всей машины управляют два "больших барабана" (Great Barrels), а для "складов" и "мельниц" предусмотрено индивидуальное управление с помощью "малых барабанов" (Small Barrels). Относящаяся к этому плану запись в рабочей тетради Бэббиджа позволяет понять его общий замысел: "Таким образом, видно, что 18 Разностных машин... могут работать одновременно". Хотя "привязывать" идеи Бэббиджа к современной терминологии следует с большой осторожностью, в описанном плане можно увидеть прообраз матричного процессора.

Вызывает интерес и другой план Бэббиджа, относящийся к 1860 г. и показывающий, насколько близко ученый подошел к современной концепции выполнения операций над адресами памяти и командами. В соответствии с этим планом верхнее колесо каждого регистра "склада", как обычно, отводилось для представления знака числа, но следующие шесть колес должны были хранить не число, а его адрес. Назначение оставшихся трех колес Бэббидж не определил. Может быть, он планировал использовать их для хранения команд?

Есть и другие идеи "позднего" Бэббиджа, достойные упоминания. Размышляя над тем, как увеличить быстродействие машины, он придумал новую схему вычислений, при которой перенос осуществлялся при переходе колеса не через "0", а через "5" (он называл такой перенос "полунулевым"); предложил то, что через много лет назовут "совмещением операций", – передачу чисел между "складом" и "мельницей" во время выполнения арифметических операций; планировал присоединить к вычислительной машине широкий круг периферийных устройств, в том числе пишущую машинку и графопостроитель, расположив их дистанционно (в соседней с машиной комнате)...

Но все эти идеи остались только на бумаге. Пожалуй, единственный практический результат, который получил Бэббидж в последние годы жизни, – это регистр из зубчатых колес, изготовленных методом литья.

Аналитическая машина практического влияния на развитие ВТ не оказала, за исключением (может быть!) влияния на автора электромеханической машины ASCC Говарда Эйкена (этот вопрос будет рассмотрен в одной из следующих статей). И тем не менее вопреки тому, что было заявлено в предисловии к циклу, я не мог не посвятить первую статью трудам британского провидца[7], памятуя его слова, как бы адресованные современным компьютерщикам: "Если некто, не предостереженный моим примером, достигнет успеха в конструировании машины, воплощающей в себе целый исполнительский отдел математического анализа, я не побоюсь оставить свою репутацию на его ответственность, так как только он один сможет полностью понять характер моих усилий и ценность их результатов".

Статья опубликована в PC Week/RE №1 от 24.01.2006 г., стр. 36, и №2 от 31.01.2006 г., стр. 37.

Примечания

1. Такой аппарат был создан в конце XIX – начале XX века под названием “функциональный анализ”.

2. Русскоязычный читатель узнал об ученом из нашей с покойным Р. С. Гутером брошюры “Чарльз Бэббидж” (М.: Знание, 1973).

3. См., например: Полунов Ю. Л. От абака до компьютера: судьбы людей и машин, том I: От камешков до большого и среднего “железа” // М.: Русская редакция, 2004, стр. 133–135.

4. “Машина, съедающая собственный хвост”, – говорил о такой конструкции сам изобретатель.

5. Покойный австралийский исследователь творчества Бэббиджа из Сиднейского университета Алан Дж. Бромли (Аllan G. Bromley) подсчитал, что для памяти емкостью в 100 чисел длина рейки равнялась примерно трем метрам.

6. Это и другие названия “карт переменных” предложены Адой Августой Лавлейс, которой будет посвящена следующая статья цикла.

7. Как и следующую статью о возникновении программирования в работе А. А. Лавлейс.