C помощью языка программирования создается не готовая программа, а только ее текст (исходный код), описывающий ранее разработанный алгоритм. Чтобы получить работающую программу, этот текст надо либо автоматически перевести в машинный код (программы-компиляторы) – получаются ехе-файлы; либо сразу выполнять команды языка, указанные в тексте программы (программы-интерпретаторы).
Интерпретатор берет очередной оператор из текста программы, анализирует его структуру и затем сразу исполняет (оператор транслируется в промежуточное представление или машинный код для более эффективного исполнения). Только после того как текущий оператор успешно выполнен, интерпретатор перейдет к следующему. Если оператор встречается в программе несколько раз, то интерпретатор каждый раз "видит" его впервые. Поэтому программы с большим числом вычислений будут выполняться медленно. Для выполнения такой программы на другом компьютере там также должен быть установлен интерпретатор – без него текст программы является просто набором символов.
Компиляторы полностью обрабатывают весь текст программы. Они просматривают его в поисках синтаксических ошибок (иногда несколько раз), выполняют определенный смысловой анализ и затем автоматически переводят (транслируют) на машинный язык – генерируют машинный код. Нередко при этом производится оптимизация с помощью набора методов, позволяющих повысить быстродействие программы (с помощью инструкций, ориентированных на конкретный процессор, путем исключения ненужных команд, промежуточных вычислений и т.д.). В результате законченная программа получается компактной и эффективной, работает в сотни раз быстрее программы, выполняемой с помощью интерпретатора), и может быть перенесена на другие компьютеры с процессором, поддерживающим соответствующий машинный код.
В реальных системах программирования имеют место и компиляции и интерпретации. В процессе отладки программа может выполняться по шагам, а затем компилироваться.