ФЭНДОМ


Трансля́торпрограмма, которая принимает на вход программу на одном языке (он в этом случае называется исходный язык, а программа — исходный код), и преобразует её в программу, написанную на другом языке (соответственно, целевой язык и объектный код).

В качестве целевого языка наиболее часто выступают машинный код, Ассемблер и байт-код, так как они наиболее удобны (с точки зрения производительности) для последующего исполнения.

Наиболее часто встречаются две разновидности трансляторов:

  • Компиляторы — выдают результат в виде исполняемого файла (в данном случае считаем, что компоновка входит в компиляцию). Этот файл:
    • транслируется один раз — может быть запущен самостоятельно
    • не требует для работы наличия на машине создавшего его транслятора
  • Интерпретаторы — исполняют программу после разбора (в этом случае в роли объектного кода выступает внутреннее представление программы интерпретатором). Исполняется она построчно. В данном случае программа
    • транслируется(интерпретируется) при каждом запуске (если объектный код кешируется, возможны варианты)
    • требует для исполнения наличия на машине интерпретатора и исходного кода

Помимо «чисто» трансляторов и интерпретаторов, существует множество промежуточных вариантов. Так, большинство современных интерпретаторов перед исполнением переводят программу в байт-код (так как его построчно выполнять гораздо проще, а значит, быстрее) или даже прямо в машинный код (в последнем варианте от интерпретатора остался только автоматический запуск, поэтому такой «интерпретатор» называется JIT-компилятором).

Важное примечание: продукты, использующие промежуточные варианты между парадигмами транслятора и компилятора выделились сравнительно недавно — когда машины стали достаточно мощными, чтобы компилить «на лету». До этого времени трансляция была сложной и времязатратной задачей, и выполнялась только отдельно (и даже на других машинах). В связи с этим, в старой литературе термины «транслятор» и «интерпретатор» противопоставляются друг другу как диаметрально противоположные подходы! Также, раньше компиляторы назывались «трансляторами», поскольку компоновка как отдельная стадия выделилась позже, а трансляторы не в машинный код были мало распространены.

См. также