Читайте также:
|
|
Алгоритм, предназначенный для исполнения на компьютере, должен быть записан на языке программирования.
На машинах первого поколения программа записывалась на машинном языке, так как других средств записи программы в распоряжении человека не было. Программирование на машинном языке было очень трудоемким, так как требовало большой детализации алгоритма. Кроме того, программа получалась не наглядной, и нужно было приложить значительные усилия, чтобы по ее тексту понять, что именно она делает. Еще один недостаток программирования на машинном языке состоял в том, что для реализации одного и того же алгоритма на разных типах компьютеров приходилось писать разные программы, поскольку каждый из типов имел свою систему команд, отличную от других вычислительных машин. Это приводило к дублированию работы, если нужно было одну и ту же задачу решать на разных типах компьютеров.
В связи с этим усилия разработчиков были направлены на то, чтобы облегчить процесс программирования. Были созданы языки программирования, использующие символику, близкую к общепринятой математической. Эти языки программирования более совершенны и позволяют значительно повысить производительность программирования, они предоставили возможность описывать широкие классы алгоритмов, не ограничиваясь конкретным типом компьютера.
В настоящий момент существуют тысячи, если не десятки и сотни тысяч языков программирования, диалектов и их реализаций. Более того, постоянно рождаются новые языки или появляются диалекты существующих языков. Почти любой язык программирования можно рассматривать как улучшенную версию какого-нибудь другого языка. Иногда очень трудно провести разграничительную линию, где кончается один язык и начинается другой.
Все языки программирования можно классифицировать по следующим основным признакам:
по степени зависимости от машины;
по типам;
по семействам;
по уровню;
по средствам разработки.
По степени зависимости от вычислительной машины все языки программирования делятся на две большие группы: машинно-зависимые и машинно-независимые.
В группу машинно-зависимых языков входят уже упоминавшиеся выше машинные языки программирования, а также так называемые машинно-ориентированные языки.
К машинно-ориентированным языкам относятся мнемокоды (ассемблеры) и автокоды.
Мнемокоды являются языками символического кодирования. Алгоритм в этом случае детализируется в такой же степени, как и при использовании машинного языка. Основная единица программы – оператор – почти полностью соответствует машинной команде, отличаясь от нее применением специальных буквенных обозначений для операций и буквенно-цифровых обозначений для адресов. При переводе на машинный язык один оператор мнемокода заменяется одной эквивалентной машинной командой. Преимущество мнемокода состоит в использовании более удобных, легко запоминающихся символьных обозначений, что позволяет автоматизировать присвоение истинных адресов и упростить объединение в одну программу отдельных ее частей, составленных разными программистами. Применение мнемокода облегчает процесс программирования по сравнению с программированием в машинных кодах, но при этом от программиста по-прежнему требуется основательное знание технических особенностей компьютера и системы его команд.
Автокоды – это языки, в которых наряду с символическими эквивалентами машинных команд используются макрокоманды. Макрокоманды обозначают сложные действия. Их выполнение обеспечивается несколькими машинными командами. Все это расширяет возможности программиста по сравнению с использованием мнемокодов и позволяет получить более компактные программы.
Группа машинно-независимых языков включает процедурно- и проблемно-ориентированные языки.
Процедурно-ориентированные языки служат для записи алгоритмов обработки информации, характерных для достаточно широкого класса расчетных и информационных задач. К ним относятся, например, языки ФОРТРАН, АЛГОЛ, ПЛ/1, КОБОЛ и др.
Проблемно-ориентированные языки предназначены для описания некоторого весьма узкого класса задач, таких, например, как составление отчетов, сортировка информационных массивов и т.п. При записи программы на таком языке достаточно лишь дать формулировку решаемой задачи, определить исходные данные и форму выдачи результатов. В частности, при программировании на языке генератора отчетов (РПГ) необходимо только задать информацию о структуре и формате получаемого отчета, определить характер обработки данных, а алгоритм получения отчета при этом не описывается.
По типам языки программирования можно разделить на следующие основные группы:
Императивные языки программирования — языки, оперирующие командами, изменяющими значение элементов данных. Характеризуются наличием операций присвоения и циклами.
Декларативные языки — языки, оперирующие с помощью задания инструкций о данных и отношений между данными. Алгоритм скрывается семантикой языка. Данная категория включает аппликативные языки и языки логики. Примеры декларативных свойств - сложные множества и инструкции поиска по шаблону.
Процедурные языки — языки, определяющие как вычислять результат для какой-нибудь проблемы. Включает в себя императивные и функциональные языки.
Аппликативные языки — языки, в которых функции применяются к значениям без побочного эффекта.
Функциональные языки — языки, оперирующие с помощью функций высокого порядка, операции в них манипулируют напрямую функциями, а не данными (FP).
Языки потоков данных — языки, которые можно применять в архитектуре потоков данных. Обязательно характеризуются свободой от побочных эффектов.
Языки логики — языки, оперирующие предикатами и отношениями. Программы состоят из набора заключений Хорна
Объектно-ориентированные языки — языки, в которых данные и функции, имеющие доступ к ним рассматриваются как один модуль.
Параллельные языки — языки, описывающие программы, которые можно исполнять параллельно. Они могут быть:
многопрограммными — разделяющими один процессор;
мультипроцессорными — отдельные процессоры разделяют одну распределенную память.
Языки запросов — обеспечивают интерфейс к базам данных.
Языки спецификаций — определяют формализм для описания программных или аппаратных конструкций.
Ассемблерные языки — являются символьным представлением машинных языков конкретного компьютера.
Промежуточные языки — языки, используемые на промежуточной стадии компиляции. Могут быть как текстовыми, так и бинарными.
Метаязыки — языки, используемые для формального описания других языков.
По уровню языки программирования можно разделить на четыре основных группы: машинные, общего назначения, среднего уровня, высокого уровня и очень высокого уровня (так называемые языки четвертого поколения).
Развитие языков программирования (да и всего программирования в целом) характеризуется общей тенденцией повышения уровня языков программирования. Все начиналось с машинного автокода (пример, AUTOCODER от Алика Гленни[Alick E. Glennie], 1952), когда автокод был примитивным символьным представлением машинного кода.
Потом появились первые языки общего назначения (Fortran). В 70-е гг. получили широкое распространение языки т.н. “среднего” уровня – BLISS (один из первых “не ассемблеров”, который использовался при программировании операционной системы), BCPL, C. В то же время уже существовали языки высокого уровня, такие как PL, Algol или Pascal. С введением в последнее время в широкое пользование парадигмы объектно-ориентированного программирование наибольшее распространение получили языки высокого уровня, такие как C++, Object Pascal и т.п., корни которых лежат в наиболее распространенных языках прошлого десятилетия. В языках четвертого поколения (например, 4GL)могут использоваться естественный английский язык или визуальные конструкции. Алгоритмы или структуры данных могут выбираться компилятором.
По средствам разработки. Несмотря на то, что в последние десятилетия появилось огромное количество новых языков программирования, новых средств для конструирования компиляторов появилось не так уж и много. Большинство из существующих компиляторов по-прежнему разрабатывается на старых добрых Lex/Yacc/Bison или их новых потомках Flex++/Bison++. Другие средства, получившие широкое распространение в последнее время: PCCTS, PRECC, Cocktail.
На вычислительных машинах первого поколения от разработчика программы требовались знания устройства машины и ее системы команд, поэтому разработкой программ занимались профессиональные программисты. С появлением языков программирования высокого уровня появилась возможность привлечь к разработке программ непосредственно их заказчиков — научных работников, инженеров, экономистов и т. п., так как от разработчика программы требуется лишь хорошее знание решаемой задачи и языка программирования высокого уровня, используемого для ее решения.
Однако создание языков программирования высокого уровня само по себе еще не обеспечивало полностью возможность решения задачи с помощью компьютеров. Для этого необходим был перевод программы с языка высокого уровня на язык машины. Трансляция, как уже говорилось выше, осуществляется с помощью специальных программ — трансляторов. Язык программирования высокого уровня и соответствующий транслятор обеспечивают возможность обработки на компьютере программы, написанной на этом языке. Помимо трансляторов стали разрабатываться и другие программы, облегчающие работу человека на компьютере. В настоящее время все эти программы стали объединять в систему, получившую название системы программирования. Уже машины второго поколения обладали достаточно развитыми системами программирования. Эти системы получили полное развитие на машинах третьего поколения, где их стали включать в состав операционных систем.
Создание систем программирования привело к разделению разработчиков программ на пользователей, решающих с помощью компьютера свои задачи, и системных программистов, создающих программное обеспечение, предоставляющее определенные удобства пользователям и обеспечивающее эффективное использование компьютера.
Дата добавления: 2014-12-20; просмотров: 91 | Поможем написать вашу работу | Нарушение авторских прав |