Компілятори та інтерпретатори програм

Текст програми, що описує алгоритм, створюється за допомогою мови програмування. Але щоб програма була виконана, треба або весь її текст перевести в машинний код – це роблять спеціальні програми – компілятори, а потім передати на виконання процесору, або відразу виконувати команди мови, перекладаючи машинною мовою і виконуючи кожну команду по черзі – цим займаються інші програми - інтерпретатори.

Інтерпретатори беруть оператор із тексту програми, аналізують його структуру і відразу виконують. Компілятори повністю обробляють весь текст програми

Інтерпретатори функціонують наступним чином: беруть черговий оператор мови з тексту програми, аналізують її структуру і потім виконують. Після успішного виконання поточної команди всі інтерпретатори переходять до аналізу та виконання наступної команди. Якщо один і той самий оператор у програмі виконується кілька разів, інтерпретатори щоразу сприймають його так, ніби зустріли його вперше. Тому програми, в яких потрібно зробити великий обсяг обчислень, що повторюються, будуть працювати повільно. Для виконання програми на іншому комп'ютері також необхідно встановити інтерпретатор, оскільки без нього програма є набором слів і працювати не може.

Компілятори повністю опрацьовують весь текст програми. Вони здійснюють пошук синтаксичних помилок, виконують семантичний аналіз і лише потім, якщо текст точно відповідає правилам мови, його автоматично перекладають (транслюють) машинною мовою – в об'єктний код. Нерідко виконується оптимізація з допомогою набору методів, які дозволяють підвищити швидкодію програми. Згенерований об'єктний код обробляється спеціальною програмою - збирачем або редактором зв'язків, який здійснює зв'язування об'єктного і машинного кодів. Текст перетворюється на готовий до виконання ЕХЕ-файл. Його можна перенести на інші комп'ютери з процесором, який підтримує відповідний машинний код.

Компілятори мають великий недолік - трудомісткість трансляції мов програмування, орієнтованих на обробку даних складної структури, яка заздалегідь невідома або динамічно змінюється під час роботи програми. Для таких програм в машинний код вводяться додаткові перевірки та аналіз наявності ресурсів операційної системи, засоби динамічного захоплення та звільнення пам'яті комп'ютера, що на рівні статично заданих машинних інструкцій здійснити досить складно, а деяких завдань практично неможливо.

Інтерпретатори, навпаки, для дослідження вмісту пам'яті можуть у будь-який момент перервати роботу програми, організувати діалог з користувачем, виконати будь-які складні перетворення даних і при цьому постійно контролювати програмно-апаратне середовище, що забезпечує високу надійність роботи програми. Інтерпретатори при виконанні кожної команди перевіряють та аналізують необхідні ресурси операційної системи, при виникаючих проблемах видають повідомлення про помилки.

У реальних системах програмування змішані технології компіляції та інтерпретації. У процесі налагодження програму можна виконувати кроками (трасувати), а результуючий код не обов'язково буде машинним, він може бути, наприклад, апаратно-незалежним проміжним кодом абстрактного процесора, який надалі транслюватиметься в різних комп'ютерних архітектурах за допомогою інтерпретаторів або компіляторів у відповідний машинний код.

Інструменти