Почему компиляция Python источник к байт-коду перед интерпретацией?

попробуй это ...

[tableView setEditing: YES animated: YES];
12
задан 20 May 2009 в 14:04
поделиться

6 ответов

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

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

33
ответ дан 2 December 2019 в 03:02
поделиться

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

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

8
ответ дан 2 December 2019 в 03:02
поделиться

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

7
ответ дан 2 December 2019 в 03:02
поделиться

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

6
ответ дан 2 December 2019 в 03:02
поделиться

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

2
ответ дан 2 December 2019 в 03:02
поделиться

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).

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

-1
ответ дан 2 December 2019 в 03:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: