В этой статье рассматриваются системные программы первых электронных компьютеров с хранимой программой. Проводится сравнение системного программирования СССР с системами программирования в других странах в 50х годах прошлого столетия в ходе прогресса системного ПО. Именно этот прогресс привел к созданию Фортрана, Алгола и много пользовательских операционных систем, хотя этот период в статье не рассматривается.
Ключевые слова: компьютеры, история программирования, транслятор, интерпретатор, операционная система.
В исторической литературе много информации о технике первых компьютеров и людях их создававших, а о программах, какие работали на них, написано значительно меньше. К тому же компьютеры и программы в первые годы использования были в работе в основном у военных и засекречены. К тому же описания программных работ того времени в каждой стране отдельные. А между западными странами и СССР в то время был «железный занавес» мешающий контактам, в том числе научным. Поэтому сравнительных работ почти нет, а историки техники редко разбираются в особенностях работы первых компьютеров. Современным специалистам трудно представить программирование начального периода. Поэтому, цель работы рассмотреть сравнительный прогресс системного программного обеспечения первых компьютеров.
В статье рассматриваются в основном системные программы первых электронных компьютеров с хранимой программой. Следовательно, не рассматривается программирование ENIAC, так как он был контактно программируемый не с хранимой программой, программировался как табуляторные машины предыдущего периода. [7, c. 35] Так же в работе не рассматриваются не транслируемые в то время языки алгоритмов, типа PlanKalkul.
Новизной данной статьи является попытка сопоставить и сравнить работы первых программистов СССР с работами программистов других стран.
70 лет назад в 6 ноября 1950 года в СССР был запущен первый компьютер, называемый модель МЭСМ. [7, c. 29]. Это была 16 разрядная 3х адресная машина на примерно 3000 электронных лампах, а та МЭСМ которая была принята в эксплуатацию позже (25 декабря 1951 года) была 26-разрядная 3х адресная машина на примерно 6000 электронных лампах.
Это были машины с хранимой программой и были «полными то Тьюрингу» (Turing complete). Однако они не были машинами по фон Нейману, так как не имели выделенной не регистровой оперативной памяти.
Макет МЭСМ в 1950 осуществлял ввод данных и программ с панели переключателей двоичных чисел. Вывод результата в двоичном виде на панель из лампочек. Первая программа была упрощенной задачей баллистики. Программировали ее С. Авраменко и С. Крейн.
Что же было в других странах. В 1950 году электронные компьютеры с хранимой программой были только в Британии и США. Даже во Франции, где была фирма Bull Мachines выпускавшая перфорационные вычислительные комплексы, электронных компьютеров не было. Они появились только в 1955 году, да и то как аналог IBM. В Германии не смотря на наличие фирм, выпускающих вычислители DEHOMAG и Zuse, электронных компьютеров тоже не было до 1955 года.
В США, если не считать не работающий на тот момент BINAC, были компьютеры SEAC и SWAC которые были запущены на несколько месяцев раньше модели МЭСМ и будучи аналогами Британской ACE, так же находились в стадии эксперимента и программировались в это время в двоичном виде в ручную с пульта.
В Британии в 1950 году работали 3 компьютера АСЕ, MADM, EDSAC и это не считая манческирскую SSEM (Small Scale Experimental Machine), которая выполнила первую программу в 21 июня 1948 года и была первым работающим компьютером с хранимой программой в мире. SSEM была разобрана на детали в конце октября 1948 года. В место нее в апреле 1949 года была установлена более совершенная MADM (вначале MUC), Манчестерский университетский компьютер.
Основные системные программы, повлиявшие на прогресс системного ПО, приводятся в таблице 1.
Британская АСЕ сразу имел перфокарточный ввод, однако в связи с не стандартно расположенными пробивками, можно считать, что программировался с перфокарт, но в двоичном формате. Еще до ее запуска была разработана библиотека подпрограмм десятично-двоичных преобразований и работы с числами с плавающей точкой. Программа АСЕ –VII (1947г.) выглядела так:
1101001101110111011100001110110110101101010101
1001101101110111011100001110110110101100010111
А вот на компьютерах MADM и EDSAC, которые были запущены на полтора года раньше советской «модель МЭСМ», британские программисты осуществили несколько научных переворотов. Первый переворот в системном программировании совершил А. Тьюринг (A. Turing). Он стал осуществлять загрузку в память программы с перфоленты 5 битными латинскими символами, с помощью специальной программы загрузки. Эту загрузку он продемонстрировал уже в октябре 1948 года на компьютере SSEM. Однако для MADM это было доработано к апрелю 1949 года.
При загрузке 5 битной ленты получалась более компактная запись, по сравнению с двоичной и восьмеричной. И как Тьюринг считал, лучше читается и запоминается. Было даже мнемоническое слово для лучшего запоминания каждого символа команды из 31 команды MADM. Такой стиль записи можно назвать первым символьным языком программирования, назывался «AbbreviationInstructioncode» [2, c. 3]. Например, три команды MADM, прочитать, сложить и записать я память результат, выглядело на бланке программы и распечатке на телетайпе так:
Н//0 М/@DD/@@
Также с перфоленты загружалась специальная библиотека системных функций. После загрузки с помощью библиотеки можно было преобразовать нужные данные в рабочей программе в двоичный вид. После преобразования-трансляции можно было выгрузить готовую рабочую программу на перфоленту. Это системное программное обеспечение было названо SchemeA [2, c. 31]. (Тьюринг 1949г.). Она состояла из резидентного монитора и служебных программ. В ее функции входило:
Загрузка программ а память (O, K)
Редактирование ячеек памяти (J)
Преобразование 10х чисел в 2-е (“)
Выполнение команды (X) Например: Х//L — запустить с адреса 0.
Выгрузка данных из памяти (T, Q)
Выполнять команды можно было как с перфоленты, так и клавиатуры телетайпа (с октября 1948г.).
М. Уилкс (M. Wilkes), руководитель проекта EDSAC, переняв, по возможности, одно адресную структуру Манчестерского компьютера, посчитал представление программы А.Тьюринга очень неудобным, тем более что из-за отсутствия переключений регистров у Тьюринга среди символов отсутствовали цифры. Уилкс попросил конструктора EDSAC Ренвика (B. Renwick) сделать код команды более мнемоническим, чем у MADM. В месте с программистом Уиллером (D. Wheeler) было разработано июне 1949 года системное обеспечение Initorder, которое сразу и загружало более понятную текстовую программу и преобразовывало в двоичный вид нужные цифры [2, c. 3]. Как утверждал Уилкс, это более понятно и студентам, и аспирантам. Сложение с записью выглядело так;
26 A 25 S
27 A 4 Sn+1 ton
28 U 25 S
В 1949 Weeler написал программу Compilator которая настраивала адреса вызовов библиотечных подпрограмм необходимых только для этой программы. В последствии многие программные системы стали использовать этот метод.
В сентябре 1949 года Мочли в первые на электронном компьютере стал использовать восьмеричные 3х битные символы и назвал это “Short code”. При этом символы набивались специальной клавиатурой на магнитную ленту и с нее вводились в компьютер. Вывод на печать то же восьмеричный.
BINAC 9/1949
20010 03027
70610 08274
В 1951 Мочли уже на компьютере UNIVAC начал использовать шести битные символы с этим же названием. [1, c. 53]
UNIVAC — 1
В 1951 году система программирования EDSAC была переработана программистом Гилмором (J. Gilmore) из Массачусетского института технологии (MIT) для компьютера Whirlwind.
Г. Хоппер (G. Hopper) в развитие библиотечного ассемблера Уиллера для UNIVAC структурировала большую библиотеку UNIVAC а, создав систему А0 в 1952 году. В 1954 добавив выгрузку готовой к запуску программ на магнитную ленту, назвала это компилятором А-2.
В ЭВМ М-1 в декабре 1951 года в первые в СССР начали программировать восьмеричными символами их набивали на обычном телетайпе, потом вводили с перфоленты, в отличии от магнитной ленты в BINAC. На примере ниже напечатана тестовая программа печати квадратов чисел. [8, c. 243]
М-1 (1951)
10000000
20030060 40080061 40011061 20010030 20051031
30010030 30002031 20010070 00050071 00000050
Программирование БЭСМ в 1952 году производилось перфокартами, как показано ниже.
10 1010 1010 101
10 1010 1010 101
Glennie в Манчестерском университете в 1952 создал Autocode в котором реализовал трансляцию алгебраических формул ограниченного размера, [1, c. 43] для Манчестерского компьютера FERRANTI.
Autocode Glennie 1952
INTEGERS +5 +7 →c # Put 5 plus 7 into c
+t -x →y
Тут необходимо уточнить как мог возникнуть подобный транслятор. В дополнение к символьному кодированию и трансляции цифр впервые появляется трансляция формул и трансляция кодов команд. Явно что до трансляции формул была просто трансляция кодов команд. Вероятно, был и предшествующий Autocode Glennie. Вероятно, это мог быть кросс транслятор с ассемблера EDSAC на «AbbreviationInstructioncode» MADM мк1. Глени работал на обоих компьютерах, но MADM мк1 разобрали в декабре 1950 года.
В фирме IBM в 1953 Backus используя наработки Wilkes и Glennie создал Speedcode. [1, c. 3]
SpeedcodeIBM 1953 Backus
RAD 25
RAD 04
RST 25
В 1953 в СССР была запущена серийная ЭВМ СТРЕЛА-1 ввод программ был аналогично БЭСМ.
Однако вскоре были разработаны программы автоматизации программирования. В начале была разработана «Программа Автоматического Присвоения Адресов/ПАПА» (Т. А. Тросман, В. В. Мартынюк). Вероятно, была аналогична компилирующей программе А0 Грейс Хоппер. Выглядела как обычная программа Стрелы-1, однако сокращала работу программистам.
0000 0000 0000 0 01
0001 0001 0001 0 03
В 1954 Подобный подход был усовершенствован (С. С. Камынин, Э. З. Любимский)условными блоками и выгрузкой загружаемой программы на перфокарты и была названа «Программирующей программой» / ПП-1, так как из заготовки программы формировала набор рабочих запускаемых карт. [5, c. 9]
В 1955 Ершов разработал ПП-БЭСМ [9, c. 11] с символьными кодами операций.
В 1954 году Бруккер (Brooker) довел до практического использования Autocode А. Глени. с алгебраической записью. [1, c. 63]
Autocode Brooker 1954
1 vn1 = Ireads input into v [n [1]]
n1 = n1 + 1
j1,11 ≥ n1 jumps to 1 if n [1] ≤ 11
И усовершенствовал «Schema A» в Интерпретирующую систему Autocode. Запуск программы выглядела так: $ prog1.
Бекус (J. Backus) в IBM используя наработки предшественников Autocode, в 1956 году начинает обкатывать FORTRAN [1, c. 60] [4, c. 3], создав для него операционную систему пакетной обработки FMS. Пример вызова программы:
JOB START
А в 1958 году Интерпретирующую систему для М-20 написал Шура-бура.
ИС-2 в начале для М-20. ИС разрабатывалась для работы с библиотечными программами с перфокарточного считывателя. [9, c. 11] Программа просто выполняла команду, считанную с перфокарточного ввода. Однако в купе с хорошо подобранной системой команд ЭВМ М-20 позволяла просто выполнять большое количество функций [10, c. 30] без обращения к пульту управления ЭВМ. Чтобы загрузить и выполнить программу в штатном режиме, нужно было безошибочно набрать больше 100 двоичных тумблеров на инженерной панели. При запущенной ИС-2, достаточно было положить колоду перфокарт с программой и с подготовленными перфокартами загрузки и запуска, виде машинной команды в 15 восьмеричных цифр. А если при отладке требовалось изменить информацию в памяти, то достаточно было набить на клавиатуре перфоратора команду записи в память в восьмеричном формате и положить эту карту в считыватель. Использовалась до 1970 года.
Выводы из описанного в статьеможно сделать такие, что начиная с 1946 года шел непрерывный процесс совершенствования системного ПО, в котором лидировали британские программисты. Программисты СССР создавая оригинальные программные продукты шли на третьем месте. Германоязычные программисты себя серьезно проявили только в 1958 гору в разработке Алгола. Практически с 1960 года начался современный этап развития программирования.
Литература:
- Knuth, D. E., Trabb P. L. «Early development of programming languages», Stanford:1976.
2. Turing, A. M. Manual for the Ferranti Mk. I — Manchester: 1951.
- Wilkes, M. V. Wheeler, D. J. Gill S. The Preparation of Programs for an Electronic Digital Computer, Mass.: Addison-Wesley, 1951.
4. Backus, J. The history of Fortran I, II, and III — IEEE Annals of the History of Computing: 1989.
- Камынин С. С., Любимский Э. З. Автоматизация программирования // Тр. конф. «Пути развития советского математического машиностроения и приборостроения». — ч. 3 — М., 1956. — С. 9–17.
- Сергей Алексеевич Лебедев. К 100-летию со дня рождения основоположника отечественной электронной вычислительной техники. Под ред. В. С. Бурцева, М.: ФИЗМАТЛИТ, 2002.
- Мальцев, С. Н. Роль Холлерита в развитии вычислительной техники. [Электронный ресурс] // Электронный периодический научный журнал «SCI-ARTICLE.RU». 2017. № 46. С. 31–39. URL: http://sci-article.ru/number/06_2017.pdf (дата обращения: 12.05.2020).
- Мальцев, С. Н. О программировании АЦВМ М-1 // Молодой ученый. — 2018. — № 25. — с. 243–246.
- Шура-Бура, М. Р. Система интерпретации ИС-2 // Библиотека стандартных программ. — М.:Изд-во ЦБТИ, 1961.
10. Шура-Бура М. Р. Штаркман В. С. Вычислительная машина М-20 М.: 1962.