Эволюция языков программирования

Вид материалаДокументы

Содержание


If else=then then then; else else
Подобный материал:
1   2   3   4   5

В 1954 году в недрах корпорации IBM группой разработчиков во главе с Джоном Бэкусом (John Backus) был создан язык программирования Fortran.

Фортра́н (Fortran) — первый язык программирования высокого уровня, имеющий транслятор. Создан в период с 1954 по 1957 год группой программистов под руководством Джона Бэкуса в корпорации IBM (язык Планкалкюль, претендующий на пальму первенства, был изобретён ещё в 1945 году, но не был реализован вплоть до 2000 года). Название Fortran является аббревиатурой от FORmula TRANslator, то есть, переводчик формул. Фортран широко используется в первую очередь для научных и инженерных вычислений. Одно из преимуществ современного Фортрана — большое количество написанных на нём программ и библиотек подпрограмм.[1] Среди учёных, например, ходит такая присказка, что любая математическая задача уже имеет решение на Фортране, и, действительно, можно найти среди тысяч фортрановских пакетов и пакет для перемножения матриц, и пакет для решения сложных интегральных уравнений, и многие, многие другие. Ряд таких пакетов создавался на протяжении десятилетий и популярен (главным образом в научной среде) по сей день.

Значение этого события трудно переоценить. Это первый язык программирования высокого уровня. Впервые программист мог по-настоящему абстрагироваться от особенностей машинной архитектуры. Ключевой идеей, отличающей новый язык от ассемблера, была концепция подпрограмм. Напомним, что это современные компьютеры поддерживают подпрограммы на аппаратном уровне, предоставляя соответствующие команды и структуры данных (стек) прямо на уровне ассемблера, в 1954 же году это было совершенно не так. Поэтому компиляция Fortran’а была процессом отнюдь не тривиальным. Кроме того, синтаксическая структура языка была достаточно сложна для машинной обработки в первую очередь из-за того, что пробелы как синтаксические единицы вообще не использовались. Это порождало массу возможностей для скрытых ошибок, таких, например:

В Фортране следующая конструкция описывает «цикл for до метки 10 при изменении индекса от 1 до 100»: 
DO 10 I=1,100
Если же здесь заменить запятую на точку, то получится оператор присваивания:
DO10I = 1.100
Говорят, что такая ошибка заставила ракету взорваться во время старта!

Язык Фортран использовался (и используется по сей день) для научных вычислений. Он страдает от отсутствия многих привычных языковых конструкций и атрибутов, компилятор практически никак не проверяет синтаксически правильную программу с точки зрения семантической корректности (соответствие типов и проч.). В нем нет поддержки современных способов структурирования кода и данных. Это осознавали и сами разработчики. По признанию самого Бэкуса, перед ними стояла задача скорее разработки компилятора, чем языка. Понимание самостоятельного значения языков программирования пришло позже.

Появление Фортрана было встречено еще более яростной критикой, чем внедрение ассемблера. Программистов пугало снижение эффективности программ за счет использования промежуточного звена в виде компилятора. И эти опасения имели под собой основания: действительно, хороший программист, скорее всего, при решении какой-либо небольшой задачи вручную напишет код, работающий быстрее, чем код, полученный как результат компиляции. Через некоторое время пришло понимание того, что реализация больших проектов невозможна без применения языков высокого уровня. Мощность вычислительных машин росла, и с тем падением эффективности, которое раньше считалось угрожающим, стало возможным смириться. Преимущества же языков высокого уровня стали настолько очевидными, что побудили разработчиков к созданию новых языков, все более и более совершенных.

1954–1957 — появление языка FORTRAN, первого языка программирования высокого уровня. Через 10 лет после выхода FORTRAN, в 1967 в США уже использовалось более 400 языков. Тем не менее из всего многообразия языков можно выделить некоторое количество знаковых.

Научно-технические расчеты — FORTRAN

