лекция 2 (1161097), страница 2
Текст из файла (страница 2)
1977 Фортран 77 – самый популярный вариант языка
1990 Фортран 90 – совместим со старыми версиями, многие недостатки устранены, но на другую нишу кроме НТР не претендует.
Остальные языки.
1. В данный период языки появлялись по принципу заполнения ниш, так первой возникла ниша НТР. И кроме Фортрана в 1960 году возник Алгол 60. Именно Алгол 60 концептуально оказал влияние на многие последующие ЯП. Так, например, цикл for, впервые использовался в Алголе. Алгол был написан не как ЯП, а как язык описания алгоритмов – Algorithmic Language. Его разработала группа учёных в рамках IFIP. Он проектировался, в отличие от Фортрана, под влиянием определенных концепций языков. В Алголе впервые появилась рекурсия, появилось понятие стека, появилось понятие вложенных областей видимости. Впервые синтаксис языка был описан формально (БНФ – примерно то же самое, что и грамматики класса 2 по Хомскому). Именно после Алгола описания ЯП выглядят следующим образом:
1. Словесные описания лексики
2.Формальное описание синтаксиса с помощью конструкций типа БНФ
3.Словесное описание семантики введенных понятий
Была достигнута унификация в описаниях ЯП. Хотя Алгол и был языком номер два в своей нише, но он получил достаточно большое распространение в Западной Европе, странах Советского блока именно как первый ЯП.
В Алголе присутствовали некоторые языковые конструкции, которых нельзя эффективно скомпилировать. Существует следующий неформальный показатель эффективности языка L: путь есть некоторый машинный язык М, и если взять некоторую задачу и запрограммировать ее на языке L (оттранслировать в объектный код) и на языке ассемблера, то показатель времени выполнения программы скомпилированной к программе на ассемблере все-таки должен быть больше единицы (для современных машинных языков это уже не совсем так). Так если для оптимизирующего компилятора Фортрана 4 Fortran-H компании IBM для ОС 360 этот показатель достигал 1,04, то для Алгол этот показатель 7-10. Алгол - язык не модульный, с точки зрения индустриального программирования он распространения не получил.
2. У IBM было два семейства компьютеров 709Х – для НТР, и 14ХХ – использовались для ввода вывода, либо для коммерческих расчетов (большой объем данных и тривиальные операции). Так по инициативе министерства обороны США в 1960 году появился COBOL - Common Business-Oriented Language для бизнес-ориентированных приложений. Язык был не самый удачный, но из-за ранней стандартизации получил широкое распространение. Проблема «2000-ого года» появилась из-за того, что в КОБОЛе был специальный тип данных – «дата», который занимал две десятичные цифры. Кобол до 90-ых годов занимал господствующее положение в нише таких программ как:
1. программы для работы с большими БД
2. программ для автоматизации финансовых расчетов
и.т.д.
Если бы не проблема 2000-ого года, возможно, многие программы на Коболе до сих пор бы использовались. Теперь в основном производиться реинжениринг (переписывание программ на другой язык). Сейчас используются – Visual Basic, Java и web-языки.
3. Языки программирования для искусственного интеллекта (задача близкая к проблеме машинного перевода, задачи символьной обработки). Появился в 1961 году LISP, который существует до сих пор и является языком функционального программирования, основная и единственная структура данных – список, который может содержать либо атомы (символы или числа), либо другие списки. Основные операции – применение функций. Cons – из 2-х списков делает один, cat и cdr берут соответственно начало и хвост некоторого списка, defun – позволяет определять свою собственную функцию, eval – своего рода интерпретатор языка LISP (можем формировать программу и немедленно ее выполнять). ЛИСП активно развивался, появились диалекты (Common LISP), есть объектно-ориентированное приложение CLOS. Были даже компьютеры, чьим внутренним языком программирования был ЛИСП – ЛИСП-машины.
Позже был придуман Schema – тоже язык функционального программирования, но не диалект ЛИСПа, гораздо проще.
К индустриальному программированию такие языки пока не относятся в силу своей неэффективности. Хотя за эффективность, платим сложностью соответствующих программных систем. В 1978 году Джон Бекус был удостоен премии Тьюринга (за свои заслуга в изобретении Фортрана, за развитие Алгола), на своей лекции он предложил отказаться от парадигмы Неймана и использовать FP - функциональное программирование, которое рассматривается как альтернатива императивного программирования.
4. Обработка текстов – SNOBOL, Icon (1960). И так далее для каждой языковой нише свой язык. Так в США использовалось огромное количество языков. Возникала проблема переписывания программ под новую периферию. Для каждого проекта писали свой язык – такая была концепция. Таким образом, данный этап развития ЯП завершился попыткой создания универсального ЯП – в смысле применимого для НТР и БОП. Так в фирме IBM для машины IBM360 пытались создать новый язык на базе Кобола, Алгола и Фортрана – NPL (new programming language). В 1964 году - язык PL/I, который получился очень громоздким, но не совсем универсальным. Множество атрибутов и не совсем ясные правила умолчания. Существовало даже два компилятора – отладочный и оптимизирующий. Сейчас язык вымер из-за слишком большой сложности.
Другой попыткой создания универсального ЯП был Алгол 68. Коллектив разработчиков отличался от того, который разрабатывал Алгол 60. Алгол 60 –первая попытка формального описания синтаксиса языка, то для Алгола 68 была введена специальная W – грамматика, которые позволяли описывать не только синтаксис, но и семантику (Ван Вейнгаарен). Присутствует принцип ортогональности языковых конструкций – независимость друг от друга языковых конструкций. Любые две конструкции можно употреблять в любых контекстах.
Пример из Паскаля:
For V=e1 to e2 do S это неортогональная конструкция, так как
-
V – только простая переменная, а есть переменные с индексами
-
типы е1 и е2 – непроизвольные
-
оператор и выражение – две совершенно разные конструкции в Паскале
В Алголе 68 никакой разницы между оператором и выражение не было E – выражение, а Е; - оператор. Любой оператор – выражение, т.к. у любого оператора есть значение. Алгол 68 погиб как от сложности описания, так и от своей внутренней сложности. И вторая попытка создания универсального языка успехом не увенчалась.