4

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

Я просто думал, что все эти программы разобраны один раз в бутстрапе, преобразованные в «строго типизированное» дерево выражений и т. Д. Не правда ли?

ответ

4

Я буду просто означать сейчас и сказать, что почти каждый язык программирования интерпретируется, является ли это программное обеспечение (Ruby, Python, Java) или аппаратный (C, C++) интерпретатор :)

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

+0

«они используют некоторое промежуточное представление (вы можете видеть его красиво, когда хотите писать C-расширения для него)» - считая, что он хранится в памяти, что могло бы выглядеть так? – Bubba88

+0

Для оригинальной реализации, написанной на C, это серия структур, называемая «VALUE». Вот немного проницательности: http://www.rubyinside.com/how-to-create-a-ruby-extension-in-c-in-under-5-minutes-100.html – LukeN

+0

«Пока не используется байт-код в оригинальная реализация (или они уже мигрировали?) «Официальный интерпретатор Ruby использует байт-код с версии 1.9. – sepp2k

4

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

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

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

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