Практически ни один интерпретатор не интерпретирует код напрямую , строка за строкой - это просто слишком неэффективно. Почти все интерпретаторы используют какое-то промежуточное представление, которое может быть легко выполнено. Кроме того, для этого промежуточного кода можно выполнить небольшую оптимизацию.
Python, кроме того, хранит этот код, что имеет огромное преимущество для следующего выполнения этого кода: Python больше не нужно анализировать код; синтаксический анализ - самая медленная часть процесса компиляции. Таким образом, представление байт-кода значительно снижает накладные расходы на выполнение.
Потому что вы можете скомпилировать в .pyc
один раз и интерпретировать из него много раз.
Итак, если вы запускаете скрипт много раз, у вас есть только накладные расходы однократного анализа исходного кода.
Потому что интерпретация напрямую из байт-кода выполняется быстрее. Во-первых, он позволяет избежать лексирования.
Повторное лексирование и синтаксический анализ исходного кода снова и снова вместо того, чтобы делать это только один раз (чаще всего при первом импорте
), очевидно, было бы глупо и бессмысленно. напрасная трата усилий.
Хотя там - это небольшой аспект эффективности (вы можете хранить байт-код на диске или в памяти), в основном это инженерный: он позволяет вам отделить синтаксический анализ от интерпретации. Синтаксические анализаторы часто могут быть неприятными созданиями, полными крайних случаев и вынужденными подчиняться эзотерическим правилам, таким как использование только правильного количества предвидения и решение проблем с уменьшением сдвига. Напротив, интерпретация действительно проста: это просто большой оператор switch, использующий код операции байт-кода.
I doubt very much that the reason is performance, albeit be it a nice side effect. I would say that it's only natural to think a VM built around some high-level assembly language would be more practical than to find and replace text in some source code string.
Edit:
Okay, clearly, who ever put a -1 vote on my post without leaving a reasonable comment to explain knows very little about virtual machines (run-time environments).