История развития языков программирования

Повышение квалификации

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

Аду Лавлейс, одну из немногих современников Ч. Бэббиджа, кто сумел по достоинству оценить аналитическую машину, называют первым в мире программистом. Она теоретически разработала некоторые приемы управления последовательностью вычислений, которые используются в программировании и по сей день, описала одну из важнейших конструкций практически любого современного языка программирования — цикл.

Революционным моментом в истории языков программирования стало появление системы кодирования машинных команд с помощью специальных символов, предложенной Джоном Моучли, сотрудником Пенсильванского университета. Эта система под названием Short Code являлась примитивным языком программирования высокого уровня. В ней программист записывал решаемую задачу в виде математических формул, а затем, используя специальную таблицу, переводил символ за символом в двухлитерные коды. В дальнейшем специальная программа компьютера превращала эти коды в двоичный машинный код.

Система, разработанная Дж. Моучли, была, по существу, одним из первых примитивных интерпретаторов. Ею заинтересовалась одна из сотрудниц его компании — Грейс МюрреЯ Хоппер, которая посвятила всю свою жизнь компьютерам и программированию! Она вспоминает, что стала «третьим в мире программистом первого в мире большого цифрового компьютера». Г.Хоппер доказала, чего она стоит как программист. Впоследствии она писала: «Я имела то преимущество, что изучала как технику, так и математику, и знала, как работает машина от начала и до конца».

При работе на компьютере Марк-I, созданном Говардом Айкеном, Г.Хоппер ее группе пришлось столкнуться со многими проблемами, и все, что ими придумано, было впервые. В частности, они придумали подпрограммы. Сейчас любой программист не задумываясь использует аппарат подпрограмм в любом языке программирования.

Интересна история появления фундаментального термина «отладка», который также впервые ввели Г. Хоппер и ее группа. Однажды жарким летним днем 1945 неожиданно произошла остановка компьютера Марк-I. Обнаружилась неисправность одного реле, контакты которого были заблокированы мотыльком, залетевшим неизвестно каким образом в помещение вычислительного центра. Вспоминает Г.Хоппер: «Когда к нам зашел офицер, чтобы узнать, чем мы занимаемся, мы ответили, что очищаем компьютер от насекомых (debuging)». С тех пор термин «debuging» (отладка) используется в технических процессах тестирования неисправностей в компьютере, а также в системах программирования.

   
   
   

