Прилежные переводчики программВ принципе компьютер может обрабатывать команды и данные только тогда, когда они представлены в машинном коде, т. е. выражены на языке нулей и единиц, непосредственно связанном с электронной «начинкой» компьютера.
Однако писать программы в машинном коде - занятие крайне утомительное. Дело несколько упрощается, если воспользоваться языком ассемблера (языком низкого уровня), который разрешает вместо двоичных единиц и нулей использовать мнемонические коды (например, STA - для обозначения команды записи какой-то величины в регистр машины). Перевод ассемблерной программы в машинный код осуществляется с помощью другой программы, называемой ассемблером.
Язык ассемблера, как и машинный код, учитывает специфику конкретного типа компьютера, и поэтому оба этих языка позволяют программисту максимально эффективно использовать аппаратные особенности машины.
Тем не менее большинство программистов предпочитают пользоваться языками высокого уровня, поскольку они гораздо ближе к естественному, человеческому, языку. В то же время компьютер не может обрабатывать какие бы то ни было команды до тех пор, пока они не переведены в нули и единицы.
Этот перевод можно сделать с помощью транслятора (компилятора - или интерпретатора).
Транслятор - это специальная программа, которая одновременно рассчитана и на конкретный язык, и на конкретный тип компьютера. Обычно трансляторы загружаются во временную память с внешних запоминающих устройств.
Интерпретаторы в некоторых системах хранятся в постоянной памяти. С точки зрения выполнения работы компилятор и интерпретатор существенно различаются.
Компилятор читает всю программу целиком, делает ее перевод и создает законченный вариант программы на машинном языке, который затем загружается в компьютер и выполняется. Интерпретатор переводит и выполняет программу строка за строкой. После того как программа откомпилирована, ни сама исходная программа, ни компилятор более не нужны. В то же время программа, записанная на интерпретируемом языке, должна интерпретироваться при каждом прогоне. Поэтому откомпилированные программы работают быстрее, но интерпретируемые проще исправлять и модифицировать.
Каждый конкретны язык ориентирован либо на компиляцию, либо на интерпретацию - в зависимости от того, для каких целей он создавался. Например, FORTRAN был задуман как язык для разработки больших программ, предназначенных для решения естественнонаучных и математических задач, в которых особенно важна скорость выполнения программ. Поэтому данный язык обычно реализуется с помощью компилятора. С другой стороны, BASIC создавался как язык для начинающих программистов, для которых построчное выполнение программы имеет неоценимые преимущества. Иногда для одного языка имеется и компилятор, и интерпретатор. В этом случае для разработки и тестирования программы можно воспользоваться интерпретатором, а затем откомпилировать отлаженную программу, чтобы повысить скорость ее выполнения.