Содержание
Язык программирования высокого уровня — это способ записать программу словами и формулами, понятными человеку, а не кодами конкретного процессора. Процессор такой текст выполнить не может, поэтому между ними стоит программа-переводчик: компилятор или интерпретатор.
Чем неудобен машинный код
В предыдущих уроках мы писали программы для учебного процессора М-8 прямо его командами. Так можно, но у этого способа три больших недостатка.
Длинно. Чтобы умножить 4 на 3, понадобилось девять команд и четыре ячейки с данными. А мысль у человека была одна и короткая: «перемножить два числа».
Легко ошибиться. В байте 2D, команде ADD 13, достаточно изменить один бит, чтобы получилось 3D — SUB 13. Программа запустится, отработает и выдаст неверный ответ, ни о чём не предупредив. А если вставить в середину программы новую команду, все следующие сдвинутся на одну ячейку, и адреса в каждом JUMP и JZ придётся пересчитывать вручную.
Привязано к процессору. Программа для М-8 бесполезна для любого другого процессора. Понадобилось запустить её на другой машине — пишите заново.
Язык высокого уровня
Выход напрашивается сам: пусть человек пишет так, как ему удобно думать, а в команды это переведёт программа. Вот запись, понятная без объяснений:
c = a + b
Здесь a, b и c — переменные: имена, за которыми стоят ячейки памяти. Программист не выбирает адреса и не вспоминает коды операций. Язык, на котором можно писать так, называют языком высокого уровня: он далёк от устройства процессора и близок к человеку. Язык ассемблера, наоборот, низкого уровня: каждая его строка — одна команда процессора.
Посмотрим, во что эта строка превращается для М-8. Сначала переводчик раздаёт переменным ячейки: пусть a получит адрес 13, b — 14, c — 15. Затем он подбирает команды.
строка программы команды М-8 машинный код
c = a + b LOAD 13 1D
ADD 14 2E
STORE 15 4F
Одна строка — три команды. Так же переводятся и конструкции посложнее. «Если» и «пока» превращаются в сочетания JZ и JUMP из урока Переходы, условия и циклы, а запись c = a * b развернулась бы для М-8 в целый цикл со сложением.
Компилятор: перевод целиком и заранее
Компилятор — программа, которая читает весь исходный текст и переводит его в машинный код до запуска. Результат сохраняется в файл. Дальше этот файл запускают сколько угодно раз, и ни исходный текст, ни компилятор для этого уже не нужны.
Представьте, что Вам подарили настольную игру с правилами на английском. Можно один раз перевести правила целиком и распечатать. Потом Вы играете по распечатке — быстро и без словаря. Это компиляция.
У такого подхода два следствия. Готовая программа работает быстро: процессор сразу получает свои команды. Но машинный код привязан к процессору, поэтому для компьютера с процессором другого типа текст придётся скомпилировать заново — уже другим компилятором.
Так обычно работают с языком C++. Если захотите попробовать сами, на Marcus есть бесплатный учебник по C++.
Интерпретатор: исполнение по шагам
Интерпретатор не создаёт файла с машинным кодом. Он читает программу по частям и сразу выполняет прочитанное: взял строку, разобрал, исполнил, перешёл к следующей.
В примере с настольной игрой это друг, который знает английский. Он сидит рядом и перед каждым ходом читает нужное правило вслух по-русски. Распечатки ждать не надо, играть можно сразу. Зато без друга игра не пойдёт, и каждая партия тянется дольше.
Так обычно выполняют программы на Python. Плюсы и минусы здесь зеркальные: программу можно запустить сразу, и один и тот же текст работает на любом компьютере, где установлен интерпретатор. Но выполняется она медленнее, и интерпретатор нужен при каждом запуске.
| Что сравниваем | Компилятор | Интерпретатор |
|---|---|---|
| Когда переводит | заранее, всю программу | во время работы, по частям |
| Что нужно для запуска | файл с машинным кодом | исходный текст и интерпретатор |
| Скорость работы программы | выше | ниже |
| Пример языка | C++ | Python |
Путь программы
Соберём всё вместе. Вот что происходит с программой на компилируемом языке.
- Программист пишет исходный текст — обычный текстовый файл.
- Компилятор проверяет текст. Если в нём есть ошибки записи, он сообщает о них и ничего не переводит.
- Компилятор переводит текст в машинный код и сохраняет его в файл.
- При запуске машинный код загружается в память, а в счётчик команд записывается адрес первой команды.
- Процессор начинает свой обычный цикл: выборка, расшифровка, исполнение.
Настоящий компилятор делает свою работу в несколько этапов, но суть та же. На последнем шаге процессору всё равно, на каком языке была написана программа. Он видит только байты своих команд — такие же, как те, что мы составляли вручную.
Немного истории
Первые программисты писали в машинном коде, затем на ассемблере. В начале 1950-х годов команда Грейс Хоппер выпустила программу A-0, которую считают первым компилятором. Умела она ещё немногое.
Перелом наступил с языком Фортран. Его создала в 1954–1957 годах группа Джона Бэкуса в компании IBM. Название — сокращение от английского formula translator, «переводчик формул». Фортран называют первым языком высокого уровня, который получил практическое применение. На нём пишут и сейчас — главным образом научные и инженерные расчёты.
Частые вопросы
Процессор понимает Python или C++?
Нет. Процессор исполняет только свой машинный код. Программа на любом языке высокого уровня доходит до него уже в переводе.
Компилятор — тоже программа. А кто перевёл его?
Другой компилятор. Самые первые переводчики приходилось писать вручную, командами процессора. Потом с их помощью собирали следующие, более удобные.
Зачем знать про машинный код, если есть удобные языки?
Чтобы понимать, что стоит за строкой программы: почему число может переполниться, почему цикл иногда не заканчивается, почему приложение для телефона не запускается на ноутбуке.
Коротко
- Машинный код длинный, в нём легко ошибиться, и он привязан к одному типу процессора.
- В языке высокого уровня программист пишет формулы и слова, а адреса и коды команд подбирает программа-переводчик.
- Компилятор переводит всю программу в машинный код заранее; готовый файл работает быстро, но только на своём типе процессора.
- Интерпретатор читает программу и выполняет её по шагам; он нужен при каждом запуске.
- На каком бы языке ни писали программу, процессор в итоге выполняет свои команды в цикле выборки и исполнения.
Процессор и программа у нас теперь есть. Но один процессор — ещё не компьютер: ему нужны память, место для файлов, экран и клавиатура. Как всё это соединено — в уроке Из чего состоит компьютер.
Использованная литература
- Компилятор — Википедия [Электронный ресурс]. — URL: https://ru.wikipedia.org/wiki/Компилятор (дата обращения: 09.10.2026).
- Интерпретатор — Википедия [Электронный ресурс]. — URL: https://ru.wikipedia.org/wiki/Интерпретатор (дата обращения: 09.10.2026).
- Фортран — Википедия [Электронный ресурс]. — URL: https://ru.wikipedia.org/wiki/Фортран (дата обращения: 09.10.2026).
- Грейс Хоппер — Википедия [Электронный ресурс]. — URL: https://ru.wikipedia.org/wiki/Хоппер,_Грейс (дата обращения: 09.10.2026).