Меню
Главная
Авторизация/Регистрация
 
Главная arrow Информатика arrow Информатика

Компиляция и интерпретация. Исходный и объектный модули, исполняемая программа и библиотеки (модули) программ

Для того чтобы выполнить программу, написанную на языке программирования высокого уровня, требуется перевести ее на язык, понятный процессору – в машинные коды. Этим занимаются специальные программы, которые называются языковыми процессорами, или трансляторами. Различают два вида языковых процессоров: интерпретаторы и компиляторы.

Интерпретатор – это программа, которая получает исходную программу на языке высокого уровня и по мере распознавания его операторов выполняет описываемые ими действия.

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

Трансляция (от лат. "translatio" – передача) – в соответствии с ГОСТ 19781–90 преобразование программы, представленной на одном языке программирования, в программу на другом языке программирования, в определенном смысле равносильную первой.

Транслятор – это программа, которая получает на вход исходную программу и формирует на выходе объектную программу (программу на объектном языке программирования). В частном случае объектным кодом может служить машинный язык, и в этом случае полученную на выходе транслятора программу можно сразу же выполнить на компьютере.

В общем случае объектный язык необязательно должен быть машинным или близким к нему (автокодом). В качестве объектного языка может служить и некоторый промежуточный язык. Для промежуточного языка может быть использован другой компилятор или интерпретатор – с промежуточного языка на машинный. Схему трансляции, когда исходная программа переводится на промежуточный язык, который затем интерпретируется, называют гибридной. Такая схема используется в языках Java и С#.

Транслятор, использующий в качестве входного языка близкий к машинному (автокод или язык АССЕМБЛЕР), традиционно называют ассемблером.

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

Каждый оператор языка переводится компилятором в последовательность машинных команд, которая может быть весьма длинной, поэтому языки типа ПАСКАЛЬ иС++ и называются языками высокого уровня. В языках низкого уровня, например в АССЕМБЛЕРЕ, каждая команда переводится в одну или несколько машинных команд.

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

Компоновщик, или редактор связей, формирует исполняемый модуль программы, подключая к объектному модулю другие объектные модули, в том числе содержащие функции библиотек, обращение к которым содержится в любой программе (например, для осуществления вывода на экран). Если программа состоит из нескольких исходных файлов, они компилируются по отдельности и объединяются на этапе компоновки. Исполняемый модуль имеет расширение .ехе и запускается на выполнение обычным образом, при этом присутствия компилятора в памяти компьютера не требуется.

Таким образом, при компиляции трансляция и исполнение программы идут последовательно друг за другом. При интерпретации – параллельно. Один раз откомпилированная программа может быть сохранена во внешней памяти и затем исполняться многократно.

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

В самом языке программирования, вообще говоря, не заложен способ его реализации, однако одни языки почти всегда компилируются, например С+ + , другие, например Smalltalk, почти всегда интерпретируются; Java компилируется в байт-код и затем интерпретируется.

В настоящее время практически любая реализация языка представлена как среда разработки, которая включает в себя:

  • 1) компилятор (или интерпретатор);
  • 2) отладчик – специальную программу, которая облегчает процесс поиска ошибок; пользуясь ею, разработчик может выполнять программу "по шагам", отслеживать изменение значений переменных в процессе выполнения и др.;
  • 3) встроенный текстовый редактор;
  • 4) специальные средства для просмотра структуры программы;
  • 5) библиотеку готовых модулей, классов, например для создания пользовательского интерфейса (окна, кнопки и т.д.).

В 1980-е гг. активно прорабатывалась идея визуального программирования, основной смысл которой состоит в том, чтобы процесс "сборки" программы осуществлялся на экране дисплея из программных конструкций-картинок. В результате появились среды разработки четвертого поколения (4GL), в которых разрабатываемый программный продукт строится из готовых крупных блоков при помощи мыши. Примерами таких сред являются: Delphi, Visual Java, Microsoft Visual Studio .NET.

Порядок разработки программы

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

Разные задачи требуют различных технологий своей разработки, различающиеся принципами, количеством и составом этапов, областями применения и назначением. Для создания широкого спектра программ успешно применяется классический жизненный цикл разработки, когда очередной этап начинается после полного завершения предыдущего. Обычно выделяют следующие этапы:

  • 1) постановка задачи;
  • 2) математическое описание задачи;
  • 3) выбор и обоснование метода решения;
  • 4) выбор структур данных и алгоритмов решения задачи;
  • 5) составление (кодирование) программы;
  • 6) тестирование и отладка программы;
  • 7) анализ результатов.

Некоторые этапы могут отсутствовать, например в задачах разработки системного программного обеспечения отсутствует математическое описание.

Подробно об этом рассказывается в гл. 26.

 
Если Вы заметили ошибку в тексте выделите слово и нажмите Shift + Enter
< Предыдущая   СОДЕРЖАНИЕ   Следующая >
 

Популярные страницы