Версии FORTRAN: FORTRAN I (1957), FORTRAN II, FORTRAN IV (1964), FORTRAN 66 (1966), FORTRAN 77 (1977), FORTRAN 96 (1996)

Ряд свойств языка FORTRAN показывает, что он неприменим для создания надёжных программ.

Пример: Фортран глотает пробелы, что резко повышает число ошибок

цикл

(FORTRAN)

DO 10 I=1,3

операторы

10: CONTINUE

Здесь трижды выполняется тело цикла

он же, но с ошибкой

(FORTRAN)

DO 10 I=1.3

операторы

10: CONTINUE

Здесь переменной DO10I присваивается 1.3, затем однажды выполняется тело цикла

Надёжность программы — свойство программы, которое обратно пропорционально количеству ошибок в ней.

Аксиома. Абсолютно надёжных программ не бывает.

Форма записи языковых конструкций на FORTRAN не способствует созданию надёжных программ (пример с точкой вместо запятой), тем не менее, FORTAN — самый успешный язык программирования. Стандарты FORTRAN выпускались в 196619771996 годах, самой популярной версией является стандарт FORTRAN 1977 года. Успешность FORTRAN связана с успешностью занятияэкологической ниши языка программирования.

Языки программирования подобны биологическим видам, в среде языков программирования, также, как и в биологической среде, выживание одни виды и вымиырают другие. При этом даже более приспособленным видам трудно выгнать из ниши того, кто ее ужезанял. Экологической нишей для ЯП является его проблемная область. Самой первой проблемной областью являлись научно-технические расчёты, FORTRAN же был транслятором формул, что следует из его названия (FORTRAN = Formula Translator).

В научно-технических расчётах основной сложностью является построение математической модели, программы достаточно просты. НТР характеризуются малым объёмом данных и большим объёмом вычислений над ними.

Ещё одно достоинство FORTRAN в том, что он был первый. До появления FORTRAN математики были привязаны к вычислительному центру, и при смене вычислительной системы все наработки в виде написанных программ в машинных кодах старой системы переставали иметь какую-либо ценность. Появление FORTRAN позволяло писать программы и переносить их на любую систему, что давало мобильность ПО.

Мобильность ПО — переносимость ПО с одной системы на другую.

Самым важным оказалось наличие единого ЯП, тем самым появилась мобильность знаний. В результате, необходимость изучения системы команд отдана на откуп узкому количеству человек.

Тем не менее, из других ниш FORTRAN был довольно быстро вытеснен, т. к. оказался там непригоден.

Algol-60

В 1960 году командой во главе с Петером Науром (Peter Naur) был создан язык программирования Algol. Этот язык дал начало целому семейству Алгол-подобных языков (важнейший представитель — Pascal). В 1968 году появилась новая версия языка. Она не нашла столь широкого практического применения, как первая версия, но была весьма популярна в кругах теоретиков. Язык был достаточно интересен, так как обладал многими уникальными на так момент характеристиками.

Алго́л (англ. Algol от англ. algorithmic — алгоритмический и англ. language — язык) — название ряда языков программирования, применяемых при составлении программ для решения научно-технических задач на ЭВМ. Разработан комитетом по языку высокого уровня IFIP в 1958—1960 гг. (Алгол-58, Алгол-60); усовершенствован в 1964—1968 гг. (Алгол 68). Алгол относится к языкам высокого уровня и позволяет легко переводить алгебраические формулы в программные команды. Алгол был популярен в Европе, в том числе в СССР, в то время как сравнимый с ним язык Фортран был распространён в США и Канаде. Оказал заметное влияние на все разработанные позднее императивные языки программирования — в частности, на язык Pascal.

Algol-60 (Algol-58) — сделаны научной группой во главе с IFIP — язык для обменя алгоритмами между учёными различных стран и специальностей. Впервые для описания синтаксиса был применён формальный язык (БНФ). Algol получился достаточно простым и достаточно мощным. Например, программы на Algol впервые имели блочную структура, также была возможность использования рекурсии. В результате Algol стал стандартом для изучения в университетах и т. д.

