Автор работы: Пользователь скрыл имя, 03 Ноября 2012 в 10:52, реферат
Компьютерная программа представляет собой логически упорядоченную последовательность команд, предназначенных для управления компьютером. Процессор компьютера – это большая интегральная схема. Все данные и команды он получает в виде электрических сигналов. В двоичном коде наличие сигнала описывается понятием «1», а его отсутствие – понятием «0». Команды, обрабатываемые процессором, можно интерпретировать как ряд чередующихся определенным образом единиц и нулей. То есть любая команда преобразуется в двоичное число. Таким образом, процессор исполняет программы, представляющие собой последовательность чисел и называемые машинным кодом.
Языки программирования
Компьютерная программа представляет собой логически упорядоченную последовательность команд, предназначенных для управления компьютером. Процессор компьютера – это большая интегральная схема. Все данные и команды он получает в виде электрических сигналов. В двоичном коде наличие сигнала описывается понятием «1», а его отсутствие – понятием «0». Команды, обрабатываемые процессором, можно интерпретировать как ряд чередующихся определенным образом единиц и нулей. То есть любая команда преобразуется в двоичное число. Таким образом, процессор исполняет программы, представляющие собой последовательность чисел и называемые машинным кодом.
Писать программы в
машинных кодах очень сложно, причем
с ростом размера программы эта
задача усложняется. В компьютерах
первого поколения
Понятие «язык программирования»
Сегодня практически все
программы создаются с помощью
языков программирования. Теоретически
программу можно написать и на
естественном языке (говорят: программирование
на метаязыке), но из-за неоднозначности
естественного языка
Языки программирования – это формальные искусственные языки. Как и естественные языки, они имеют алфавит, словарный запас, грамматику и синтаксис, а также семантику.
Алфавит – разрешенный к использованию набор символов, с помощью которого могут быть образованы слова и величины данного языка.
Синтаксис – система правил, определяющих допустимые конструкции языка программирования из букв алфавита.
Семантика – система правил однозначного толкования каждой языковой конструкции, позволяющих производить процесс обработки данных.
Взаимодействие синтаксических и семантических правил определяет основные понятия языка, такие как операторы, идентификаторы, константы, переменные, функции, процедуры и т.д. В отличие от естественных, язык программирования имеет ограниченный запас слов (операторов) и строгие правила их написания, а правила грамматики и семантики, как и для любого формального языка, явно однозначно и четко сформулированы.
Языки программирования, ориентированные на команды процессора и учитывающие его особенности, называют языками низкого уровня. «Низкий уровень» не означает неразвитый, имеется в виду, что операторы этого языка близки к машинному коду и ориентированы на конкретные команды процессора.
Языком самого низкого уровня является ассемблер. Программа, написанная на нем, представляет последовательность команд машинных кодов, но записанных с помощью символьных мнемоник. С помощью языков низкого уровня создаются компактные оптимальные программы, так как программист получает доступ ко всем возможностям процессора. С другой стороны, при этом требуется хорошо понимать устройство компьютера, а использование такой программы на компьютере с процессором другого типа невозможно. Такие языки программирования используются для написания небольших системных приложений, драйверов устройств, модулей стыковки с нестандартным оборудованием, когда важнее компактность, быстродействие, прямой доступ к аппаратным ресурсам.
Языки программирования, имитирующие естественные, обладающие укрупненными командами, ориентированные «на человека», называют языками высокого уровня. Чем выше уровень языка, тем ближе структуры данных и конструкции, использующиеся в программе, к понятиям исходной задачи. Особенности конкретных компьютерных архитектур в них не учитываются, поэтому исходные тексты программ легко переносимы на другие платформы, имеющие трансляторы этого языка. Разрабатывать программы на языках высокого уровня с помощью понятных и мощных команд значительно проще, число ошибок, допускаемых в процессе программирования, намного меньше. В настоящее время насчитывается несколько сотен таких языков (без учета их диалектов).
Таким образом, языки программирования
высокого уровня, ориентированные на
решение больших содержательных
прикладных задач, являются аппаратно-независимыми
и требуют использования
Компиляторы и интерпретаторы
С помощью языка программирования создается текст программы, описывающий разработанный алгоритм. Чтобы программа была выполнена, надо либо весь ее текст перевести в машинный код (это действие и выполняет программа – компилятор) и затем передать на исполнение процессору, либо сразу выполнять команды языка, переводя на машинный язык и исполняя каждую команду поочередно (этим занимаются программы – интерпретаторы).
Интерпретатор функционирует следующим образом: берет очередной оператор языка из текста программы, анализирует его структуру и затем сразу исполняет. После успешного выполнения текущей команды интерпретатор переходит к анализу и исполнению следующей. Если один и тот же оператор в программе выполняется несколько раз, интерпретатор всякий раз воспринимает его так, будто встретил впервые. Поэтому программы, в которых требуется произвести большой объем повторяющихся вычислений, будут работать медленно. Для выполнения программы на другом компьютере также необходимо установить интерпретатор, так как без него программа представляет собой набор слов и работать не может.
Компиляторы полностью обрабатывают весь текст программы (его называют исходным кодом или source code). Они осуществляют поиск синтаксических ошибок, выполняют семантический анализ и только затем, если текст программы в точности соответствует правилам языка, его автоматически переводят (транслируют) на машинный язык (говорят: генерируют объектный код или object code). Нередко при этом выполняется оптимизация с помощью набора методов, позволяющих повысить быстродействие программы. Сгенерированный объектный код обрабатывается специальной программой сборщиком или редактором связей, который производит связывание объектного и машинного кодов. Текст программы преобразуется в готовый к исполнению ЕХЕ-файл (исполнимый код), его можно сохранить в памяти компьютера или на диске. Этот файл имеет самостоятельное значение, и может работать под управлением операционной системы. Его можно перенести на другие компьютеры с процессором, поддерживающим соответствующий машинный код.
Основной недостаток компиляторов
– трудоемкость трансляции языков
программирования, ориентированных
на обработку данных сложной структуры,
заранее неизвестной или
С помощью интерпретатора,
наоборот, для исследования содержимого
памяти допустимо в любой момент
прервать работу программы, организовать
диалог с пользователем, выполнить
любые сложные преобразования данных
и при этом постоянно контролировать
программно-аппаратную среду, что и
обеспечивает высокую надежность работы
программы. Интерпретатор при выполнении
каждой команды подвергает проверке
и анализу необходимые ресурсы
операционной системы, при возникающих
проблемах выдает сообщения об ошибках.
В реальных системах программирования
смешаны технологии компиляции и
интерпретации. В процессе отладки
программу можно выполнять по
шагам (трассировать), а результирующий
код не обязательно будет машинным,
он может быть, например, аппаратно-независимым
промежуточным кодом
Процесс создания программы включает:
Составление исходного кода программы (рис. 1) на языке программирования.
Этап трансляции, необходимый для создания объектного кода программы
Построение загрузочного модуля, готового к исполнению.
Все перечисленные выше действия требуют наличия специальных программных средств.
Совокупность этих программных средств входит в состав системы программирования:
Текстовый редактор (необходимый для создания и редактирования исходного кода программы на языке программирования).
Компилятор.
Редактор связей.
Отладчик.
Библиотеки функций.
Справочная система.
Классификация
и обзор языков
Современное состояние языков программирования можно представить в виде следующей классификации (рис. 2).
Процедурное программирование
Процедурное или императивное (от лат. Imperativus – повелительный) программирование есть отражение фон Неймановской архитектуры компьютера. Программа на процедурном языке состоит из последовательности команд, определяющих процедуру решения задачи. Основным является оператор присваивания, предназначенный для определения и изменения содержимого памяти компьютера. Концепция памяти как места хранения данных, значения которых можно изменять операторами программы, является фундаментальным в императивном программировании.
Выполнение программы
сводится к последовательному выполнению
операторов с целью преобразования
исходного состояния памяти, т.е.
программа последовательно
Одним из первых процедурных языков программирования высокого уровня стал Фортран ( FORmula TRANslation), созданный в начале 50-х гг. в США фирмой IВM.
Язык программирования С
(Си) был разработан в лаборатории
Bell для реализации операционной системы
UNIX в начале 70-х гг. и не рассматривался
как массовый. Он планировался для
замены Ассемблера, чтобы иметь возможность
создавать столь же эффективные
и компактные программы, и в то
же время не зависеть от конкретного
типа процессора. В·С сочетаются достоинства
современных высокоуровневых
Логическое программирование
Создание языка искусственного
интеллекта Пролог (PROLOG, PROgramming in LOGic –
программирование в терминах· логики)
в 1973 г. французским ученым Аланом Кольмероэ
открыло новую область –
Центральным понятием в логическом
программировании является отношение.
Программа представляет собой совокупность
определений отношений между
объектами и цели. Процесс выполнения
программы трактуется как процесс
общезначимости логической формулы, построенной
из программы по правилам, установленным
семантикой используемого языка. Результат
вычисления является побочным продуктом
этого процесса. В логическом программировании
нужно только специфицировать факты,
на которых основывается алгоритм,
а не определять последовательность
шагов, которые требуется выполнить.
Это свидетельствует о