Для такого коду A = A + B, який може скласти одну або дві інструкції на машині, кожна з яких виконує певну кількість циклів. Жоден перекладач не може зробити те ж саме в такій кількості циклів з простої причини.
Інтерпретатор також виконує власний набір інструкцій (називайте їх байтовими кодами, p-кодами, проміжною мовою тощо). Кожен раз, коли він бачить байт-код типу ADD, він повинен якось шукати його і розгалужуватися на код, який робить додавання.
Наступний раз він бачить, він повинен повторити , що пошук, якщо він не має способу запам'ятати попередній пошук. Якщо у нього є спосіб запам'ятати попередній пошук, це вже не те, що ми називаємо "інтерпретатором", а скоріше заздалегідь створений компілятор або JITter.
З іншого боку...
Для коду, наприклад callSomeFunction( ... some args ...), скільки циклів витрачено між введенням цього коду та його залишенням? Все залежить від того, що відбувається всередині callSomeFunction. Це може бути декілька, і це можуть бути трильйони, навіть якщо callSomeFunctionвона сама складена. Якщо це багато, немає сенсу обговорювати вартість інтерпретації цього рядка коду - гроші є в іншому місці.
Пам'ятайте, що інтерпретовані мови мають власне значення, наприклад, їх складати не потрібно. ("Компіляція" поверхневого синтаксису до байтових кодів займає тривіальний час. Наприклад, візьміть R або MATLAB.)
Також є гнучкість, необхідна для інтелектуальних рівнів програмування. У « Товаристві розуму Мінського» , розділ 6.4 B -Мережі, є програми A, які мають справу зі світом, і є B-програми, які займаються програмами A, і можуть бути подальші рівні. Програми, які записують та керують іншими програмами, можна простіше робити в інтерпретаційних системах.
У Lisp ви можете написати, (+ A B)щоб додати A і B, але як тільки це буде написано, у вас є лише вибір, запустити його чи ні. Ви також можете написати, (eval (list '+ 'A 'B))що будує програму, а потім виконати її. Це може побудувати щось інше.
Тема програми - інша програма . Це простіше писати інтерпретованою мовою (хоча, як зазначає Йорг, новіші версії Lisp, хоча вони є eval, складаються на ходу, тому вони не мають покарання швидкості інтерпретації).