Роль Algol-60 не только как учебного языка, но и как языка-предчети, например, для языка Pascal.

Основная проблема Algol-60 в том, что по своей структуре Algol-60 был похож на FORTRAN и заточен под НТР, посему они претендовали на одну нишу. FORTRAN вытеснил Algol из ниши НТР. Важным в этой нише является быстродействие и совместимость, характеризуются они простотой программ.

Быстродействие языка (эффективность) — усреднённое отношение времени выполнения программ, написанных на ЯП, к времени выполнения программам, написанных на ассемблере машины.

Эффективность = Plang / Pasm

FORTRAN достиг такого уровня, что для FORTRAN О mdash; оптимизированной версии (IBM выпускала две версии FORTRAN mdash; FORTRAN H (для отладки) и FORTRAN О) mdash этот показатель был равен 1,04. Для Algol он находился в пределах 7–10. В Algol были неэффективные способы передачи параметров в функции. Кроме того, существовавшие в то время архитектуры не были приспособлены к реализации Algol-60, например к блочной структуре программ. Для такой структуры характерно хранение данных в стеке, аппаратной реализации которого тогда не делали, и стек приходилось моделировать вручную. Язык оказался слишком неэффективный.

Коммерческие задачи — COBOL

Ещё одной нишей, появившейся чуть позднее, являются коммерческие задачи — приложения по обработке коммерческой информации. Они характерны малым объёмом простых вычислений над большим объёмом данных, и для таких приложений требовался интенсивный ввод-вывод. В результате в 1959 году появился язык COBOL (Common-Oriented Business Language).

В 1960 году был создан язык программирования Cobol.

Он задумывался как язык для создания коммерческих приложений, и он стал таковым. На Коболе написаны тысячи прикладных коммерческих систем. Отличительной особенностью языка является возможность эффективной работы с большими массивами данных, что характерно именно коммерческих приложений. Популярность Кобола столь высока, что даже сейчас, при всех его недостатках (по структуре и замыслу Кобол во многом напоминает Фортран) появляются новые его диалекты и реализации. Так недавно появилась реализация Кобола, совместимая с Microsoft .NET, что потребовало, вероятно, внесения в язык некоторых черт объектно-ориентированного языка.

Кобо́л (COBOL, COmmon Business Oriented Language) — язык программирования третьего поколения (первая версия в 1959), предназначенный, в первую очередь, для разработки бизнес-приложений.

IBM в те годы выпускала две линейки компьютеров — 709 для научных вычислений, и на которых основным языком программирования являлся FORTRAN, и 14хх для коммерческих задач, которые были ориентированы на интенсивный ввод-вывод.

Тем не менее, у COBOL тоже имелись недостатки в архитектуре. Например, в языке COBOL стандартным представлением даты была структура фиксированного вида MMDDYY, что явилось одной из основной причин проблемы 2000 года. В настоящее время данный язык является практически мёртвым, он умер только из-за проблемы 2000. До этого момента он держал нишу довольно крепко.

Кстати, именно проблема 2000 послужила одним из стимулов к разработкам в области реверсного инженеринга (перевода программ с одного языка на другой), поскольку пользователям COBOL при миграции на другие языки хотелось сохранить и повторно использовать написанные проекты.

Символьная обработка — LISP

В 1958 году появился язык Lisp — язык для обработки списков. Получил достаточно широкое распространение в системах искусственного интеллекта. Имеет несколько потомков: Planner (1967), Scheme (1975), Common Lisp (1984). Многие его черты были унаследованы современными языками функционального программирования.

Ещё один знаковый язык — LISP (LISt Processing). Используется для задач символьной обработки, ИИ. Существует множество диалектов, самый популярный — Common LISP. Не применяется для индустриальных программ, т. к. низкоэффективен (использует списки и деревья, основная операция — применение функции, чем он и силён).

