Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Начальные сведения о языке.doc
Скачиваний:
8
Добавлен:
14.11.2019
Размер:
560.64 Кб
Скачать

Компиляторы и интерпретаторы

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

Про­грамма, написанная на любом языке программирования, может как компилироваться, так и интерпретироваться, однако многие языки изначально созданы для выполнения премущественно одним из этих способов. Например, Java рассчитан в основном на интерпретацию программы, а язык С (С++) —на компиляцию.

Кратко различия компиляторов и интерпретаторов можно пояснить следующим образом.

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

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

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

С (С++) разрабатывался пре­имущественно для компиляции. Поэтому при разработке программ на С большинство программистов используют именно компилятор, а не интерпретатор.

Компиляция и выполнение программы на языке С (С++)

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

Для того чтобы компьютер мог выполнить программу, написанную иа языке С++, ее нужно перевести на язык машинных инструкций. Эту задачу решает компилятор. Компилятор читает файл с текстом программы, анализирует ее, проверяет на предмет возможных ошибок и, если таковых не обнаружено, создает исполняемый файл, т.е. файл с машинными инст­рукциями, который можно выполнять.

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

  • разработка,

  • компиляция,

  • компоновка программы с библиотечными функциями.

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

В общем случае компилятор C++ можно использовать для компиляции програм­мы, написанной на С. В настоящее время большинство компиляторов могут работать с программами, написанными как на С, так и на C++.. При этом необходимо правильно указывать расширение файла, содержащего текст программы.

Согласно действующему соглашению, файлы программ, написанных на С имеют расширение .С, а написанных на C++ — .СРР. Присвоение расширения .СРР файлу программы, написанной на С, недопустимо, потому как эти языки все же существенно отличают­ся друг от друга, и компилировать программу на С так, будто это программа на C++, нельзя. Расширение .С указывает транслятору на то, что он должен компилировать программу, написанную именно на С.

Достоинства языка С++.

Быстродействие.

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

Структурность языка.

В С++ имеются все управляющие конструкции, которые присущи современному языку. В языке реализованы: оператор for – для циклов, конструкций if и if-else, оператор-переключатель (switch) и циклы while. В С++ также обеспечивается, благодаря управлению их видимостью, изолированность кода и данных друг от друга.

Поддержка модульного программирования.

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

Переносимость.

Переносимость – это возможность переноса некоторой программы, работающей на одном компьютере или в одной операционной системе, на другой компьютер или другую операционную систему. Программы, написанные на С++, являются самыми мобильными в современном компьютерном мире.

Библиотеки специальных функций.

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

Программистам, пишущим на C++, нужно очень хорошо представлять логическую организацию памяти компьютера, поскольку в этом языке чрезвычайно большую роль играют указатели и ссылки, а также динамическое распределение памяти. Логически память представляет собой непрерывную последовательность байтов, идентифицируемых своими адресами. Если некоторый объект (в широком смысле слова — число, строка, структура и т.д.) занимает несколько байтов, то его адресом будет являться адрес его младшего (начального) байта. Адрес на машинах класса Pentium — это, по существу, 32-битное целое число без знака. Указатель (или ссылка) фактически является переменной, которая содержит целое число, представляющее адрес другого объекта.