Інтерпретатор

Ця стаття включає опис терміна "Інтерпретація";.

Інтерпретатор - програма (різновид транслятора) або апаратний засіб, що виконує інтерпретацію. [1]

Інтерпретація - пооператорний (покомандний, порядковий) аналіз, обробка і тут же виконання вихідної програми або запиту (на відміну від компіляції, при якій програма транслюється без її виконання). [2] [3] [4]


1. Типи інтерпретаторів

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

Інтерпретатор компілюються типу - це система з компілятора, переводящего вихідний код програми в проміжне представлення, наприклад, в байт-код або p-код, і власне інтерпретатора, який виконує отриманий проміжний код (так звана віртуальна машина). Перевагою таких систем є більша швидкодія виконання програм (за рахунок виносу аналізу вихідного коду в окремий, разовий прохід, і мінімізації цього аналізу в інтерпретаторі). Недоліки - більша вимога до ресурсів та вимога на коректність вихідного коду. Застосовується в таких мовах, як Java, Tcl, Perl (використовується байт-код ), REXX (зберігається результат парсинга вихідного коду [5]), а також у різних СУБД (використовується p-код [Джерело не вказано 1309 днів] ).

У разі поділу інтерпретатора компілюються типу на компоненти виходять компілятор мови і простий інтерпретатор з мінімізованим аналізом вихідного коду. Причому вихідний код для такого інтерпретатора не обов'язково повинен мати текстовий формат або бути байт-кодом, який розуміє тільки даний інтерпретатор, це може бути машинний код якоїсь існуючої апаратної платформи. Приміром, віртуальні машини на зразок QEMU, Bochs, VMware включають в себе інтерпретатори машинного коду процесорів сімейства x86.

Деякі інтерпретатори (наприклад, для мов Лісп, Scheme, Python, Бейсік та інших) можуть працювати в режимі діалогу або так званого циклу читання-обчислення-друку ( англ. read-eval-print loop, REPL ). У такому режимі інтерпретатор зчитує закінчену конструкцію мови (наприклад, s-expression в мові Лісп), виконує її, друкує результати, після чого переходить до очікування введення користувачем наступної конструкції.

Унікальним є мова Forth, який здатний працювати як в режимі інтерпретації, так і компіляції вхідних даних, дозволяючи переключатися між цими режимами в довільний момент, як під час трансляції вихідного коду, так і під час роботи програм. [6]

Слід також зазначити, що режими інтерпретації можна знайти не тільки в програмному, але й апаратному забезпеченні. Так, багато мікропроцесори інтерпретують машинний код за допомогою вбудованих мікропрограм, а процесори сімейства x86, починаючи з Pentium (наприклад, на архітектурі Intel P6), під час виконання машинного коду попередньо транслюють його у внутрішній формат (в послідовність мікрооперацій).


2. Алгоритм роботи простого інтерпретатора

  1. прочитати інструкцію;
  2. проаналізувати інструкцію і визначити відповідні дії;
  3. виконати відповідні дії;
  4. якщо не досягнуто умова завершення програми, прочитати наступну інструкцію і перейти до пункту 2.

3. Переваги і недоліки інтерпретаторів

3.1. Переваги

  • Велика переносимість інтерпретованих програм - програма буде працювати на будь платформі, на якій є відповідний інтерпретатор.
  • Як правило, більш досконалі і наочні засоби діагностики помилок у вихідних кодах.
  • Спрощення налагодження вихідних кодів програм [Джерело не вказано 573 дні] .
  • Менші розміри коду в порівнянні з машинним кодом, отриманим після звичайних компіляторів.

3.2. Недоліки

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

Примітки

  1. ГОСТ 19781-83; СТ ІСО 2382/7-77 / / Обчислювальна техніка. Термінологія: Довідковий посібник. Випуск 1 / Рецензент канд. техн. наук Ю. П. Селіванов. - М .: Видавництво стандартів, 1989. - 168 с. - 55000 екз. - ISBN 5-7050-0155-X
  2. Першиков В.І., Савінков В. М. Тлумачний словник з інформатики / Рецензенти: канд. фіз.-мат. наук А. С. Марков і д-р фіз.-мат. наук І. В. Поттосін. - М .: Фінанси і статистика, 1991. - 543 с. - 50 000 прим. - ISBN 5-279-00367-0
  3. Борковський А. Б. Англо-російський словник з програмування та інформатики (з тлумаченнями). - М .: Російська мова, 1990. - 335 с. - 50050 (дод,) прим. - ISBN 5-200-01169-3
  4. Тлумачний словник по обчислювальним системам = Dictionary of Computing / Под ред. В. Іллінгуорта та ін: Пер. з англ. А. К. Белоцкого та ін; Під ред. Є. К. Масловського. - М .: Машинобудування, 1990. - 560 с. - 70 000 (дод,) прим. - ISBN 5-217-00617-X (СРСР), ISBN 0-19-853913-4 (Великобританія)
  5. Dave Martin. Why does my OS / 2 REXX program run more quickly the second time? - www.mindspring.com/ ~ dave_martin / faqs.html # FAQ2. Rexx FAQs. Читальний - www.webcitation.org/617hsloQD з першоджерела 22 серпня 2011.
  6. Jeff Fox. Chapter 2. More Interpretation - www.ultratechnology.com/forth2.htm # inter (Англ.) . Thoughtful Programming and Forth. UltraTechnology. Читальний - www.webcitation.org/617htHJQJ з першоджерела 22 серпня 2011.