Лисп (LISP, от англ. LISt Processing language — «язык обработки списков»; современное написание: Lisp) — семейство языков программированияпрограммы и данные в которых представляются системами линейных списков символов. Лисп является вторым в истории (после Фортранавысокоуровневым языком программирования, который используется по сей день. Создатель Лиспа Джон Маккарти занимался исследованиями в области искусственного интеллекта и созданный им язык по сию пору является одним из основных средств моделирования различных аспектов ИИ.

Ниши разобраны

1961 год. Уже тогда были разобраны все ниши: для системного программирования применялся ассемблер, для прикладного программирования — LISP, COBOL, для научного примененеия — FORTRAN, для обучения — Algol-60.

1960–1980: Поиски Священного Грааля

До 1980 года происходил экстенсивный рост количества языков программирования. Джон Саммит в 1967 году наcчитал 400 языков, применяемых в США.

Тем не менее, в то время появилось много известных языков. То время характеризовалось поиском Священного Грааля — единого универсального языка программирования, который применялся бы во всех областях. Первой с этой проблемой столкнулась IBM, которая поняла, что поддерживать две линейки накладно, посему в 1961 году они начали работу над проектом IBM 360 (360 градусов — полный круг решаемых задач), им хотелось иметь единый ЯП.

Первая попытка создания единого языка программирования — PL/1

В 1964 году все та же корпорация IBM создала язык PL/1, который был призван заменить Cobol и Fortran в большинстве приложений. Язык обладал исключительным богатством синтаксических конструкций. В нем впервые появилась обработка исключительных ситуаций и поддержка параллелизма. Надо заметить, что синтаксическая структура языка была крайне сложной. Пробелы уже использовались как синтаксические разделители, но ключевые слова не были зарезервированы. В частности, следующая строка — это вполне нормальный оператор на PL/1:

IF ELSE=THEN THEN THEN; ELSE ELSE 

В силу таких особенностей разработка компилятора для PL/1 была исключительно сложным делом. Язык так и не стал популярен вне мира IBM.

1964 — появление NPL (New Programming Language), позднее переименованного в PL/1. Создавался комитетом. В нём были смешаны основные ЯП. Конструкции из FORTRAN, Блочная структура из Algol, понятие записи из Кобола. Майерс сказал — «PL/1 был бы хорошим языком программирования, если из него выкинуть 80 процентов возможностей».

ПЛ/1 (PL/I, Programming Language I — «Язык программирования номер один», в русском языке произносится «пиэ́ль оди́н») — разработанный в 1964 году язык программирования, созданный для научных, инженерных и бизнес-ориентированных вычислений. Он содержит такой широкий набор синтаксических конструкций и встроенных функций, что, вероятно, не существует ни одного компилятора, поддерживающего все возможности языка ПЛ/1. ПЛ/1 поддерживает рекурсию и структурное программирование, и его основная область применения — обработка данных.

В PL/1 могло быть до 30 атрибутов у типов данных — это слишком много. Все запомнить невозможно, поэтому вводились правила-умолчания. IBM выпускала две версии трансляторов (по аналогии с FORTRAN) — PL O (отладочный) и PL F (быстрый), но они были немного разными — программа, работающая после трансляции отладочной версией, могла вылетать во время работы после трансляции быстрой. Да и спецификации языка чуть отличались.

Только IBM сложила в PL/1 несколько миллиардов, но как язык для промышленных приложений PL/1 провалился из-за своей большой сложности.

Анекдот:

— Что такое верблюд?

— Это лошадь, созданная комитетом.

Вторая попытка — Algol-68

Algol-68 — вторая попытка создания универсального языка, создан IFIP, состав которой отличался от группы, создавшей Algol-60. Специально для описания языка были придуманы W-грамматики (W от Вирт), которые позволяли описываать и синтаксис, и семантику языка. Язык являлся технически совершенным. В частности, в Algol-68 была попытка создать