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