И.Г. Головин - Конспект лекций по курсу Языки программирования (1161120), страница 6
Текст из файла (страница 6)
Алгол интересен тем, что былправильно спроектирован. Также впервые появились понятия блока,26области видимости, рекурсия, LIFO (Last In First Out) модель памяти ипонятие стека в архитектуре для передачи параметров в процедуре.Алгол 60 тоже был создан для численных расчетов, однако нишу своюне занял.Бекус и Наур придумали форму, которая в точностисоответствовала грамматике типа 2 по Хомскому – БНФ(нормальная форма Бекуса - Наура). Сейчас синтаксис всех языковописывается с их помощью.В Алголе 60 существовали ключевые слова, но не было зафиксировано,как их выделять. ‘BEGIN’ или \BEGIN/ или begin. Это зависело отреализации.
Ученые не задумывались о технологическом аспектепереносимости программ. Они заботились о переносимости знаний. Овводе-выводе они также не задумывались (его не было в стандартеязыка). Язык оказался тяжело и неэффективно реализуем.Быстродействие ЯП – усредненное соотношение времени выполнения программ,написанных на ЯП, ко времени выполнения программ, написанных на ассемблере машины.Например, для языка Фортран этот показатель равен 1,05.
Для языка Алгол этот показательнаходится в пределах 7-10. Заметим, что производительность программиста зависит от еготаланта, и практически не зависит от конкретного языка.Язык Алгол-60 – это язык для людей. Влияние Алгола в том, что это прежде всего языкобучения алгоритмизации, умению решать задачи. Сейчас существует много кодеров,которые учатся на Си. На основе Алгола созданы все базисные языки индустриальногопрограммирования.Затем программисты начали заниматься теорией грамматик, формальных языков.
Вирт,Кнут исследовали LR(1), нисходящий, восходящий анализ. Все ученые отметились в этойобласти. В начале 70-х годов изобрели Look – Ahead грамматики. Произошел скачок в этойобласти.Следующий язык, принадлежащий этому периоду – Cobol.Пример (COBOL)COBOL (Common Business-Oriented Language).Второй по распространенности язык программирования в США.Особое внимание было уделено вводу/выводу по маске:#.##Типы данных языка: строка, целое число, дата. DDMMYY – Здесьвозникло множество проблем: никто и не мог предположить, что27программы на COBOL’e доживут до 2000-х годов (и поэтому незаботились о решении «проблемы 2000»)..
А они до сих порсуществуют!Вообще в 60-е годы создавалось множество языков программирования. Каждый уважающийсебя ВЦ должен был иметь собственный ЯП. Военные, чтобы создать систему ракетнойобороны создали свой язык. На самом деле ничего военного в языке не было. Он былоснован на Алголе-68.Для решения задач искусственного интеллекта (моделирования человеческого разума) былсоздан язык LISP в MIT – «язык обработки списков». Для этих задач язык Фортран былабсолютно не нужен.
Для поиска не нужна арифметика. Основа LISP – символьныевыражения (s-expression).БУРНЫЙ РОСТИтак, первый язык программирования появился в 1957г., спустя 10 лет в США был проведенсравнительный анализ существующих ЯП. Там их было уже 400. В настоящее времяколичество ЯП точно никто не назовет, многие языки еще и вымирают. Очень примерно ихоколо 10000, но может быть, число приближается к 20000. Далее мы будем изучать тольконаиболее значимые.Люди начали придумывать собственные ЯП. А когда создается много ЯП – естественно, нетодного универсального. Придумывались свои языки программирования по двум причинам:нет хорошего языка программирования для некоторой предметной области, и не все языкибыли переносимы. Программисты стали пытаться придумать универсальный язык. Всегобыло 3 неудачные попытки создания идеального универсального ЯП. Почему неудачные? Апосмотрите – вы программировали хотя бы на одном из них:1.
PL\I – 1964г.2. Algol-68 – 1968г.3. Ада – 1980 - 1983ггПрограммисты брали разные элементы из разных ЯП, просто потому что понравились,комбинировали их, таким образом получались новые ЯП, более сложные. Первой над такимпроектом начала работать IBM (проект IBM 360).Пример (PL\1)Язык PL\1 комбинировал языки Fortran (передача параметров позначению, списки ввода-вывода), Алгол 60 (блочная структура), Cobol.Язык создавался комитетом.Существовало 2 компилятора PL/I – быстрая и отладочная версии.Это настолько сложный язык, что даже корректная программамогла на отладочной версии работать, а на быстрой – нет. Есливыкинуть около 80% возможностей языка, то получился бы оченьнеплохой (Мейерс).28С появлением мини ЭВМ вымер язык PL/I. IDB вложила около одногомиллиарда долларов в язык PL\1.Причина провала языка PL\1 заключалась в несогласованных компромиссов, а«несогласованный компромисс всегда хуже любой из крайних точек зрения» (И.Г.).Другой пример – Алгол 68.Пример (Алгол 68)Другая попытка – Algol 68.
Рабочая группа создателей языкасменилась.Впервые была описана семантика ЯП.W – грамматика – совокупность двух правил класса 2:A→αA – могут быть составными. Протоправила используются длягенерации частей метаправил. С помощью бесконечного числа правилможно было выразить произвольную семантику.Алгол-68 не «пошел» из-за сложности описания, конструкций.Основная идея – полная ортогональность (независимость) языковыхконструкций.Пусть даны конструкции K1, K2, K3, тогда в контекстахK1 K2K1 K3Смысл K1 должен быть одним и тем же.К примеру, Фортран был самым неортогональным ЯП.DO 5 I=1,N-1 может стоять только N. Переменная ≠ выражение.К примеру, на Паскале: for I := v1 to v2 do Sv1, v2 – интегрального типа, S – произвольное.Заметим, что, вообще говоря, архитектура фон Неймана неортогональна. В этой архитектуре есть понятие переменная,которая отражает состояние, выражение, и оператор, которыйимеет побочный эффект – отсюда следует ортогональность.29В языке Алгол 68 выражение без точки с запятой являетсявыражением, а если поставить точку с запятой, то это ужеоператор.exprexpr;Раз любое выражение может быть оператором, то и любой операторможет быть выражением.
Это означает, что любой оператордолжен иметь значение.Примеры:v = e – имеет значение vv1, v2, v3 – имеет значение v3print(v1) – имеет значение v1while {…} – неопределенное значение, если не выполняется.Любое выражение должно быть корректно как правостороннее. То,что должно быть слева, имеет на один уровень ссылок больше.const – ссылка уровня 0ref int – ссылка уровня 1, и так далееВ результате язык получился сложным и для восприятия, и посуществу.В 1969г.
появился Паскаль. Вирт просил не ассоциировать свою фамилию с названиемязыка. Можно провести такую аналогию: Алгол-60 (Неандерталец) – Паскаль (Homo sapiens).Паскаль – язык для обучения программированию. В нем был использован принцип«Алгоритм + структура данных = программа». Принципы языка – простота, логичность,ортогональность (там, где это возможно).Третья попытка создания «идеального языка программирования» – язык Ада.Пример (Ада)Ада – последняя попытка создать универсальный ЯП.Как уже упоминалось в курсе, согласно исследованию МинобороныСША, 50% затрат на создание программного продукта уходит насопровождение. Это связано в том числе с многообразием языков.
Сточки зрения отдельного человека, менять компании – нормально,однако вновь пришедшему в компанию человеку бывает сложноразобраться.30В 1975г. только подрядчиками Пентагона использовалось 350 языков.Выделили 10 наиболее используемых. Затем установили соломенные,деревянные, стальные требования по надежности и эффективности.Критические задачи должны были решаться за гарантированноевремя.Анализ требований установил, что будет достаточно одного языка.Был объявлен конкурс. Уже существовавшие языки PL\1, Алгол 68,Паскаль не подходили. Было 12 кандидатов на участие, в финал вышли4 претендента, среди которых было два лидера: «красный» и«зеленый» языки программирования. В итоге победил «зеленый», и егоназвали «Ада» в честь первого программиста Ады Лавлейс.Все ПО создавалось только на ЯП Ада. С тех пор запретили созданиеподмножеств и надмножеств этого языка.
Использовались толькосертифицированные компиляторы. Ушло 3 года на созданиекомпиляторов и переиздание стандарта. Первый советскийкомпилятор языка Ада был создан в Ленинграде (конечно, он былнесертифицированным). Скорость компиляции составляла примерно3 строки в минуту.Язык получился слишком сложным.
В 1984 году у выпускниковколледжа зарплата могла повыситься на 10 тысяч долларов в год,если они изучали Ада.Ада – учебник технологий программирования.Задачи, поставленные перед языком, решены не были.История стандартов: Ада 83 – Ада 95 – Ада 2005.В язык был встроен механизм внутренней многозадачности.Что нового было в Ада? Почти ничего.Рандеву, платформонезависимый механизм внутреннеймногозадачности (оказался неэффективным, аналогичномногопоточности JVM).У каждого программиста была своя библиотека интерфейсов.Также в это время появились другие ЯП.Модула2 – был создан Виртом в 1980г.
Был лучше Паскаля, однако не «пошел».PL/360 – язык Ассемблера, не зависящий от архитектуры.BCPL – предок Си. АСТРА – создан в Советском Союзе. Эта языковая ниша уже была занятаязыком С. В языке C, по сравнению с его предшественником B, были введены типы данных.31Однако в C тип данных – это всего лишь шаблон размещения в памяти (и не более того).Язык C на большинстве архитектур обогнал Fortran.Prolog был создан в 1971 году, Smalltalk в 1972.Во время бурного роста получили развитие функциональная, логическая и объектнаяпарадигмы языков программирования.Ф УНКЦИОНАЛЬНАЯ ПАРАДИГМАВ 1978 году Тьюринговскую премию по программированию проучил Джон Бэкус.
Он – авторязыка программирования Algol, придумал БНФ – Бэкусову нормальную форму. По традиции,на церемонии вручения Тьюринговской премии награжденный должен прочитать лекцию.Джон Бэкус прочитал лекцию, которая называлась «Может ли программирование бытьсвободно от фон Неймановского стиля?».В программировании в то время можно было наблюдать вялотекущий кризис, который былсвязан с борьбой с все нарастающей сложностью программного обеспечения. Джон Бэкуспредложил ориентироваться на функциональное программирование.