Аналитическая машина была предложена как цифровой механический компьютер общего назначения, разработанный английским математиком и пионером вычислительной техники Чарльзом Бэббиджем . [2] [3] Впервые она была описана в 1837 году как преемник разностной машины Бэббиджа , которая была проектом более простого механического калькулятора. [4]
Аналитическая машина включала в себя арифметико-логическое устройство , поток управления в форме условного ветвления и циклов , а также интегрированную память , что сделало ее первой конструкцией универсального компьютера, которую можно было бы описать современными терминами как полную по Тьюрингу . [5] [6] Другими словами, структура аналитической машины была по сути такой же, как и та, которая доминировала в компьютерном проектировании в электронную эпоху. [3] Аналитическая машина является одним из самых успешных достижений Чарльза Бэббиджа.
Бэббидж так и не смог завершить строительство ни одной из своих машин из-за конфликтов с главным инженером и недостаточного финансирования. [7] [8] Только в 1941 году Конрад Цузе построил первый универсальный компьютер Z3 , более чем через столетие после того, как Бэббидж предложил новаторскую аналитическую машину в 1837 году. [3]
Первая попытка Бэббиджа создать механическое вычислительное устройство, Difference Engine , была специальной машиной, предназначенной для табулирования логарифмов и тригонометрических функций путем оценки конечных разностей для создания аппроксимирующих полиномов . Строительство этой машины так и не было завершено; у Бэббиджа были конфликты с его главным инженером Джозефом Клементом , и в конечном итоге британское правительство прекратило финансирование проекта. [9] [10] [11]
В ходе этого проекта Бэббидж понял, что возможна гораздо более общая конструкция — аналитическая машина. [9] Работа над проектом аналитической машины началась около 1833 года. [12] [4]
Входные данные, состоящие из программ («формул») и данных, [13] [9] должны были быть предоставлены машине через перфокарты , метод, который использовался в то время для управления механическими ткацкими станками, такими как ткацкий станок Жаккарда . [14] Для вывода машина должна была иметь принтер, криволинейный плоттер и звонок. [9] Машина также могла бы набивать числа на карты для последующего считывания. Она использовала обычную арифметику с фиксированной точкой и основанием 10. [9]
Должен был быть магазин (то есть память), способный хранить 1000 чисел по 50 десятичных цифр [15] каждое (около 16,6 кБ ). Арифметическое устройство («мельница») могло бы выполнять все четыре арифметические операции , а также сравнения и, при необходимости, квадратные корни . [16] Первоначально (1838) оно было задумано как разностная машина, изогнутая назад, в общем круговом макете, с длинным хранилищем, выходящим в одну сторону. [17] Более поздние чертежи (1858) изображают регуляризованную сетевую компоновку. [18] [19] Подобно центральному процессору (ЦП) в современном компьютере, мельница должна была полагаться на свои собственные внутренние процедуры, примерно эквивалентные микрокоду в современных ЦП, которые должны были храниться в виде штифтов, вставленных во вращающиеся барабаны, называемые «бочками», для выполнения некоторых более сложных инструкций, которые могла указать программа пользователя. [7]
Язык программирования, который должен был использоваться пользователями, был похож на современные языки ассемблера . Циклы и условные переходы были возможны, и поэтому язык в том виде, в котором он был задуман, был бы полным по Тьюрингу, как позже определил Алан Тьюринг . Использовались три различных типа перфокарт: одна для арифметических операций, одна для числовых констант и одна для операций загрузки и сохранения, перенося числа из хранилища в арифметическое устройство или обратно. Было три отдельных считывателя для трех типов карт. Бэббидж разработал около двух десятков программ для аналитической машины между 1837 и 1840 годами и одну программу позже. [14] [20] Эти программы обрабатывают многочлены, итерационные формулы, исключение Гаусса и числа Бернулли . [14] [21]
В 1842 году итальянский математик Луиджи Федерико Менабреа опубликовал описание машины на французском языке [22] , основанное на лекциях Бэббиджа, прочитанных им во время его визита в Турин в 1840 году. [23] В 1843 году описание было переведено на английский язык и подробно прокомментировано Адой Лавлейс , которая заинтересовалась машиной восемью годами ранее. [13] В знак признания ее дополнений к статье Менабреа, которые включали способ вычисления чисел Бернулли с помощью машины (широко признанной первой полной компьютерной программой), ее называют первым программистом .
В конце своей жизни Бэббидж искал способы построить упрощенную версию машины и собрал небольшую ее часть перед своей смертью в 1871 году. [1] [7] [24]
В 1878 году комитет Британской ассоциации содействия развитию науки описал аналитическую машину как «чудо механической изобретательности», но рекомендовал не строить ее. Комитет признал полезность и ценность машины, но не смог оценить стоимость ее создания и не был уверен, будет ли машина правильно функционировать после того, как будет построена. [25] [26]
Периодически с 1880 по 1910 год [28] сын Бэббиджа Генри Превост Бэббидж конструировал часть мельницы и печатного аппарата. В 1910 году он смог вычислить (неправильный) список кратных числу пи . [29] Это составляло лишь малую часть всей машины; она не была программируемой и не имела памяти. (Популярные изображения этого раздела иногда неправильно маркировались, подразумевая, что это была вся мельница или даже весь двигатель.) «Аналитическая машина мельница» Генри Бэббиджа выставлена в Музее науки в Лондоне. [27] Генри также предложил построить демонстрационную версию полной машины с меньшей емкостью памяти: «возможно, для первой машины хватит десяти (колонок) с пятнадцатью колесами в каждой». [30] Такая версия могла бы манипулировать 20 числами по 25 цифр в каждом, и то, что ей можно было бы сказать, чтобы делать с этими числами, все еще могло бы быть впечатляющим. «Это только вопрос карт и времени», — писал Генри Бэббидж в 1888 году, «... и нет никаких причин, по которым (двадцать тысяч) карт не могли бы быть использованы при необходимости в аналитической машине для целей математики» [30] .
В 1991 году Лондонский музей науки построил полный и рабочий образец разностной машины Бэббиджа № 2 , конструкции, включавшей усовершенствования, обнаруженные Бэббиджем во время разработки аналитической машины. [5] Эта машина была построена с использованием материалов и технических допусков , которые были доступны Бэббиджу, что опровергло предположение о том, что конструкции Бэббиджа не могли быть изготовлены с использованием производственных технологий его времени. [31]
В октябре 2010 года Джон Грэм-Камминг начал кампанию «План 28» по сбору средств путем «публичной подписки», чтобы провести серьезное историческое и академическое исследование планов Бэббиджа с целью затем построить и протестировать полностью работающую виртуальную конструкцию, которая затем, в свою очередь, позволит построить физическую аналитическую машину. [32] [33] [34] По состоянию на май 2016 года фактическое строительство не было предпринято, поскольку из оригинальных чертежей Бэббиджа еще не удалось получить последовательного понимания. В частности, было неясно, сможет ли он обрабатывать индексированные переменные, которые требовались для программы Бернулли Лавлейс. [35] К 2017 году усилия «Плана 28» сообщили, что была доступна поисковая база данных всех каталогизированных материалов, и был завершен первоначальный обзор объемных «Книг записок» Бэббиджа. [36]
Многие из оригинальных рисунков Бэббиджа были оцифрованы и доступны для всеобщего ознакомления в Интернете. [37]
Известно, что Бэббидж не записывал явный набор инструкций для двигателя в стиле современного руководства процессора. Вместо этого он показывал свои программы в виде списков состояний во время их выполнения, показывая, какой оператор запускался на каждом шаге, с небольшим указанием на то, как будет направляться поток управления.
Аллан Г. Бромли предположил, что колоду карт можно читать в прямом и обратном направлении как функцию условного ветвления после проверки условий, что сделало бы машину Тьюринг-полной:
...карты можно было бы заставить двигаться вперед и назад (и, следовательно, зацикливаться)... [14]
Введение впервые в 1845 году пользовательских операций для различных сервисных функций, включая, что наиболее важно, эффективную систему для пользовательского управления циклами в пользовательских программах. Нет никаких указаний на то, как указывается направление поворота карт операций и переменных. В отсутствие других доказательств мне пришлось принять минимальное предположение по умолчанию, что и карты операций и переменных могут быть повернуты только назад, как это необходимо для реализации циклов, используемых в примерах программ Бэббиджа. Не было бы никаких механических или микропрограммных трудностей в передаче направления движения под контроль пользователя. [38]
В своем эмуляторе движка Fourmilab сообщает:
Считыватель карт Двигателя не ограничен простой обработкой карт в цепочке одну за другой от начала до конца. Он может, кроме того, направляемый самими картами, которые он считывает, и подсказанный тем, активирован ли рычаг запуска Мельницы, либо продвигать цепочку карт вперед, пропуская промежуточные карты, либо назад, заставляя ранее считанные карты обрабатываться еще раз.
Этот эмулятор предоставляет письменный символический набор инструкций, хотя он был создан его авторами, а не основан на оригинальных работах Бэббиджа. Например, факториальная программа будет записана как:
№ 6Н1 1Н2 1×Л1Л0С1–Л0Л2С0Л2Л0КБ?11
где CB — это инструкция условного перехода или «комбинационная карта», используемая для перехода потока управления, в данном случае назад на 11 карт.
Бэббидж понимал, что существование автоматического компьютера вызовет интерес к области, ныне известной как алгоритмическая эффективность , и писал в своих «Отрывках из жизни философа» : «Как только появится аналитическая машина, она обязательно будет определять будущее направление науки. Всякий раз, когда с ее помощью будет получен какой-либо результат, возникнет вопрос: каким путем вычисления машина может получить эти результаты в кратчайшие сроки ?» [39]
С 1872 года Генри усердно продолжал работу отца, а затем, в 1875 году, вышел на пенсию. [40]
Перси Ладгейт писал о двигателе в 1914 году [41] и опубликовал свой собственный проект аналитического двигателя в 1909 году. [42] [43] Он был детально разработан, но никогда не был построен, и чертежи никогда не были найдены. Двигатель Ладгейта был бы намного меньше (около 8 кубических футов (230 л ), что соответствует кубу со стороной 2 фута (61 см)), чем двигатель Бэббиджа, и гипотетически мог бы умножать два 20-значных числа примерно за шесть секунд. [44]
В своей работе Essays on Automatics (1914) Леонардо Торрес Кеведо , вдохновленный Бэббиджем, спроектировал теоретическую электромеханическую вычислительную машину, которая должна была управляться программой только для чтения. В работе также содержится идея арифметики с плавающей точкой . [45] [46] [47] В 1920 году, чтобы отпраздновать 100-летие изобретения арифмометра , Торрес представил в Париже электромеханический арифмометр, который состоял из арифметического устройства, подключенного к (возможно, удаленной) пишущей машинке, на которой можно было набирать команды и автоматически распечатывать результаты. [48] [49]
В статье Ванневара Буша «Инструментальный анализ» (1936) содержалось несколько ссылок на работу Бэббиджа. В том же году он начал проект «Быстрая арифметическая машина» для исследования проблем построения электронного цифрового компьютера. [50]
Несмотря на эту основу, работа Бэббиджа оказалась в исторической безвестности, а аналитическая машина была неизвестна создателям электромеханических и электронных вычислительных машин в 1930-х и 1940-х годах, когда они начали свою работу, что привело к необходимости заново изобретать многие архитектурные инновации, предложенные Бэббиджем. Говард Эйкен , который построил быстро устаревший электромеханический калькулятор Harvard Mark I в период с 1937 по 1945 год, восхвалял работу Бэббиджа, вероятно, как способ повысить свой собственный статус, но ничего не знал об архитектуре аналитической машины во время строительства Mark I и считал свой визит к построенной части аналитической машины «величайшим разочарованием в моей жизни». [51] Mark I не показал никакого влияния аналитической машины и не имел самой провидческой архитектурной особенности аналитической машины — условного ветвления . [51] Дж. Преспер Экерт и Джон В. Мочли также не были осведомлены о подробностях работы Бэббиджа над аналитической машиной до завершения ими проектирования первого электронного компьютера общего назначения ENIAC . [52] [53]
Если бы аналитическая машина была построена, она была бы цифровой , программируемой и полной по Тьюрингу . Однако она была бы очень медленной. Луиджи Федерико Менабреа сообщил в «Наброске аналитической машины» : «Мистер Бэббидж считает, что с помощью своей машины он может сформировать произведение двух чисел, каждое из которых содержит двадцать цифр, за три минуты». [54] Для сравнения, Гарвардский Марк I мог выполнить ту же задачу всего за шесть секунд (хотя спорно, является ли компьютер полным по Тьюрингу; ENIAC, который является полным по Тьюрингу, также был бы быстрее). Современный процессор мог бы сделать то же самое менее чем за миллиардную долю секунды.