Файл: История развития программирования в России (Начало и развитие истории программирования в мире).pdf
Добавлен: 30.03.2023
Просмотров: 163
Скачиваний: 2
В 1950 году Лазарем Ароновичем Люстерником В Институте точной механики и вычислительной техники Академии наук СССР начал функционировать семинар по программированию, одновременно с которым шла разработка машины БЭСМ. Завершением этой работы стало написание книги, посвященной вопросам программирования.
В 1952 году в СССР появилась книга Уилкса, Уилера и Гилла, которая была первым описанием интегрированной системы программного обеспечения, которая является одновременно закрытой в смысле полноты и открытой в смысле способности к росту - все это, пронизанное единым стилем работы на машине, расположенной в гармоничном соответствии со скромными возможностями оборудования.
Но проблемы были не только в недостатке информации и других трудностях послевоенного времени. Важен был переход на универсальные цифровые электронные машины, который было не просто осуществить. Эта проблема была решена академиками Мстиславом Всеволодовичем Келдышем, Анатолием Алексеевичем Дородницыным, Сергеем Львовичем Соболевым и Михаилом Алексеевичем Лаврентьевым. Все они смогли направить свои коллективы и убедить заинтересованные ведомства в переходе на универсальные электронные вычислительные машины.
В 1950 году Михаил Лаврентьев переехал в Москву и стал директором ИTM и ВT. Он организовал в Институте отдел цифровых компьютеров и пригласил Сергея Алексеевича Лебедева возглавить этот отдел, чтобы, не дожидаясь завершения работы MЭСM, начать проектировать большую ЭВМ. Уже в 1951 году машина был спроектирована, а в 1952 году началась её опытная эксплуатация. Оперативная память машины была разработана на трубках Уильямса, но, поскольку они были недоступны, то использовали ртутные линии задержки. Часть быстрой памяти была сконструирована в виде серии гнезд с пружинными контактами и прижимными крышками, сильно напоминающими вафельницы и была только читающей. "Вафельница" содержала одну 45-колонную перфокарту, в каждой строке которой содержалось по одной команде. Все оборудование, кроме трубок Вильямса и электроники, было "самодельное", включая ввод с перфоленты, двухдорожечный магнитофон, барабан и ртутную память. По тем временам машина была достаточно быстродействующей. БЭСМ имела трехадресную систему команд, у нее было два счетчика команд: центральный и местный. Возвратная передача управления и возврат осуществлялись безусловным переходом с переключением на местное управление и обратным переключением на центральное управление. Местное управление использовалось также для выполнения операций обмена.
В это же время конструкторским бюро, под руководством Михаила Авксентьевича Лесечко, проектировалась ЭВМ «Стрела». Машина не имела магнитного барабана, но специально для нее были спроектированы 45-дорожечные магнитные ленты. У машины была удобная система команд. В частности, каждая счетная команда вырабатывала логическое значение, согласно которому можно было организовать условный переход. Ещё одной особенностью было наличие «групповых операций», выполняющих покомпонентные действия с векторными массивами. Половина быстрой памяти была также односторонней, имела свое управление и использовалась для небольшой встроенной библиотеки подпрограмм.
Советский ученый Исаак Семёнович Брук в 1951 году приступил к созданию ЭВМ и создал небольшой макет, названный М-1. В течении 1952 года после накопления первого опыта и формирования коллектива под его же руководством была спроектирована М-2. Одним из ведущих разработчиков был Михаил Карцев, который после внес большой вклад в теорию и практику конструирования арифметических устройств. Создание М-2 заложило начало серии машин среднего класса.
Алексей Андреевич Ляпунов сформировал в СССР взгляд на программирование как на научную дисциплину. Он проанализировал программирование в целом и выделил ряд его фундаментальных концепций. Процесс выполнения программы был рассмотрен им, как дискретная последовательность единиц действия – операторов, извлекаемых на основе правил управления из текста программы. Так же Ляпуновым была введена классификация операторов. Он рассмотрел арифметические операторы (операторы присваивания), действующие на данные; логические операторы (включая как вычисление логических отношений, так и передачи управления); а также операторы модификации, действующие на другие операторы. Операторы модификации основывались на идее зависимости операторов от некоторого параметра (обычно, целочисленная переменная) и содержали в себе операторы формирования (инициализации), переадресации (модификация в соответствии с приращением параметра) и восстановления начального вида оператора. Текст программы представлялся состоящим из двух частей: схемы программы –символьного представления операторов, указывающего передачи управления и классификацию операторов, и спецификации операторов, указывающей их конкретное содержание. Это расчленение текста программы отражало также два этапа программирования: общее планирование алгоритма, находившее свое отражение в построении схемы программы и содержательной спецификации операторов (творческая часть), и затем систематическая реализация отдельных операторов средствами машинного языка.
Первые отечественные трансляторы называли программирующими программами. Общий концептуальный базис, фиксирующий типы операторов и общую идею их спецификации, лежал в основе входного языка каждой из программирующих программ. Унификация языков не ставилась как практическая задача. Типы операторов соответствовали вычислительным задачам. Выделялись:
- арифметические операторы Аi, которые ведут вычисление по формулам;
- логические операторы Рi, которые осуществляют управление счетом;
- операторы переадресации Fi, позволяют переходить к следующему значению индекса;
- нестандартные операторы Hi – все неарифметические вычисления, для которых спецификацией был их машинный код.
Программирующая программа ПП-2, была создана под руководством Михаила Романовича Шура-Буры в 1955 году для машины Стрела-1. В ПП-2 были усовершенствованы алгоритмы трансляции и значительное внимание было уделено оптимизации программ – экономии выражений, наилучшей реализации вычисления индексных выражений, оптимальному отведению памяти для так называемых рабочих ячеек. Это можно считать первым оптимизирующим транслятором.
ПП для БЭСМ развивала входной язык программирующих программ. Она объединяла схему и спецификацию операторов в одном тексте, был введен первый структурный оператор – оператор цикла.
ПП-2 послужила идейной основой двух проектов – ПП для Стрелы 4 и ПП для Стрелы 7. Первая из них представляла собой зачаток настоящей системы программирования: помимо собственно транслятора она содержала систему сборки модулей и некоторые средства отладки. Транслятор получал такие фрагменты объектной программы, которые потом назовут модулями, а система сборки создавала программу из оттранслированных модулей и библиотечных программ.
В ПП для Стрелы 3 был реализован ряд идей – табличный подход к синтаксическому анализу, оптимальное программирование арифметических выражений. Был изобретен метод хеширования, который применялся к экономии арифметических выражений. С трансляции начиналось не только системное, но и теоретическое программирование. Именно работы по входным языкам и трансляторам послужили толчком к созданию первой математической модели программ – схемам Янова.
В конце 50-х годов прошлого века был разработан подход к автоматизации программирования с использованием библиотек стандартных программ. Были разработаны – стандартная составляющая программа – ССП, интерпретирующая система (ИС). ИС-2 уже реализовывала некоторые функции будущих операционных систем, осуществляя динамическое связывание, подкачку и смену используемых подпрограмм, причем все это делалось с небольшими накладными расходами и весьма скромными запросами на память. Высокая эффективность ИС-2 и хорошо продуманный интерфейс с основной программой сделали ее неотъемлемой частью комплекта поставки ЭВМ.
Первое знакомство советских программистов с проектом АЛГОЛ 60 западногерманских и американских специалистов состоялось в августе 1958 года, когда Алан Перлис привез предварительную версию публикации в СССР. Общая схема языка была положена в основу проекта "Сибирского языка" системы программирования для М-20. Шура-Бура попытался решить проблему унификации конкретного представления, чтобы добиться совместимости трансляторов по входу. К сожалению, технические различия во взглядах возобладали, и полностью решить проблему не удалось. Серьезным препятствием на этом пути стало отсутствие в то время у М-20 стандартного буквенно-цифрового оборудования для ввода и вывода, что побудило разработчиков и пользователей временно решать эту проблему каждый по-своему. Кроме того, разгон, взятый АЕ в разработке "Сибирского языка", оказался слишком велик, чтобы остаться в рамках Алгола 60. Проект был адаптирован таким образом, чтобы стать расширением Алгола 60, и в таковом качестве он получил название "Входного языка", а в его конкретном представлении - Альфа-языка.
22-24 декабря 1960 году в МГУ состоялась рабочая конференция "Построение программирующих программ на основе языка АЛГОЛ". К этому времени у разработчиков уже сложились общие подходы к реализации языка и выбору схем трансляции. В ТА-1 благодаря отказу от возможной рекурсивности процедур и ряду других ограничений была выбрана компактная и быстрая схема трансляции без оптимизации. Главной задачей ТА-2 стала реализация практически полного языка без существенной потери в качестве реализации. В разработке системы Альфа было поставлено в качестве главной цели обеспечение высокого качества рабочих программ с сохранением приемлемой скорости трансляции. Отчетные публикации появились для ТА-1 и ТА-2 в начале 1964 года, для системы Альфа – годом позже.
Появление ЭВМ 2-го поколения (Минск 2, Раздан 2, БЭСМ-3, М-220, БЭСМ-6, Днепр и др.) в целом опередило созревание концепции математического обеспечения и идентификацию системного программирования.
В 1964 году началось проектирование первых мультипрограммных операционных систем для пакетной обработки с использованием загрузчиков и ассемблеров, работающих в автоматическом режиме с помощью языков управления заданиями.
В 1965 году появилось электронное вычислительное устройство с микропрограммным исполнением простейших вычислительных функций – МИР. На этих машинах был реализован язык программирования – Аналитик. В нём алфавит для ввода состоит из заглавных русских и латинских букв, алгебраических знаков, знаков выделения целой и дробной части числа, цифры, показателей порядка числа, знаков препинания и так далее. При вводе информации в машину можно использовать стандартные обозначения элементарных функций. Любые десятичные значения могут быть введены в любой форме. Все необходимые выходные параметры были запрограммированы во время постановки задачи. «Аналитик» позволял работать с целыми числами и массивами, редактировать введенные или уже запущенные программы, изменять разрядность вычислений путем замены операций.
В 1966 году Валентин Федорович Турчин создал первую версию языка программирования РЕФАЛ, он приобрел всемирную известность. РЕФАЛ – это язык для манипулирования символическими объектами, такими как тексты, формулы, программы и т.д. Программа в Рефал состоит из функций, которые могут быть определены друг через друга – рекурсивно. Отсюда и название: алгоритмический язык рекурсивных функций. Рефал – бестиповый язык. Он основан на концепции выражения объекта как универсального типа данных. Все аргументы и результаты всех функций являются объектными выражениями.
АЛМО – машинно-ориентированный язык, разработан в 1965-1966 годах как промежуточный и базовый язык универсальной системы программирования. Задумывался как язык-посредник при трансляции с различных языков. Идея заключалась в том, что для каждой аппаратной платформы достаточно было написать транслятор Алмо – и ты уже можешь работать с множеством языков программирования, которые имели трансляцию в Алмо. Были созданы реализации языка для основных отечественных машин того времени (М-20, БЭСМ-6, Минск 2, Урал 11) и трансляторы с Алгола-60 и ФОРТРАНа в Алмо.
История языка Сигма (СИмвольный Генератор и Макроассемблер) начинается в 1965 году, когда Андрей Петрович Ершов инициировал разработку нового языка программирования для работы с символьной информацией. Синтаксически ограничиваемый макросами, он допускал генеральную линию создания программ - подстановку описанных макросов. Язык содержал средства формального описания конкретной архитектуры: была разработана система параметров, в терминах которой фиксировалось представление языка для конкретной ЭВМ. Таким образом, общая Сигма-программа вместе с описанием архитектуры ЭВМ транслировалась на данную ЭВМ. Параметрами архитектуры были длина слова, представление значений типов в машинном слове и т.п., так и правила заполнения шаблонов машинных команд.
Универсальный машинно-ориентированный язык программирования Эпсилон (элементарный Преобразователь СИмвоЛьнОй иНформации), по Александру Фёдоровичу Рару, считался исключительно простым языком. Переменные в нем не имели типа и не описывались, идентификатор переменной просто обозначал содержимое ячейки, отведенной для этой переменной. Константы в языке могли быть либо натуральными числами, либо восьмеричными числами, либо – наборами двоичных цифр. Выражения были только двуместные, арифметические выражения обращались со значениями операндов, как с представлениями натуральных чисел, были еще поразрядные операции, операции сдвига и операция извлечения адреса данного объекта. Объектами языка были так называемые списки (упакованные массивы) и слова (умещающиеся в одном машинном слове последовательности элементов разной длины). Программист мог задать двоичную кодировку для символа или множество двоичных кодировок для класса символов. Существовали переходы на метку условные и безусловные, а также процедуры, замкнутые и открытые. Законным оператором языка была машинная команда, представленная в восьмеричном виде. Именно в таком виде должны были осуществляться операции ввода-вывода. Используемые программой таблицы хранились как помеченные последовательности машинных команд; совместив в памяти такую последовательность с некоторым описанным списком, программист мог использовать для выбора элемента таблицы механизм выборки элемента списка.