Введение
1940-е – 1950-е годы. Британский компьютер.
Электронный автоматический калькулятор с памятью на задержке (EDSAC) был одним из первых британских компьютеров. Созданный под влиянием основополагающего «Первого проекта отчета о EDVAC» Джона фон Неймана, он был построен Морисом Уилксом и его командой в Математической лаборатории Кембриджского университета в Англии. EDSAC стал вторым электронным цифровым компьютером с хранимой программой, поступившим в регулярную эксплуатацию. Позже проект был поддержан компанией J. Lyons & Co. Ltd., которая стремилась разработать компьютер для коммерческого применения и добилась успеха с разработкой Lyons LEO I, основанной на конструкции EDSAC. Работа над EDSAC началась в 1947 году, и 6 мая 1949 года он выполнил свои первые программы, вычислив таблицу квадратов чисел и список простых чисел. EDSAC был окончательно выведен из эксплуатации 11 июля 1958 года, после того как его заменил EDSAC 2, который оставался в использовании до 1965 года.
Физические компоненты
Как только EDSAC был введен в эксплуатацию, он начал обслуживать исследовательские нужды университета. В качестве памяти использовались ртутные линии задержки, а для логики – дефорсированные вакуумные лампы. Потребляемая мощность составляла 11 кВт электроэнергии. Время цикла составляло 1,5 мс для всех обычных инструкций и 6 мс для умножения. Ввод осуществлялся с помощью перфоленты с пятью отверстиями, а вывод – через телепринтер. Изначально регистры ограничивались только аккумулятором и регистром умножителя. В 1953 году Дэвид Уилер, вернувшись из Университета Иллинойса, разработал индексный регистр как расширение оригинальной аппаратной части EDSAC. В 1952 году был добавлен магнитофон, но он так и не заработал достаточно надёжно, чтобы быть полезным. До 1952 года доступная основная память (инструкции и данные) составляла всего 512 18-битных слов, и не было внешнего хранилища. Линии задержки (или "танки") были организованы в две батареи, каждая из которых обеспечивала хранение 512 слов. Вторая батарея была введена в эксплуатацию в 1952 году, ограничивая размер программ примерно 800 словами до этого момента. Джон Линдли (дипломник 1958–1959 гг.) вспоминал "невероятные трудности, с которыми нам приходилось сталкиваться, чтобы создать хотя бы один правильный кусок перфоленты, используя грубое и ненадежное самодельное оборудование для перфорации, печати и проверки, доступное в конце 50-х годов".
Система программного обеспечения
Первоначальные команды были реализованы на наборе униселекторных переключателей и загружались в младшие ячейки памяти при запуске. К маю 1949 года первоначальные команды обеспечивали работу примитивного релоцирующего ассемблера, использующего мнемоническую систему, описанную выше, – и всё это в 31 слове. Это был первый в мире ассемблер и, возможно, начало мировой индустрии программного обеспечения. Существует симуляция EDSAC и подробное описание первоначальных команд и первых программ. Первым вычислением, выполненным на EDSAC, стала программа для вычисления квадрата числа, запущенная 6 мая 1949 года. Программу написала Беатрис Ворсли, приехавшая из Канады для изучения машины. Фред Хойл упоминает об этом в своем романе "Черное облако".
Техника программирования
Ранние программисты использовали методы, которые сегодня считаются неприемлемыми, в частности, использование самомодифицирующегося кода. Поскольку индексный регистр появился значительно позже, единственным способом доступа к элементам массива было изменение адреса памяти, на который ссылалась конкретная инструкция. Дэвид Уилер, получивший первую в мире докторскую степень по компьютерным наукам, работая над этим проектом, считается изобретателем концепции подпрограммы. Пользователи писали программы, которые вызывали подпрограмму, переходя к началу подпрограммы с обратным адресом (то есть, адресом возврата – местоположением плюс один байт самого перехода) в аккумуляторе (так называемый «прыжок Уиллера»). Подпрограмма, по соглашению, ожидала этого и первое, что она делала, – модифицировала свою завершающую инструкцию перехода на этот адрес возврата. Можно было вызывать несколько и даже вложенных подпрограмм, если пользователь знал длину каждой из них, чтобы вычислить адрес перехода; рекурсивные вызовы были запрещены. Затем пользователь копировал код подпрограммы с мастер-ленты на свою ленту после завершения собственной программы. (Однако Алан Тьюринг обсуждал подпрограммы в статье 1945 года, посвященной проектным предложениям для NPL ACE, и даже предложил концепцию стека адресов возврата, которая позволила бы выполнять рекурсию.) Отсутствие индексного регистра также создавало проблему для автора подпрограммы, поскольку он не мог заранее знать, куда в памяти будет загружена подпрограмма, и, следовательно, не мог знать, как адресовать области кода, используемые для хранения данных (так называемые «псевдо-команды»). Это было решено с помощью начальной процедуры ввода, которая отвечала за загрузку подпрограмм из перфоленты в память. При загрузке подпрограммы она фиксировала начальный адрес и при необходимости корректировала ссылки на внутреннюю память. Таким образом, как писал Уилкс, «код, используемый для представления команд вне машины, отличается от кода, используемого внутри, и эти различия обусловлены различными требованиями программиста, с одной стороны, и управляющих схем машины, с другой». Программисты EDSAC использовали специальные методы для максимально эффективного использования ограниченной доступной памяти. Например, в момент загрузки подпрограммы из перфоленты в память могло потребоваться вычисление определенной константы, которую впоследствии не нужно было бы пересчитывать. В этом случае константа вычислялась в «интерлюдии». Код, необходимый для вычисления константы, поставлялся вместе с полной подпрограммой. После того, как начальная процедура ввода загрузила код вычисления, управление передавалось этому коду. После вычисления константы и записи ее в память управление возвращалось в начальную процедуру ввода, которая продолжала записывать остальную часть подпрограммы в память, но сначала корректировала начальную точку, чтобы перезаписать код, который вычислил константу. Это позволяло вносить довольно сложные изменения в подпрограмму общего назначения, не увеличивая ее окончательный размер в памяти по сравнению с тем, если бы она была адаптирована к конкретным обстоятельствам.
Приложения EDSAC
EDSAC был специально разработан для того, чтобы стать частью службы поддержки Математической лаборатории в проведении вычислений. Первая научная статья, опубликованная с использованием компьютера для расчетов, принадлежала перу Рональда Фишера. Уилкс и Уилер использовали EDSAC для решения дифференциального уравнения, связанного с частотами генов, для него. В 1951 году Миллер и Уилер использовали машину для обнаружения 79-значного простого числа – самого большого, известного на тот момент. Лауреаты трех Нобелевских премий – Джон Кендрю и Макс Перуц (химия, 1962), Эндрю Хаксли (медицина, 1963) и Мартин Райл (физика, 1974) – воспользовались революционной вычислительной мощностью EDSAC. В своих речах при вручении премий каждый из них признал роль, которую EDSAC сыграл в их исследованиях. В начале 1960-х годов Питер Суиннертон-Дайер использовал компьютер EDSAC для вычисления количества точек по модулю p (обозначаемого как Np) для большого числа простых чисел p на эллиптических кривых, ранг которых был известен. На основе этих численных результатов было высказано предположение, что Np для кривой E с рангом r подчиняется асимптотическому закону – предположению Бирча и Суиннертона-Дайера, которое по состоянию на 2022 год считается одной из важнейших нерешенных проблем в математике. "Мозг" [компьютер] однажды, возможно, достигнет нашего уровня [обычных людей] и поможет нам с расчетом налогов и ведением бухгалтерского учета. Но это лишь спекуляции, и пока никаких признаков этого нет. Британская газета The Star в июне 1949 года опубликовала статью о компьютере EDSAC, задолго до эры персональных компьютеров.
Игры
В 1952 году Сэнди Дуглас разработал OXO, версию крестиков-ноликов для ЭДСАК, с графическим выводом на 6-дюймовую катодную трубку VCR97. Это вполне могла быть первая в мире видеоигра. Другую видеоигру создал Стэнли Гилл: она представляла собой точку (которая называлась овцой), приближающуюся к линии, где можно было открыть один из двух проходов.
Дальнейшее развитие событий
Преемник EDSAC, EDSAC 2, был введен в эксплуатацию в 1958 году. В 1961 году Дэвид Хартли разработал версию Autocode для EDSAC 2 – язык программирования высокого уровня, подобный ALGOL, предназначенный для учёных и инженеров. В середине 1960-х годов планировалась разработка преемника EDSAC 2, но вместо этого предпочтение было отдано системе Titan, прототипу Atlas 2, созданной на основе компьютера Atlas, разработанного Манчестерским университетом, Ferranti и Plessey.
Проект реплики EDSAC
13 января 2011 года Общество компьютерной консервации объявило о планах по созданию рабочей реплики EDSAC в Национальном музее вычислительной техники (TNMoC) в Блетчли-парке под руководством Эндрю Герберта, бывшего ученика Мориса Уилкса. Первые компоненты реплики были включены в ноябре 2014 года. Логические схемы EDSAC были скрупулезно реконструированы посредством разработки симулятора и повторного анализа вновь обнаруженных оригинальных схем. Эта документация была опубликована под лицензией Creative Commons. Работа над проектом открыта для посещения. В 2016 году два оригинальных оператора EDSAC, Маргарет Маррс и Джойс Уилер, посетили музей, чтобы оказать помощь в работе над проектом. По состоянию на ноябрь 2016 года предполагалось, что ввод реплики в полностью завершенное и рабочее состояние состоится осенью 2017 года. Однако непредвиденные задержки в проекте привели к неопределенности сроков завершения и полной работоспособности машины.