Трансляція та виконання: компілятор, інтерпретатор, компонувальник

Розділ: Основи мов програмування

📌 Про що ця тема


Тут перевіряють, як текст програми (вихідний код) перетворюється на код, який виконує компʼютер. Ключові поняття: трансляція, компілятор, інтерпретатор, компонувальник (лінкер). Треба розуміти різницю між підходами та послідовність етапів створення виконуваної програми.


📖 Головне


• Вихідний код — це текст програми мовою високого рівня (Python, C++, Pascal), зрозумілий людині, але не процесору.


• Машинний код — послідовність двійкових команд, які безпосередньо виконує процесор.


• Трансляція — це процес перекладу програми з однієї мови на іншу, зазвичай з мови високого рівня у машинний код. Програма, що це робить, — транслятор.


• Два основні типи трансляторів: компілятор та інтерпретатор.


• Компілятор перекладає ВЕСЬ вихідний код одразу у окремий виконуваний файл (напр., .exe). Після компіляції програма запускається без компілятора.


• Інтерпретатор перекладає й одразу виконує програму команда за командою, під час кожного запуску. Окремий виконуваний файл не створюється.


• Компілятор: швидше виконання готової програми, але довше підготовка; помилки виявляються на етапі компіляції (до запуску).


• Інтерпретатор: повільніше виконання, зате зручніше тестувати й виправляти; помилки виявляються під час виконання, доходячи до проблемного рядка.


• Компонувальник (лінкер, linker) — програма, що зʼєднує кілька відкомпільованих частин (обʼєктних файлів) та бібліотек в один виконуваний файл.


• Типова послідовність компіляції: вихідний код → компілятор → обʼєктний код → компонувальник → виконуваний файл.


• Багато сучасних мов поєднують підходи: код компілюється у проміжний (байт-)код, який потім виконує спеціальне середовище.


🔢 Як це працює на прикладі


Приклад 1 (компілятор, C++): пишемо program.cpp → компілятор перевіряє синтаксис і створює обʼєктний файл program.obj → компонувальник додає потрібні бібліотеки → отримуємо program.exe. Файл можна передати іншому і запустити без установки компілятора.


Приклад 2 (інтерпретатор, Python): запускаємо script.py → інтерпретатор читає перший рядок, виконує, потім наступний і т.д. Якщо помилка в 10-му рядку — перші 9 вже виконаються, і лише тоді програма зупиниться. Для запуску в іншого користувача потрібен встановлений інтерпретатор Python.


⚠️ Типові помилки


• Плутають компілятор та інтерпретатор: компілятор перекладає все одразу й створює файл, інтерпретатор — по рядку під час виконання.


• Вважають, що компонувальник перекладає код у машинний — ні, він лише ЗʼЄДНУЄ вже готові обʼєктні файли й бібліотеки.


• Думають, що відкомпільованій програмі потрібен компілятор для запуску — не потрібен; а ось інтерпретованій інтерпретатор потрібен завжди.


• Плутають напрям трансляції: з мови високого рівня у машинний код, а не навпаки.


• Вважають, що інтерпретатор швидший — навпаки, виконання повільніше через переклад у реальному часі.


🎯 Що завчити напамʼять


• Компілятор = весь код одразу → виконуваний файл, запуск без транслятора.

• Інтерпретатор = по рядку під час виконання, транслятор потрібен щоразу.

• Компонувальник (лінкер) зʼєднує обʼєктні файли та бібліотеки.

• Послідовність: вихідний код → компілятор → обʼєктний код → лінкер → .exe.


🧠 Перевір себе


1. Який транслятор створює окремий виконуваний файл?

2. Що робить компонувальник?

3. У якому випадку для запуску програми потрібен встановлений транслятор?

4. На якому етапі виявляються помилки при компіляції — до чи під час запуску?


Відповіді: 1 — компілятор; 2 — зʼєднує обʼєктні файли та бібліотеки в один виконуваний файл; 3 — коли програма інтерпретована (потрібен інтерпретатор); 4 — до запуску, на етапі компіляції.

Перевірити себе на практиці

Прочитати — половина справи. Далі потрібні завдання цієї ж теми з розбором кожної відповіді: саме на них видно, чи справді тема закрита.