Подтвердить что ты не робот

Почему python компилирует исходный код в байт-код перед интерпретацией?

Почему python компилирует исходный код в байт-код перед интерпретацией?

Почему бы не интерпретировать из источника напрямую?

4b9b3361

Ответ 1

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

Кроме того, Python сохраняет этот код, который имеет огромное преимущество в следующий раз, когда этот код будет выполнен: Python больше не нуждается в анализе кода; синтаксический анализ является самой медленной частью процесса компиляции. Таким образом, представление байт-кода значительно сокращает накладные расходы.

Ответ 2

Поскольку вы можете скомпилировать один раз и интерпретировать его много раз.

Итак, если вы используете script много раз, у вас есть только накладные расходы на разбор исходного кода.

Ответ 3

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

Ответ 4

Повторное лексирование и разбор исходного кода снова и снова, вместо того, чтобы делать это только один раз (чаще всего на первом import), очевидно, было бы глупой и бессмысленной тратой усилий.

Ответ 5

Несмотря на то, что для него есть небольшой аспект эффективности (вы можете хранить байт-код на диске или в памяти), его главным образом инженерным: он позволяет разделить синтаксический анализ от интерпретации. Парсеры часто могут быть неприятными существами, полными крайних случаев и должны соответствовать эзотерическим правилам, таким как использование только правильного количества взглядов и разрешение проблем с уменьшением сдвига. Напротив, интерпретация действительно проста: это просто большой оператор switch, использующий код операции байткода.

Ответ 6

Я очень сомневаюсь, что причиной является производительность, хотя это хороший побочный эффект. Я бы сказал, что естественно думать, что виртуальная машина, построенная на каком-то высокоуровневом ассемблере, была бы более практичной, чем поиск и замена текста в некоторой строке исходного кода.

Edit:

Хорошо, ясно, кто когда-либо поставил -1 голос на мой пост, не оставив разумного комментария для объяснения, очень мало знает о виртуальных машинах (среды выполнения).

http://channel9.msdn.com/shows/Going+Deep/Expert-to-Expert-Erik-Meijer-and-Lars-Bak-Inside-V8-A-Javascript-Virtual-Machine/