Добавлен: 22.04.2023
Просмотров: 165
Скачиваний: 1
В трансляторе Альфа была систематически применена функция расстановки для ускорения работы транслятора ([79], стр. 35), в частности, для экономии совпадающих выражений ([79], стр. 187) применена многовариантная система программирования процедур ([79], стр. 92) и циклов ([79], стр. 153), основанная на анализе структуры программы; реализована глобальная экономия памяти ([79], стр. 201), основанная на теории, разработанной С.С. Лавровым [95] и АЕ [96], а также осуществлен ряд других оптимизационных преобразований на уровне промежуточного языка (в частности, объединение циклов с одинаковыми заголовками ([79], стр. 112) и чистка циклов ([79], стр. 153).
Научные итоги разработки трансляторов были подведены на 11 Конференции социалистических стран, состоявшейся в Киеве летом 1963 года, где, в частности, демонстрировалась работа транслятора ТА-2, а также на конференции ассоциации пользователей М-20, состоявшейся в Новосибирске в январе 1964 года. Последняя запомнилась участникам горячими дискуссиями и трескучими мороза ниже 40њC. На конференции в Киеве были заложены основы распространения координации работ по программированию на уровень международного сотрудничества. В дальнейшем была создана рабочая группа ГАМС, выработавшая проект международного стандарта на подмножество АЛГОЛА 60, известное под названием АЛГАМС [80].
В 1963 г. в Вычислительном центре Сибирского отделения АН СССР состоялись первые эксперименты, выполненные С.Л. Суржиковым, по автоматизации пакетной обработки программ с формированием пакета на перфокартах. Для этих целей была несколько модифицирована ЭВМ М-20 путем добавления системы прерывания и небольшого процессора ввода-вывода. Это был один из немногих прототипов однопрограммной операционной системы для пакетной обработки, реализованной на ЭВМ первого поколения. Впоследствии эта работа легла в основу одной из модернизаций М-20, приведшей к модели М-222 [81].
Появление ЭВМ второго поколения ("Минск-2", "Раздан-2". БЭСМ-3, М-220, БЭСМ-6. "Днепр" и др.) в целом опередило созревание концепции математического обеспечения и идентификацию системного программирования. Предпосылки к исправлению положения сложились, однако, именно в период 1959-1963 гг. Начиная с 1964 года разработка математического обеспечения стала элементом государственной технической политики. Государственный комитет по науке и технике стал одновременно и координатором работ по математическому обеспечению существующих машин, и генеральным заказчиком промышленности на математическое обеспечение вновь создаваемых ЭВМ. Ассоциации пользователей ЭВМ активно представляли научно-техническое общественное мнение и играли существенную роль в распространении новых программ. Апробация новых систем программирования, а впоследствии и операционных систем проводилась междуведомственной комиссией по математическому обеспечению под председательством академика А.А. Дородницына и целевыми комиссиями, осуществляющими приемку новых компонент математического обеспечения.
Деятельность рабочей группы ГАМС и некоторых других рабочих групп создала прецеденты международного научно-технического сотрудничества, нашедшего впоследствии свое развитие в работах по ЕС ЭВМ ("Ряд").
Интенсивная работа над трансляторами с АЛГОЛА привела к исчезновению профессии вспомогательного программиста-кодировщика и замене ее профессиональными системными программистами. Снабдив пользователей средствами автоматизации программирования, системные программисты оказались в роли сапожников, которые ходят без сапог. Все первые трансляторы писались в восьмеричном машинном коде с минимальными средствами автоматизации. Это привело к появлению первых языков системного программирования [82], [83] и первой системы построения трансляторов, основанной на промежуточном универсальном машинно-ориентированном языке АЛМО [84]. В 1964 г. началось проектирование первых мультипрограммных операционных систем для пакетной обработки с использованием загрузчиков и ассемблеров, работающих в автоматическом режиме с помощью языков управления заданиями. Большую роль в формировании современного взгляда на математическое обеспечение и архитектуру ЭВМ сыграл Конгресс ИФИП 1965 года, когда концепции совместимых серий машин, разделения времени, мини-ЭВМ стали объектом делового интереса советских специалистов. Некоторое представление о спектре советских работ по системному программированию в 60-е годы дает тематическое разбиение 99 докладов, представленных на 1 Всесоюзной конференции по программированию, состоявшейся в Киеве в октябре 1968 года [85]:
общие обзоры -- 3, процедурные языки и трансляторы -- 14, коммерческие языки и трансляторы -- 9, операционные системы -- 14, системы разделения времени -- 2, архитектура систем -- 12, технология программирования -- 12, прикладные программы -- 11, теоретическое программирование -- 22.
ОБРАЗОВАНИЕ И УЧЕНЫЕ СТЕПЕНИ ПО ПРОГРАММИРОВАНИЮ
Первый учебный курс программирования в СССР был прочитан А.А. Ляпуновым в 1952/53 учебном году на механико-математическом факультете МГУ и назывался "Принципы программирования". Структура курса складывалась, можно сказать, на глазах у студентов. Первая половина весьма тесно следовала книге "Программированием для быстродействующих электронных счетных машин" [23]. В перерыве между первым и вторым семестрами у лектора начали складываться основные подходы к "операторному методу". Вся вторая половина курса была результатом совместной работы профессора и студентов по созданию и уточнению символики операторов, используемых при составлении схем программ. Курс читался и воспринимался с большим энтузиазмом, и неслучайно почти половина слушателей математиков-вычислителей стала после выпуска профессиональными программистами.
В 1955 г. чтение курса программирования в МГУ продолжил ШБ. Через пару лет состав курса стабилизировался.
В современных терминах его структура выглядит следующим образом: архитектура ЭВМ; арифметические основы, ознакомление с системой команд; программирование линейных последовательностей команд; программирование ветвлений; программирование циклов; синтез программы в рамках операторного метода; технология программирования (стилистика, комментарии, блок-схемы, операторные схемы, отладка); компоненты математического обеспечения (библиотеки, трансляторы, отладочные программы).
В качестве учебной ЭВМ использовалась или "Стрела", или абстрактная трехадресная ЭВМ.
Первой книгой об ЭВМ, рассчитанной на массового читателя, была уже упоминавшаяся книга А.И. Китова "Электронные цифровые машины", вышедшая в середине 1956 года [33]. Коллеги-профессионалы иногда критиковали эту книгу за неточности или поверхностное изложение. Однако, перечитав ее почти через 20 лет, авторы должны подтвердить, что это было добросовестное, а главное, весьма оперативное изложение доступных в то время сведений об ЭВМ. Достоинством книги была убедительная и увлекающая свежего читателя демонстрация разнообразной новизны, вносимой ЭВМ в практику человеческой деятельности.
Развитием этой книги, а также конспекта лекций, выпущенного в 1056 г. для слушателей Артиллерийской инженерной академии [86], стала книга А.И. Китова и Н.А. Криницкого "Электронные цифровые машины и программирование" [87]. Это была первая книга, официально рекомендованная Министерством высшего образования в качестве учебного пособия, весьма солидного объема (572 стр.), изданная большим тиражом (25 тыс. экземпляров). Весьма богатая содержанием, книга отличалась некоторой пестротой стиля -- от популярного изложения основ до руководств к пользованию транслятором. Методика изложения программирования следовала сложившейся схеме (см. выше), но содержала в дополнение к ней две главы с подробным изложением теории схем программ (главным образом, по Ю.И. Янову) и правил программирования для одной из разновидностей трансляторов (ПП-С) для "Стрелы", сделанного в стиле ПП-2. Одним из любопытных обобщений была возможность использовать операторы присваивания в качестве аргументов отношений в логических условиях, например, допускалась запись ([87], стр. 502):
\begin{displaymath}1. x= t > 0 7002, 4005,\end{displaymath}
\begin{displaymath}2. x^2 + y^2 = r < 5 \land x - z > 3 12, 4015,\end{displaymath}
которая в современной нотации означает
\begin{displaymath}{\bf if} (t:=x) > 0 {\bf then go to} L15 {\bf else if}
(r:=x \uparrow 2+y \uparrow 2) < \end{displaymath}
\begin{displaymath}< 5 \land x-z > 3 {\bf then go to} L12 {\bf else go to}
L15 {\bf fi fi}\end{displaymath}
Первым учебником по программированию была книга киевских авторов Б.В. Гнеденко, В.С. Королюка и Е.Л. Ющенко "Элементы программирования" [88] (вышла в 1961 г., была переиздана в 1964 г. и переведена на ряд иностранных языков (1964 г. -- в ГДР и Венгрии, 1969 г. -- во Франции)). Авторы использовали для изложения условную ЭВМ и дидактику курса А.А. Ляпунова. Отдельная глава была посвящена адресному программированию.
Первой попыткой создать солидный университетский курс программирования, "построенный на современных научных и методических принципах" ([89], стр. 2). была книга Е.А. Жоголева и Н.П. Трифонова "Курс программирования" [89], основанная на опыте чтения лекций по программированию в МГУ. Это был также первый курс, базирующийся на АЛГОЛЕ 60. Попытка оказалась в целом весьма удачной, книга была основным вузовским учебником по программированию вплоть до появления машин третьего поколения и издавалась несколько раз тиражом, приближающимся к 300 тыс. экземпляров. Модернизированная версия этого учебника еще и сейчас широко используется как материал для общего вводного курса программирования.
Первая известная авторам диссертация, связанная с использованием ЭВМ, -- кандидатская диссертация И.С. Мухина (который в течение многих лет был заместителем директора ИТМиВТ, защищенная в 1953 г. и посвященная расчетам равноустойчивых грунтовых откосов [90]. Приведенные расчеты, выполненные на БЭСМ в 1952 г., требовали решения системы гиперболических уравнений на плоскости. Эта работа открыла поток самых разнообразных прикладных диссертаций, демонстрировавших мощь ЭВМ и предоставляемые ими возможности. С самим программированием дело обстояло гораздо сложнее, -- прошли годы, прежде чем оно преодолело комплекс неполноценности, а окружающие усмотрели в нем научное содержание.
Кажется, первой попыткой академической трактовки собственно программистских проблем была глава докторской диссертации ШБ, защищенной в 1953 г. и посвященной в целом ошибкам округления. В этой главе описывалась некоторая систематическая процедура организации двойного счета на ЭВМ для обеспечения надежности вычислений. Несмотря на практичность схемы и актуальность проблемы, эту часть диссертации многие игнорировали, а некоторые оспаривали.
В 1954 г. в своей дипломной работе, посвященной обращению матриц, АЕ изложил некоторую общую схему программирования и описал алгоритм настройки по месту перемещаемой программы.
Постепенно начала набирать силу более здравая точка зрения. В 1957 г. на ученом совете МИАНа во время защиты первой диссертации собственно по программированию (Э.З. Любимский. "Об автоматизации программирования и методе программирующих программ" [60]) состоялась оживленная "мета"-дискуссия. Диссертант, посвятив основное изложение описанию транслятора ПП-2, добавил теоретическую главу, посвященную уже упоминавшемуся выше "параметрическому" виду записи для решения на ЭВМ. А.С. Кронрод критиковал диссертанта за "оппортунистический уклон" и настаивал на праве представления к защите сложных системных программ, полагая достаточным свидетельством творческих способностей автора существование и полезную применимость программного продукта самого по себе.
В 1957 г. состоялась также защита кандидатской диссертации Ю.И. Янова [91]. Эта работа, ставшая классической в теоретическом программировании, также не получила единодушной поддержки, которой она заслуживала.
В 1958-1959 гг. состоялись две защиты кандидатских диссертаций по вопросам программирования, сделанные на материале первых экспериментов по машинному переводу: О.С. Кулагиной (о своего рода специализированном языке программирования задач машинного перевода [92]) и Л.Н. Королева (об оптимизации организации и работы со словарем [93]).
Л.Н. Королев-программист с самого начала своей деятельности -- в 1965 г. стал первым профессором программистом. Первая докторская диссертация по программированию была защищена в Киеве Е.Л. Ющенко в 1965 г. на материале разработки серии трансляторов на основе адресного языка [49], [50], [51].
Сначала все эти диссертации причислялись к существовавшим в то время родственным специальностям: вычислительной математике, счетно-решающим устройствам и т. д. В середине 60-х годов под влиянием серии работ по теоретическому программированию была образована новая специальность -- математическая логика и программирование. Употребление слова "программирование" в виде явной конституэнты привело к представлению на ученые советы потока работ по системному программированию, весьма далеких от математической логики. Совсем недавно, в 1971 г., программисты отмежевались от логиков, образовав собственную специальность -- математическое обеспечение вычислительных комплексов и автоматизированных систем управления.
Авторы хотели бы закончить этот раздел упоминанием о двух постоянных московских общегородских семинарах, сыгравших немаловажную роль в становлении программирования в СССР.
В 1955 г. в Московском университете при кафедре вычислительной математики работал семинар по смежным вопросам кибернетики и физиологии, который с 1956 г. стал называться семинаром по кибернетике. АЕ выступил первым докладчиком на этом семинаре с рефератом статьи о моделировании процесса выработки условных рефлексов на машине ЭДСАК [94]. Семинар носил интердисциплинарный характер и уделял, в частности, немалое внимание неарифметическим применениям ЭВМ. Участие в его работе позволяло программистам вырабатывать более широкий взгляд как на применение ЭВМ, так и на их место в этом процессе. Этот семинар в несколько ином стиле, работает в МГУ по-прежнему под руководством членов-корреспондентов АН СССР С.В. Яблонского и 0.Б. Лупанова.
С 1956 г. в этих же стенах начал работу, которая продолжается и поныне, научный семинар по программированию под руководством Н.П. Трифонова и ШБ. Предназначенный вначале для сотрудников кафедры вычислительной математики и вычислительного центра МГУ, он постепенно приобрел общегородской характер, собирая иногда на своих заседаниях по нескольку сот человек. Представительный характер его аудитории обеспечивал быструю и эффективную передачу информации в "горячие периоды" появления новых идей или направлений в программировании. К таким моментам активных и плодотворных дискуссий можно отнести период разработки системы программирования для университетской "Стрелы" (1957-1958 гг.), период освоения АЛГОЛа (1960-1961 гг.), период работы с БЭСМ-6, а также период изучения и выработки концепций операционных систем.