Уже в 1951 г. Г.Хоппер создала первый в мире компилятор и ею же был введен сам этот термин. Компилятор Хоппер осуществлял функцию объединения команд и в ходе трансляции производил организацию подпрограмм, выделение памяти компьютера, преобразование команд высокого уровня (в то время псевдокодов машинные команды. «Подпрограммы находятся в библиотеке (компьютера), а когда вы подбираете материал из библиотеки — это называется компиляцией» -Г.Хоппер объясняла происхождение введенного ею термина.

В 1954 г. группа под руководством Г.Хоппер разработала систему, включавшую в себя язык программирования и компилятор, которая в дальнейшем полу название MATH-MATIC. После удачного завершения работ по созданию МАТ MATIC Г. Хоппер и ее группа принялись за разработку нового языка и компилятора, который позволил бы пользователям программировать на языке, близком к обычному английскому. Необходимость появления подобной системы Г.Хоппер объясняла следующим образом: «Существует много различных людей, которым нужно решать разные задачи. Некоторые из них связаны- с обработкой символов, другие — с обработкой слов, и им нужны языки другого типа, а не наши попытки превратить их всех в математиков».

Середина 1950-х гг. характеризуется стремительным прогрессом в области программирования. Голь программирования в машинных командах стала уменьшали Начали появляться языки программирования нового типа, выступающие в качестве посредника между машинами и программистами. Первым и одним из наиболее распространенных был Фортран (FORTRAN — от FORmula TRANshlor - переводчик формул), разработанный группой программистов фирмы IBM в 1954 г. (первая версия).

В конце 1950-х гг. плодом международного сотрудничества в области программирования явился Алгол (ALGOL — от ALGOrithmic Language — алгоритмический язык). Алгол предназначен для записи алгоритмов, которые строятся в виде последовательности процедур, применяемых для решения поставленных задач. Специалисты-практики восприняли этот язык далеко неоднозначно, но, тем не менее его влияние на развитие других языков и теорию программирования оказалось весьма значительным.

В нашей стране в те годы под руководством Сергея Петровича Ершова был (создан транслятор Альфа, который представлял довольно удачную русифицированную версию Алгола. Впоследствии академик С.П.Ершов сыграл важнейшую роль в становлении в СССР школьной информатики.

В 1958 г. появился компилятор FLOW-MATIC. В отличие от Фортрана — языка для научных приложений — FL0W-MAT1C был первым языком для задач обработки коммерческих данных. Работы в этом направлении привели к созданию в г. языка Кобол (COBOL — Common Business Oriented Language) — общего зыка, ориентированного на деловые задачи. Одним из основных консультантов при создании этого языка была Грейс Мюррей Хоппер.

В середине 1960-х гг. сотрудники математического факультета Дартмутского кол-Томас Курц и Джон Кемени создали специализированный язык программирования, который состоял из простых слов английского языка. Новый язык звали «универсальным символическим кодом для начинающих» (Beginner's All-urpose Symbolic Instruction Code, или сокращенно, BASIC). Годом рождения нового языка можно считать 1964 г. Сегодня универсальный язык Бейсик (имеющий множество версий) приобрел большую популярность и получил широкое распространение среди пользователей ЭВМ различных категорий во всем мире. В значительной мере этому способствовало то, что Бейсик начали использовать как встроенный язык персональных компьютеров, широкое распространение которых началось в конце 1970-х гг.

В начале 1960-х гг. все существующие языки программирования высокого уровня можно было пересчитать по пальцам, однако впоследствии их число достигло трех тысяч. Разумеется, подавляющая часть языков не получила сколько-нибудь широкого распространения; в практической деятельности используется не более двух десятков. Разработчики ориентировали языки на разные классы задач, в той или иной мере привязывали их к конкретным архитектурам ЭВМ, реализовывали различные вкусы и идеи. В 1960-е гг. были предприняты попытки преодолеть эту «разносорт-иосицу» путем создания универсального языка программирования. Первым детищем этого направления стал PL/I (Programm Language One), созданный в 1967 г. В дальнейшем на эту роль претендовал АЛГОЛ-68 (1968 г.). Предполагалось, что подобные языки будут развиваться и совершенствоваться и вытеснят все остальные. Однако и одна из этих попыток на сегодняшний день не увенчалась успехом (хотя PL/1 в (усеченных версиях использовали многие программисты). Всеохватность языка приводила к неоправданной, с точки зрения программиста, сложности конструкций, неэффективности компиляторов.

Языки программирования служат разным целям и их выбор определяется удобностью для пользователя, пригодностью для данного компьютера и данной задачи. А задачи для компьютера бывают самые разнообразные: вычислительные, экономические, графические, экспертные и т.д. Такая разнотипность решаемых компьютером задач и определяет многообразие языков программирования. По всей видимости, в программировании наилучший результат достигается при индивидуальном подходе, исходящем из класса задачи, уровня и интересов программиста. Например: Бейсик широко употребляется при написании простых программ; Фортран является классическим языком программирования при решении на ЭВМ математических и инженерных задач; язык Кобол был задуман как основной язык для массовой обработки данных в сферах управления и бизнеса. Еще более специализированным является язык Лого (от гр. logos — слово), созданный для обучения программированию школьников профессором математики и педагогики Сеймуром Пейпертом из Массачусетского технологического института. Обучаясь программированию на Лого, дети задают простые команды, которые управляют игрушечной черепашкой, снабженной карандашиком. Отметим еще один достаточно популярный специализированный язык — Пролог (PROLOG — PROgramming in LOGic), разработанный как язык программирования для создания систем искусственного интеллекта.

Развитие идеи Алгола о структуризации разработки алгоритмов нашло наивысшее отражение при создании в начале 1970-х гг. языка Паскаль швейцарским ученым Никлаусом Виртом. Язык Паскаль первоначально разрабатывался как учебный, и, действительно, сейчас он является одним из основных языков обучения программированию в школах и вузах. Однако качества его в совокупности оказались столь высоки, что им охотно пользуются и профессиональные программисты.

Не менее впечатляющей, в том числе и финансовой, удачи добился джазист; Филипп Кан, француз, разработавший систему Турбо Паскаль. Суть его идеи состояла в объединении последовательных этапов обработки программы — компиляции, редактирования связей, отладки и диагностики ошибок — в едином интерфейсе. Версии Турбо Паскаля заполонили практически все образовательные учреждения, программистские центры и частные фирмы.

Период с конца 1960-х и до начала 1980-х гг. характеризуется бурным росте числа различных языков программирования, сопровождавшим, как это ни пар досконально, кризис программного обеспечения. Этот кризис особо остро переживало военное ведомство США. В январе 1975 г. Пентагон решил навести порядок хаосе трансляторов и учредил комитет, которому было предписано разработать один универсальный язык. На конкурсной основе комитет проработал сотни проектов и, когда стало ясно, что ни один из существующих языков не может удовлетворить, принял два проекта для окончательного рассмотрения. В мае 1979 был объявлен победитель — группа ученых во главе с Жаном Ихбиа. Победивший язык окрестили Ада, в честь Огасты Ады Лавлейс. Язык Ада — прямой наследник языка Паскаль. Этот язык предназначен для создания и длительного (многолетнего) сопровождения больших программных систем, допускает возможность параллельной обработки, управления процессами в реальном времени многое другое, чего трудно или невозможно достичь средствами более прост языков.

Большой отпечаток на современное программирование наложил язык Си (первая версия — 1972 г.), являющийся очень популярным в среде разработчиков систем программного обеспечения (включая операционные системы). Си сочетает себе черты как языка высокого уровня, так и машинно-ориентированного языка, допуская программиста ко всем машинным ресурсам, чего не обеспечивают такие языки, как Бейсик и Паскаль.

Следует отметить, что многие языки, первоначально разработанные для больших и малых ЭВМ, в дальнейшем были приспособлены к персональным компьютерам. Хорошо вписались в «персоналки» не только Паскаль, Бейсик, Си, Ла| но и Лисп, Пролог — языки искусственного интеллекта.

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

Классическое операциональное и/или процедурное программирование требует от программиста детального описания того, как решать задачу, т.е. формулировки алгоритма и его специальной записи. При этом ожидаемые свойства результата обычно не указываются. Основные понятия языков этих групп — оператор и данные. При процедурном подходе операторы объединяются в группы — процедуры.

 

 

Рис. 1. Классификация языков программирования

 

Структурное программирование в целом не выходит за рамки этого направления, оно лишь дополнительно фиксирует некоторые полезные приемы технологии программирования.

Принципиально иное направление в программировании связано с методологиями (иногда говорят «парадигмами») непроцедурного программирования. К ним можно отнести объектно-ориентированное и декларативное программирование.

Объектно-ориентированный язык создает окружение в виде множества независимых объектов. Каждый объект ведет себя подобно отдельному компьютеру, их можно использовать для решения задач как «черные ящики», не вникая во внутренние механизмы их функционирования.-

Из языков объектного программирования, популярных среди профессионалов, следует назвать, прежде всего, Си++, для более широкого круга программистов предпочтительны среды типа Delphi и Visual Basic.

При использовании декларативного языка программист указывает исходные информационные структуры, взаимосвязи между ними и то, какими свойствами должен обладать результат. При этом процедуру его получения («алгоритм») программист не строит (по крайней мере, в идеале). В этих языках отсутствует понятие «оператор» («команда»).

Декларативные языки можно подразделить на два семейства: логические (типичный представитель — Пролог) и функциональные (Лисп).

По всей видимости, непроцедурные языки имеют большое будущее.

Все сказанное выше можно отобразить схемой (рис. 1) — крупно-структурной классификацией языков программирования. В ней указаны основные методологии программирования; в нижнем ряду, курсивом — типичные языки соответствующих групп.

В бывшем СССР большой вклад в развитие систем символьной математики внесла школа покойного академика Глушкова. В конце 70-х годов были созданы малые инженерные ЭВМ класса «Мир», способные выполнять аналитические вычисления даже на аппаратном уровне. Был разработан и успешно применялся язык символьных вычислений «Аналитик». Эти работы отчасти предвосхитили развитие систем символьной математики. К огромному сожалению, они появились слишком рано для своего времени и не соответствовали «генеральной линии» развития советской вычислительной техники в те годы. Уклон в сторону развития больших ЭВМ серии ЕС, навязанный в СССР компьютерными чиновниками, отодвинул компьютеры «Мир» на задний план, а затем этот класс компьютеров просто прекратил свое существование и развитие.

 

Языки программирования — это формальные языки, специально созданные для общения человека с компьютером. Каждый язык программирования, также как и «естественный» язык (русский, английский и т.д.), имеет алфавит, словарный запас, свои грамматику и синтаксис, а также семантику.

Алфавит— фиксированный для данного языка набор основных символов, допускаемых для составления текста программы на этом языке.

Синтаксис— система правил, определяющих допустимые конструкции языка программирования из букв алфавита.

Семантика— система правил однозначного толкования отдельных языковых конструкций, позволяющих воспроизвести процесс обработки данных.

При описании языка и его применении используют понятия языка. Понятиеподразумевает некоторую синтаксическую конструкцию и определяемые ею свойства программных объектов или процесса обработки данных.

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

Языки программирования, имитирующие естественные языки, обладающие укрупненными командами, ориентированными на решение прикладных содержательных задач, называют языками «высокого уровня». В настоящее время насчитывается несколько сотен таких языков, а если считать и их диалекты, то это число возрастет до нескольких тысяч. Языки программирования высокого уровня существенно отличаются от машинно-ориентированных (низкого уровня) языков. Во-первых, машинная программа в конечном счете записывается с помощью лишь двух символов: 0 и 1. Во-вторых, каждая ЭВМ имеет ограниченный набор машинных операций, ориентированных на структуру процессора. Как правило, этот набор состоит из сравнительно небольшого числа простейших операций, например: переслать число в ячейку; считать число из ячейки; увеличить содержимое ячейки на 1. Команда на машинном языке содержит очень ограниченный объем информации, поэтому она обычно определяет простейший обмен содержимого ячеек памяти, элементарные арифметические и логические операции. Команда содержит код и адреса ячеек, с содержимым которых выполняется закодированное действие.

Языки программирования высокого уровня имеют следующие достоинства:

• алфавит значительно шире машинного, что делает его гораздо более выразительным и существенно повышает наглядность и понятность текста;

• набор операций, допустимых для использования, не зависит от набора машинных операций, а выбирается из соображений удобства формулирования алгоритмов решения задач определенного класса;

• конструкции команд (операторов) отражают содержательные виды обработки данных и задаются в удобном для человека виде;

• используется аппарат переменных и действия с ними;

• поддерживается широкий набор типов данных.

Таким образом, языки программирования высокого уровня являются машинно-независимыми и требуют использования соответствующих программ-переводчиков (трансляторов) для представления программы на языке машины, на которой она будет исполняться.

http://poisk-ru.ru/s55214t1.html