Что означает «переводить» язык? - PullRequest
4 голосов
/ 13 мая 2010

Есть ли такие языки, как, например, Ruby (если выполняется MRI, я имею в виду не скомпилированный в байт-код), запускается ли фактически анализируемый каждый раз, когда требуется выполнение, например, метода или тела цикла? Я имею в виду, чтобы выполнить цикл, вам нужно проанализировать его тело N раз?

Я просто всегда думал, что все эти программы анализируются один раз при загрузке, преобразуются в «строго типизированное» дерево операторов и т. Д. Разве это не правда?

Ответы [ 2 ]

4 голосов
/ 13 мая 2010

Сейчас я буду иметь в виду и скажу, что интерпретируется практически КАЖДЫЙ язык программирования, будь то программный (Ruby, Python, Java) или аппаратный (C, C ++):)

Для реального ответа, хотя я не знаю о внутренней реализации Ruby, я уверен, что они, черт возьми, не разбирают оператор снова и снова и снова. Не используя байт-код в исходной реализации (или они уже мигрировали?), Они используют какое-то промежуточное представление (это хорошо видно, когда вы хотите написать для него C-расширения), просто выполняя их снова и снова. 1003 *

4 голосов
/ 13 мая 2010

Толкование - это слово с очень свободным определением. Даже инструкции машинного кода интерпретируются процессором.

Как правило, проводится различие между языками, которые компилируются до их запуска, и языками, которые не имеют процесса компиляции и запускаются внутри другой программы, называемой интерпретатором. Последние типы языков часто называют интерпретируемыми языками .

В некоторых случаях линия не очень четкая:

  • Некоторые языки могут быть скомпилированы или интерпретированы, например, PHP.
  • Некоторый интерпретируемый код может быть скомпилирован во время выполнения в собственные машинные инструкции ( JIT-компиляция ).
  • Некоторые скомпилированные языки могут иметь функциональность exec, которая позволяет генерировать и выполнять код во время выполнения, минуя обычный процесс компиляции.
...