Компиляторы и интерпретаторы
Программист должен понимать, что язык программирования определяет характер программы, а не способ ее выполнения компьютером. Есть два способа выполнения программы компьютером: она может быть подвергнута компиляции или интерпретации.
Программа, написанная на любом языке программирования, может как компилироваться, так и интерпретироваться, однако многие языки изначально созданы для выполнения премущественно одним из этих способов. Например, Java рассчитан в основном на интерпретацию программы, а язык С (С++) —на компиляцию.
Кратко различия компиляторов и интерпретаторов можно пояснить следующим образом.
В простейшем случае интерпретатор читает исходный текст программы по одной строке за раз, выполняет эту строку и только после этого переходит к следующей. Так работали ранние версии языка Basic. В языках типа Java исходный текст программы сначала конвертируется в промежуточную форму, а затем интерпретируется.
Компилятор читает сразу всю программу и конвертирует ее в объектный код, то есть транслирует исходный текст программы в форму, более пригодную для непосредственного выполнения компьютером. Объектный код также называют двоичным или машинным кодом. Когда программа скомпилирована, в ее коде уже нет отдельных строк исходного кода.
В общем случае интерпретируемая программа выполняется медленнее, чем скомпилированная. Необходимо помнить, что компилятор преобразует исходный текст программы в объектный код, который выполняется компьютером непосредственно. Значит, потеря времени на компиляцию происходит лишь единожды, а в случае интерпретации — каждый раз при очередной компиляции фрагмента программы в процессе ее выполнения.
С (С++) разрабатывался преимущественно для компиляции. Поэтому при разработке программ на С большинство программистов используют именно компилятор, а не интерпретатор.
Компиляция и выполнение программы на языке С (С++)
Программа на языке С++ — это текст. С помощью произвольного текстового редактора программист записывает инструкцию, в соответствии с которой компьютер будет работать, выполняя данную программу.
Для того чтобы компьютер мог выполнить программу, написанную иа языке С++, ее нужно перевести на язык машинных инструкций. Эту задачу решает компилятор. Компилятор читает файл с текстом программы, анализирует ее, проверяет на предмет возможных ошибок и, если таковых не обнаружено, создает исполняемый файл, т.е. файл с машинными инструкциями, который можно выполнять.
Таким образом, создание выполнимой программы на языке С (С++) состоит из следующих трех шагов:
разработка,
компиляция,
компоновка программы с библиотечными функциями.
В настоящее время большинство компиляторов поставляется вместе с оболочкой программирования, содержащей редактор текста. Оболочки содержат обычно также автономный компилятор. При наличии автономного компилятора для написания программы можно использовать любой удобный редактор.
В общем случае компилятор C++ можно использовать для компиляции программы, написанной на С. В настоящее время большинство компиляторов могут работать с программами, написанными как на С, так и на C++.. При этом необходимо правильно указывать расширение файла, содержащего текст программы.
Согласно действующему соглашению, файлы программ, написанных на С имеют расширение .С, а написанных на C++ — .СРР. Присвоение расширения .СРР файлу программы, написанной на С, недопустимо, потому как эти языки все же существенно отличаются друг от друга, и компилировать программу на С так, будто это программа на C++, нельзя. Расширение .С указывает транслятору на то, что он должен компилировать программу, написанную именно на С.
Достоинства языка С++.
Быстродействие.
Код, созданный большинством компиляторов С++, весьма эффективен. Компактный язык, небольшая исполняющая система и тот факт, что язык С (подмножество С++) близок к аппаратным средствам, - все это позволяет программам на С++ работать со скоростью, близкой к быстродействию программ, написанных на ассемблере.
Структурность языка.
В С++ имеются все управляющие конструкции, которые присущи современному языку. В языке реализованы: оператор for – для циклов, конструкций if и if-else, оператор-переключатель (switch) и циклы while. В С++ также обеспечивается, благодаря управлению их видимостью, изолированность кода и данных друг от друга.
Поддержка модульного программирования.
В С++ поддерживается концепция модульного программирования, заключающаяся в раздельной компиляции и компоновке. При этом можно перекомпилировать только те части программы, которые менялись при проектировании. Эта возможность чрезвычайно важна при разработке больших программ.
Переносимость.
Переносимость – это возможность переноса некоторой программы, работающей на одном компьютере или в одной операционной системе, на другой компьютер или другую операционную систему. Программы, написанные на С++, являются самыми мобильными в современном компьютерном мире.
Библиотеки специальных функций.
Для всех популярных компиляторов С++ имеется множество библиотек функций. Имеются библиотеки функций для графики, для работы с файлами, поддержки баз данных, экранных окон, ввода данных, коммуникаций и общего назначения. Используя эти библиотеки, можно значительно сократить время проектирования.
Программистам, пишущим на C++, нужно очень хорошо представлять логическую организацию памяти компьютера, поскольку в этом языке чрезвычайно большую роль играют указатели и ссылки, а также динамическое распределение памяти. Логически память представляет собой непрерывную последовательность байтов, идентифицируемых своими адресами. Если некоторый объект (в широком смысле слова — число, строка, структура и т.д.) занимает несколько байтов, то его адресом будет являться адрес его младшего (начального) байта. Адрес на машинах класса Pentium — это, по существу, 32-битное целое число без знака. Указатель (или ссылка) фактически является переменной, которая содержит целое число, представляющее адрес другого объекта.