Степанов Г.Г. История СИГМЫ

Создание языка

История СИГМЫ [1] начинается в 1965 году, когда А.П.Ершов инициировал разработку нового языка программирования для работы с символьной информацией.

История создания языка подробно описана А.Ф.Раром в очерке "История Эпсилон". Там же отмечается, что название языка — Сигма — неожиданно очень удачно стало соответствовать сути разработанного языка, которую можно описать как "СИмвольный Генератор и МАкроассемблер".

Я подключился к работе над проектом СИГМА в декабре 1966 года, будучи студентом 4-го курса математического факультета Новосибирского государственного университета. Одновременно со мной в проект пришел и мой однокурсник Б.Ф.Синенкин. И мы под руководством А.Ф.Рара и при участии Р.Д.Мишкович приступили к реализации языка СИГМА на ЭВМ М-20.

Три реализации

Всего в истории языка СИГМА было 3 его реализации: на М-20, на БЭСМ-6 и на самом языке СИГМА. Первая, конечно, самая памятная, т.к. это была моя первая работа в области системного программирования (да и вообще первая работа). Вторая была выполнена на лучшей, по моему мнению, отечественной машине БЭСМ-6. Третья опиралась на вторую, была раскручена сама через себя и могла генерировать программы как для БЭСМ-6, так и для СМ-4 и ЕС ЭВМ.

Генерация программ для различных ЭВМ

Последняя возможность (способность генерировать программы для различных ЭВМ) потенциально присутствовала во всех реализациях языка СИГМА, т.к. выходной язык системы СИГМА никогда не закреплялся жестко, а описывался на специальном языке [2]. Именно методы, способы и средства описания выходного языка системы СИГМА и являлись темой моей дипломной работы в университете, руководителем которой был А.П.Ершов.

Реализация на М-20

Реализация языка СИГМА на М-20 представляла собой двухпросмотровый транслятор и административную систему, обеспечивающую во время работы оттранслированной программы выполнение действий над такими объектами языка СИГМА, как массивы и списки. Программирование административной системы осуществлял А.Ф.Рар. Реализацию первого просмотра, включавшего в себя лексический, синтаксический и семантический разборы программы пользователя выполнял Г.Г.Степанов. Этот же просмотр осуществлял открытую подстановку специально помеченных пользователем процедур. Второй просмотр, осуществлявший генерацию выходной программы по описанию выходного языка, реализовывал Б.Ф.Синенкин.

"Ностальгия" по М-20

Думаю, для современного читателя очень любопытным будет описание условий работы на ЭВМ М-20. Оперативная память машины составляла 4096 45-разрядных слов, поэтому большую часть информации приходилось держать на магнитных барабанах (существовали в то время такие), закачивая ее в память по частям по мере надобности. Такого естественного понятия, как виртуальная память, на М-20 не было, поэтому всю работу по подкачке информации и сбросе ее на барабан приходилось планировать и отрабатывать программно. Сам транслятор и административная система находились "разумеется" на перфокартах.

Программировали непосредственно в кодах команд М-20, собственноручно распределяя память под переменные, константы и другие объекты программы. Хотя писали все-таки на некотором подобии автокода, используя мнемонические имена переменных и кодов команд, которые вручную заменяли на числовые значения перед перфорацией. Но самым забавным представляется мне информация, которую машина выдавала программисту и по которой он должен был отлаживать свою программу. Это была так называемая "узкая цифровая печать". Каждая строчка на длинной узкой полоске бумаги (которую скручивали в рулоны наподобие туалетной бумаги) состояла из 15-ти восьмеричных цифр, определяющих содержимое одного слова памяти машины. Пользователь мог только в определенном порядке выдать на эту ленту значения интересующих его диапазонов ячеек оперативной памяти, а потом заняться их расшифровкой.

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

