ИСТОРИЯ СИГМЫ
часть вторая
Г. Г. Степанов
Создание языка
История Сигмы [1] начинается в 1965 году, когда А. П. Ершов инициировал разработку нового языка программирования для работы с символьной информацией.
История создания языка подробно описана А. Ф. Раром в очерке «История Эпсилон». Там же отмечается что название языка Сигма неожиданно очень удачно стало соответствовать сути разработанного языка, которую можно описать как «Символьный Генератор и Макроассемблер».
Я подключился к работе над проектом Сигма в декабре 1966 года, будучи студентом 4-го курса математического факультета Новосибирского государственного университета. Одновременно со мной в проект пришел и мой однокурсник Б. Ф. Синенкин. И мы под руководством Л. Ф. Рара и при участии Р. Д . Мишкович приступили к реализации языка Сигма на ЭВМ М-20.
Три реализации
Всего в истории языка Ситма было три его реализации: на М-20, на БЭСМ-б и на самом языке Сигма. Первая, конечно самая памятная, т.к. это была мол первая работа в области системного программирования (да и вообще первая работа). Вторая была выполнена на лучшей, по моему мнению, отечественной машине БЭСМ-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, а с ней ушел в историю и язык Сигма.
Литература
- Ershov A. P., Rar A. F. SYGMA a Symbolic Generator and Macroassembler // IFIP Working Conference. Pisa, 1966. 39 p.
- Степанов Г.Г. Методика описания вычислительных машин для настраиваемых макроассемблеров // Тр. Всесоюзного семинара по вопросам макрогенерации. Тбилиси, 1975. 19 с.
- Stepanov G. G. SYGMA a mashine-oriented higher-level languages // Mashine Oriented Higher Level Languages. N. -H Publ.Co Amsterdam , 1976. 10 p.
- Степанов Г. Г. Реализация системы СИГМА // Теория и практика программного обеспечения (Тр. советско-французского симпозиума). ВЦ СО АН СССР. Новосибирск, 1981. 10 с.
- Степанов Г. Г. Опыт использования языка СИГМА // Языки и системы программирования. ВЦСО АН СССР. Новосибирск, 1981. 8 с.
- Ершов А. П., Степанов Г. Г. Машинно-ориентированный алгоритмический язык СИГМА для написания переносимых программ (общее описание). Новосибирск, 1981. 30 с. (Препр. / ВЦ СО АН СССР; № 304)
- Степанов Г. Г. Система программирования СИГМА. Новосибирск, 1982. 29 с. (Препр. / ВЦ СО АН СССР; № 391)
- Степанов Г.Г. Пути обеспечения переносимости программ и опыт использования системы СИГМА // Трансляция и преобразование программ. ВЦ СО АН СССР. Новосибирск, 1984. 9 с.
Из сборника »Становление Новосибирской школы программирования. Мозаика воспоминаний». Новосибирск, 2001 г.
Перепечатываются с разрешения редакции.