#bytecode #interpreter #jit #microprocessors #interpreted-language
#байт-код #интерпретатор #jit #микропроцессоры #интерпретируемый язык
Вопрос:
Я пытаюсь понять, как интерпретируемый код выполняется процессором.
Я понимаю, что в скомпилированном языковом коде код преобразуется в двоичный файл, который нацелен на процессор, когда этот двоичный файл выполняется, он загружается в память, где счетчик программ процессора (ПК) указывает на следующие инструкции, которые затем загружаются и выполняются процессором. Но как это происходит в случае интерпретируемого языка? Я читаю много постов в блоге, и ПОЭТОМУ на все вопросы у каждого есть разные ответы.
Некоторые говорят, что интерпретатор преобразует байт-код «на лету» в машинный код, некоторые говорят, что процессор выполняет интерпретатор, который знает, как выполнить байт-код. Но в конце, когда каждая инструкция должна выполняться процессором, тогда как процессор получает инструкции для выполнения.
Если это правда, что интерпретатор преобразует байт-код «на лету», то как счетчик программ узнает, какими будут следующие инструкции, могут ли инструкции динамически загружаться в память для выполнения ЦП, или вся программа должна быть загружена заранее, прежде чем ЦП начнет выполнение
Комментарии:
1. Чистый интерпретируемый (не jitted) код вообще не выполняется процессором напрямую. Вместо этого его инструкции (будь то операторы языка или некоторый промежуточный код) анализируются и интерпретируются другой программой. Эта другая программа может быть взята из кода, скомпилированного для запуска непосредственно на процессоре. Таким образом, выполнение происходит примерно так: скрипт -> интерпретатор -> Процессор . Но есть много других вариантов, таких как JIT, в которых программа преобразует промежуточный (небольшую часть или весь) код в инструкции процессора, которые будут выполняться непосредственно процессором.