"Информатика", Семакин И.Г., Залогова Л.А., Русаков С.В., Шестакова Л.В.
Язык программирования позволяет записать команды и данные так, чтобы задать компьютеру нужный алгоритм. Человеку удобнее писать на языке высокого уровня, но процессор непосредственно исполняет только команды машинного языка, зависящие от типа компьютера. Поэтому между исходным текстом программы и её выполнением нужен транслятор. Он переводит программу целиком — так работает компилятор — или последовательно обрабатывает команды, как интерпретатор.
Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.
Язык программирования — формальный язык, с помощью которого записывают команды и данные для компьютера. Он включает правила составления записей и их смысл: программа должна быть не только правильно написана, но и задавать определённые действия. Такой язык нужен, чтобы описывать алгоритмы в форме, понятной человеку и пригодной для обработки компьютером.
Машинный язык — система команд, которые процессор может выполнять непосредственно. Каждая модель процессора поддерживает определённый набор команд, поэтому программа на машинном языке зависит от типа компьютера. Это объясняет, почему один и тот же машинный код нельзя безоговорочно запускать на любом устройстве.
Транслятор — программа, преобразующая программу с одного языка программирования на другой. На вход транслятор получает исходный текст, а результатом становится его перевод или выполнение команд в процессе перевода. Трансляция нужна, чтобы компьютер мог работать с программой, записанной не на машинном языке.
Компилятор — транслятор, который переводит программу целиком; интерпретатор — транслятор, который обрабатывает команды последовательно, переводя и выполняя их. При компиляции сначала получают результат перевода, а при интерпретации обработка связана с выполнением программы. Различие важно учитывать, когда запускают программу и выясняют, где возникла ошибка.
Процессор выполняет команды машинного языка, потому что именно для них в нём предусмотрены соответствующие операции. Текст программы на другом языке состоит из записей, которые процессор не может напрямую распознать как такие команды. Поэтому между исходной программой и работой процессора нужен этап преобразования: его выполняет транслятор.
В языках высокого уровня команды записывают с помощью конструкций, которые ближе к привычным человеку словам и правилам. За счёт этого программисту легче выразить замысел алгоритма, прочитать программу и исправить её, чем при работе с машинными командами. Однако удобная для человека запись не становится от этого понятной процессору: высокий уровень описывает действия абстрактнее, чем конкретный набор команд устройства.
Исходный текст программы — это запись, подготовленная программистом, а не готовый машинный код. Чтобы программа могла выполняться, транслятор должен преобразовать этот текст в машинные команды либо интерпретировать команды в ходе выполнения. В первом случае появляется результат перевода, во втором обработка и выполнение идут последовательно, поэтому нельзя смешивать исходную программу с тем, что получает компьютер.
Компилятор анализирует и переводит программу целиком до её запуска. Если при переводе обнаруживается ошибка, она становится известна на этом этапе, и запуск полученного результата обычно откладывают до исправления программы. Когда перевод завершён, его результат можно запускать отдельно: компилятору не нужно заново переводить текст при каждом выполнении этой готовой программы.
Интерпретатор обрабатывает команды по очереди: переводит очередную команду и выполняет её, затем переходит к следующей. Если встречается ошибка, выполнение может остановиться именно на этой команде, а действия, выполненные раньше, уже могли произойти. Поэтому при интерпретации ход программы виден последовательно, а проверка и выполнение теснее связаны, чем при компиляции.
| Признак | Компилятор | Интерпретатор |
|---|---|---|
| Как обрабатывается программа | Переводит программу целиком до выполнения | Обрабатывает команды по очереди |
| Что получается в результате перевода | Переведённая программа, которую можно запускать отдельно | Отдельный результат перевода всей программы обычно не создаётся |
| Когда обнаруживаются ошибки перевода | На этапе перевода, до запуска результата | При обработке соответствующей команды во время выполнения |
| Как происходит выполнение программы | После завершения компиляции запускают полученный результат | Команда переводится и выполняется, затем обрабатывается следующая |
Сравнивая способы, сначала выясните, переводится ли программа целиком или обрабатывается по командам. Затем посмотрите, что именно получается после перевода и когда может проявиться ошибка. Эти признаки помогают определить способ трансляции даже без знания названия инструмента.
Задача 1. Программа записана на языке высокого уровня. Укажите, почему процессор не может сразу выполнить её текст и что требуется сделать.
Ответ: процессор не выполняет текст высокого уровня напрямую, потому что его команды представлены в другом формате. Программу нужно транслировать или выполнять с помощью интерпретатора.
Задача 2. Для каждой ситуации определите способ: программа целиком переводится перед запуском или команды переводятся и выполняются по очереди.
Ответ: перевод целиком перед запуском — компиляция; последовательный перевод и выполнение команд — интерпретация. Для определения способа не нужно угадывать по названию языка: достаточно установить порядок обработки программы.
Задача 3. При компиляции программы обнаружена ошибка, а при интерпретации выполнение остановилось на определённой команде. Объясните, на каком этапе выявлена ошибка в каждом случае и почему.
Ответ: при компиляции ошибка выявлена до выполнения полученной программы, во время перевода целого текста. При интерпретации она обнаружена во время выполнения на той команде, которую интерпретатор не смог корректно обработать.
Ошибка: считать, что язык высокого уровня процессор выполняет напрямую. Так думают, потому что запись программы похожа на понятные человеку команды, но это не делает её машинным кодом. Проверьте себя вопросом: какие команды процессор исполняет непосредственно? Если ответ — машинные, текст высокого уровня нужно транслировать или интерпретировать.
Ошибка: называть транслятором только компилятор. Обычно слово связывают с переводом всей программы заранее, забывая о последовательной обработке команд. Чтобы проверить себя, вспомните: интерпретатор тоже преобразует команды для выполнения, значит, он также относится к трансляторам.
Ошибка: путать исходную программу с результатом компиляции. Исходный текст написан программистом, а результат перевода предназначен для выполнения компьютером; сходство в том, что оба представляют программу, может сбить с толку. Проверьте, что именно создано: запись на языке высокого уровня или полученный при компиляции машинный код.
Ошибка: считать, что компилятор и интерпретатор отличаются только названием. Путаница возникает, если помнить лишь общую цель — помочь выполнить программу — и не учитывать порядок действий. Спросите себя, переводится ли весь текст до запуска или команды обрабатываются по очереди: это сразу показывает нужный способ.
Чтобы понять необходимость трансляции, нужно знать, что компьютер выполняет команды и хранит данные в двоичной форме. Двоичное представление лежит в основе работы с информацией внутри компьютера, а машинные команды рассчитаны на процессор. Поэтому запись, удобную человеку, необходимо связать с командами, которые устройство может выполнить.
Тема языков программирования связана с алгоритмами: алгоритм задаёт последовательность действий, а программа записывает её на языке, пригодном для компьютера. Транслятор помогает перейти от этой записи к выполнению алгоритма. Так понятия алгоритма, программы и трансляции образуют последовательные этапы решения задачи.
Понимание компиляции и интерпретации пригодится при работе со средами программирования, запуске программ и поиске ошибок. По способу обработки можно предположить, когда появится сообщение об ошибке и успеет ли выполниться часть команд. Это помогает осмысленно проверять программу, а не просто повторять попытки запуска.
Почему компьютер не может выполнить программу, написанную на языке высокого уровня?
Процессор непосредственно выполняет команды машинного языка, а текст на языке высокого уровня записан по другим правилам. Его нужно преобразовать в машинные команды или обрабатывать с помощью интерпретатора.
Чем язык программирования отличается от машинного языка?
Язык программирования задаёт правила для записи команд и данных, в том числе в удобной человеку форме. Машинный язык содержит команды, которые процессор данного типа может выполнять непосредственно.
Что именно делает транслятор?
Транслятор принимает исходную программу на одном языке и преобразует её для выполнения или дальнейшей обработки. Компилятор переводит программу целиком, а интерпретатор последовательно переводит и выполняет команды.
В чём главное отличие компилятора от интерпретатора?
Компилятор заранее переводит всю программу, а интерпретатор обрабатывает её команды по очереди во время выполнения. Поэтому у компилятора результат перевода получают до запуска программы, а при интерпретации выполнение связано с последовательной обработкой команд.
Когда при компиляции и интерпретации обнаруживаются ошибки программы?
Ошибки, которые компилятор выявляет при переводе, обычно обнаруживаются до запуска полученной программы. Интерпретатор может остановиться на ошибочной команде в ходе выполнения, поэтому до неё программа способна успеть выполнить предыдущие команды.
2.3. О языках программирования и трансляторах