Тем не менее работа по реализации шла довольно успешно. Первый тест прошел 30 октября 1967 года, а к июню 1968, т.е. к концу нашего с Б.Ф.Синенкиным обучения в университете, мы пропускали уже вполне приличные программы. Ну а после окончания университета меня забрали в армию, поэтому работа по реализации языка Сигма на М-20 для меня закончилась.

Реализация на БЭСМ-6

После армии я поступил на работу в Вычислительный центр Сибирского отделения Академии наук СССР. К этому времени сменилось поколение машин, все большее распространение стала получать БЭСМ-6. Поэтому мы приступили ко второй реализации языка СИГМА [3,4]. Общая структура проекта была примерно такой же, а вот условия разработки существенно изменились. Память на БЭСМ-6 была побольше, магнитные барабаны сменились магнитными дисками, для выдачи уже использовались алфавитно-цифровые устройства (АЦПУ). И хотя для ввода по-прежнему использовались перфокарты, программировали мы уже не в кодах команд, а на автокоде БЕМШ. Данная реализация была доведена до работающего состояния, позволившего начать третью реализацию языка СИГМА уже на самом языке СИГМА [5].

Сигма на Сигма

Последняя реализация выполнялась уже только мной. Основной машиной была по-прежнему БЭСМ-6, а в качестве выходных машин, кроме БЭСМ-6, описывались СМ-4 и ЕС ЭВМ. Со временем на БЭСМ-6 появились терминалы (чаще всего применялись черно-зеленые мониторы марки "Videoton"), перфокарты отошли в прошлое (а так удобно было иметь в кармане несколько штук для различных записей).

Сам язык СИГМА [6,7] несколько расширился, в основном за счет добавления новых служебных и стандартных макросов, но его основные концепции остались неизменными.

Широкого распространения система СИГМА [8] не получила, но тем не менее с ее помощью был разработан ряд прикладных программ, среди которых, в первую очередь, следует упомянуть программу управления некоторой справочной базой данных, содержавшей адресно-телефонные данные более чем 1500 отечественных программистов. Распечатка данной базы сохранилась, и ею пользуются и сейчас, хотя большинство данных в ней, конечно же, устарело. В конце 80-х годов закончилась эра машины БЭСМ-6, а с ней ушел в историю и язык СИГМА.

Литература

  1. Ershov A.P., Rar A.F. SYGMA — a Symbolic Generator and Macroassembler// IFIP Working Conference. — Pisa, 1966. — 39 p.
  2. Степанов Г.Г. Методика описания вычислительных машин для настраиваемых макроассемблеров // Тр. Всесоюзного семинара по вопросам макрогенерации. — Тбилиси, 1975. — 19 с.
  3. Stepanov G.G. SIGMA — a mashine-oriented higher-level language // In: Machine Oriented Higher Level Language. — N.-H.Publ.Co., Amsterdam, 1976. — 10 p.
  4. Степанов Г.Г. Реализация системы СИГМА // Сб.: Теория и практика программного обеспечения (Труды советско-французского симпозиума). ВЦ СО АН СССР. — Новосибирск, 1981. — 10 c.
  5. Степанов Г.Г. Опыт использования языка СИГМА // Сб.: Языки и системы программирования. ВЦ СО АН СССР. — Новосибирск, 1981. — 8 c.
  6. Ершов А.П., Степанов Г.Г. Машинно-ориентированный алгоритмический язык СИГМА для написанияя переносимых программ (общее описание). — Новосибирск, 1981. - 30 c. (Препринт / ВЦ СО АН СССР; N304)
  7. Степанов Г.Г. Система программирования СИГМА. — Новосибирск, 1982. — 29 c. (Препринт / ВЦ СО АН СССР; N391)
  8. Степанов Г.Г. Пути обеспечения переносимости программ и опыт использования системы СИГМА // Сб.: Трансляция и преобразование программ. ВЦ СО АН СССР. — Новосибирск, 1984. — 9 c.



Вы обнаружили ошибку в следующем тексте:
Просто нажмите кнопку "Отправить сообщение об ошибке" для завершения. Вы можете также ввести комментарий (желательно).