Обробка програми машиною
Щоб виконати складну інструкцію, комп’ютер насамперед повинен знизити її абстрактність і перекласти на зрозумілу для себе мову. Спосіб, яким це робиться, називається моделлю виконання. Виділяють дві основні моделі і одну гібридну:
- Компіляція – одноразовий переклад всієї програми в машинний код.
- Інтерпретація – послідовне виконання кожного виразу.
- Транскомпиляция – переклад на мову більш низького рівня, наприклад C або асемблер, і його подальша компіляція.
Для перекладу необхідна спеціальна програма-транслятор – компілятор або інтерпретатор, без якої робота з мовою неможлива.
Інтерпретатор працює з кожним рядком програми окремо, аналізуючи її і відразу ж виконуючи. Його присутність необхідно від початку і до самого кінця роботи програми.
Основні недоліки інтерпретаційної моделі:
- постійне знаходження транслятора в пам’яті ЕОМ;
- повторна обробка повторюваних команд.
Незважаючи на це, інтерпретовані мови дуже зручні для циклічної розробки та налагодження, так як дозволяють швидко вносити зміни в програму.
Компілятор ж працює тільки один раз, відразу перетворюючи всю інструкцію в зрозумілу для комп’ютера вид – машинний код або якийсь проміжний байт-код, а потім залишає пам’ять ЕОМ. Тут виконання відокремлене від процесу трансляції, що є більш ефективною моделлю.
Основні недоліки компиляционной моделі:
- велика складність.
Перш ніж перевести програму на зрозумілий машині мову, транслятор багато разів проходить по вихідній інструкції, аналізуючи і перевіряючи її.
Чіткого розмежування систем не існує, так як традиційно інтерпретовані мови можуть бути скомпільовані і навпаки.
Класифікація мов програмування високого рівня по моделі виконання:
- Інтерпретовані – Python, Haskell, PHP, JavaScript.
- Компилируемые відразу в машинний код: C, C++, Fortran, ASM.
- Компилируемые в байт-код: Python, Java.
- Транскомпилируемые: Haskell, Fortran, C, C++.