Чим відрізняються інтерпретовані та перекладені комп'ютерні мови?


Відповідь 1:

Хоча терміни "Складений / Перекладений та Інтерпретоване" означають, що мова - це та чи інша, на практиці існує спектр між "Компільованим" та "Інтерпретованим", і кожна мова десь знаходиться на ній. Деякі мови більше на Інтерпретованій стороні, деякі - на Зведеному.

«Чистий» інтерпретатор зберігає вихідний файл програми (як текст Ascii або Unicode). Виконуючи виконання, він читає рядок за часом, а потім робить все, що говорить рядок. Дуже так, як це зробив би людина. На практиці мало (якщо є) чистих перекладачів; замість цього звичайна заміна мовних ключових слів спеціальними лексемами, щоб зменшити обсяг пам’яті та трохи прискорити виконання. Наступним кроком є ​​заміна збереженого тексту програми представленням зворотною польською мовою. Це економить більше місця та ще швидше виконати, але зараз ми відстаємо від чистого перекладача.

На іншому кінці спектру компільована мова перетворює програму в мову асемблера або машинний код. Зазвичай відбувається наступний етап, який називається зв'язуванням, де додаються модулі бібліотеки і отриманий машинний код зберігається у файлі. Після виконання файл завантажується в пам'ять і комп'ютер виконує його безпосередньо.

Деякі компілятори можуть перетворити програму в якесь внутрішнє представлення, наприклад, зворотну полірування, а потім перевести RP в машинний код. Це додає певного "аромату" інтерпретації, навіть якщо це компілятор.

Десь із середини у вас є система UCSD Pascal з 1980-х. Це компілятор Паскаля, який виробляє код (P-код) для якоїсь гіпотетичної машини. Коли програма виконується, вона фактично інтерпретується аналогічно тому, що я згадував раніше. Це має велику перевагу в тому, що він є дуже портативним, тому ви можете писати програми, які виконуються на декількох різних комп’ютерах. Майкрософт робить те ж саме для багатьох своїх мов з тієї ж причини: мобільність.

І звичайно Java добре відома своїм компілятором, який виробляє внутрішній код, який називається байт-кодом. У ранніх версіях Java байт-код був інтерпретований, але тепер він компілюється в машинний код "на льоту".

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