Что значит для языка «интерпретировать»?
Вопрос
Любимые языки, например, Ruby (если работает МРТ, я имею в виду, что не скомпилирован для байта-кода), запускается на самом деле анализируясь каждый раз, когда требуется выполнение, например, метод или тело петли? Я имею в виду, чтобы выполнить петлю, вам нужно разобрать свое тело N. раз?
Я просто всегда думал, что все эти программы проанализируют один раз на загрузке, преобразованные в дереве «сильно набранные» выписки и т. Д. Это не правда?
Решение
Я просто буду иметься в виду сейчас и сказать, что только в каждом языке программирования интерпретируется, будь то программное обеспечение (Ruby, Python, Java) или аппаратный интерпретатор (C, C ++) :)
Для реального ответа, пока я не знаю о внутренней реализации Ruby, я уверен, что черт возьми, они не разбирают заявление снова и снова и снова и снова. Несмотря на то, что не используя Bytecode в оригинальной реализации (или они уже мигрируют?), Они используют некоторое промежуточное представление (вы можете видеть его хорошо, когда вы хотите написать C-расширения для него), таким образом, просто выполнял их снова и снова.
Другие советы
Интерпретация - это слово с очень свободным определением. Даже инструкции машинного кода интерпретируются процессором.
В общем, между языками проводится различие между языками, которые скомпилированы до того, как они будут запущены и языки, которые не имеют процесса компиляции и выполняются внутри другой программы, называемого интерпретатором. Последние виды языков часто называют интерпретируемые языки.
Линия не так ясна в некоторых случаях:
- Некоторые языки могут быть скомпилированы, либо интерпретированы, например, PHP.
- Некоторые интерпретируемые код могут быть скомпилированы во время выполнения в нативных инструкциях машины (JIT Compilation).
- Некоторые скомпилированные языки могут иметь
exec
ФУНКЦИОНАЛЬНОСТЬ, которая позволяет генерировать код и выполняться во время выполнения, в обход нормального процесса компиляции.