Язык программирования – это совокупность лексических, синтаксических и семантических правил, задающих внешний вид программы и действия, которые выполнит исполнитель (компьютер) под её управлением. С каждым языком связан как минимум один транслятор, т.е. утилита, преобразующая программу с соответствующего языка в другой язык, чаще всего – в машинный (объектный) код.
Трансляторы разделяют на компиляторы и интерпретаторы.
Компилятор переводит весь текст программы на языке высокого уровня в эквивалентную программу на машинном языке. Результатом его работы является один или несколько объектных файлов, которые содержат машинный код.
Интерпретатор построчно анализирует исходную программу, преобразует её пооператорно в машинный код, который сразу же выполняет. Таким образом, при работе интерпретатора результирующая программа в машинных кодах не создается.
Язык без транслятора не имеет смысла, т.к. разработанную программу невозможно будет выполнить ни на одной ЭВМ. В то же время существуют языки программирования, для которых различными фирмами разработаны различные реализации трансляторов. Например, для языка Pascal есть следующие реализации: UCSD Pascal, Turbo Pascal, Object Pascal от Borland, Object Pascal от Microsoft, Free Pascal, PascalABC.NET. Для языка C++ также разработаны различные компиляторы: GCC, Borland C++, Intel C++ compiler, Microsoft Visual C++, MinGW и другие.
В настоящее время для разработки программ используются системы программирования (они же среды разработки, IDE – Integrated Development Environment). Обычно система программирования включает в себя:
- Текстовый редактор с подсветкой синтаксиса, автоматической табуляцией, автодополнением и т.д.;
- Компилятор или интерпретатор;
- Компоновщик, он же редактор связей, (если язык – компилируемый) – собирающий из объектных модулей, получаемых после компиляции, готовую к выполнению программу;
- Отладчик, позволяющий запускать программу в режиме пошагового выполнения для поиска в ней ошибок;
- Стандартные библиотеки, содержащие наиболее часто используемые и востребованные функции;
- Справочную систему.
Многие системы программирования включают также средства RAD (RapidApplication Development – быстрая разработка приложений), например, простой и удобный способ разработки графического интерфейса.
Для C++ наиболее популярными системами программирования являются Borland C++ Builder, Microsoft Visual Studio, Eclipse, Code::Blocks, Dev-C++.
Для Pascal часто используются IDE Borland Delphi, Lazarus, PascalABC.NET.
Применительно к C++ обобщенная схема создания программы в системе программирования выглядит следующим образом:
1. Написание исходного текста программы во встроенном редакторе. Готовая программа сохраняется в файлах с расширением .cpp (модули с исходным кодом) и .h (заголовочные файлы с объявлениями функций и типов данных). В простейшем случае создается один файл .cpp.
2. Компиляция программы. При этом каждый cpp-файл сначала обрабатывается препроцессором, а потом для него запускается процесс компиляции. Компилятор анализирует исходный код на языке C++ и генерирует соответствующий ему машинный код, который сохраняется в объектном модуле. В зависимости от используемой системы программирования объектные файлы могут иметь различные расширения, но обычно это файлы .o или .obj.
3. Компоновка. Полученные объектные файлы хоть и содержат машинный код, но ещё не являются готовой к исполнению программой. Для её создания используется компоновщик, объединяющий все объектные модули программы в одном файле, и добавляющий в этот же файл код используемых стандартных функций. Полученный файл имеет внутренний формат, который может быть выполнен в используемой операционной системе. Например, в ОС семейства Windows это формат PE (Portable Executable) – формат переносимых исполняемых файлов (.EXE). В Linux-системах используется формат ELF (Executable and Linkable Format), и такие файлы обычно не имеют расширения.
4. Отладка. Практически в любой программе существуют ошибки. Лексические, синтаксические и, частично, семантические ошибки выявляются компилятором, о чем выдаётся соответствующее сообщение. Их довольно легко найти и исправить. Намного сложнее обнаружить логические ошибки, которые не противоречат правилам языка программирования, поэтому не обнаруживаются компилятором и компоновщиком, но нарушают работу готовой программы. Для их поиска используется отладчик, позволяющий контролировать выполнение запущенной программы и следить за её внутренним состоянием на любом шаге исполнения. Большинство систем программирования позволяют легко запустить отладку программы нажатием одной кнопки.