Python интерпретируется или компилируется?

Python интерпретируется или компилируется?
Python интерпретируется или компилируется? - ffstop @ Unsplash

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

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

Теперь переходим к Python:

  • Код Python (somefile.py) при импорте создает файл (somefile.pyc) в том же каталоге. Допустим, импорт выполняется в оболочке python или модуле django. После импорта я немного меняю код и снова запускаю импортированные функции, чтобы обнаружить, что он все еще работает со старым кодом. Это говорит о том, что файлы *.pyc представляют собой скомпилированные файлы python, похожие на исполняемый файл, созданный после компиляции файла C, хотя я не могу выполнить файл *.pyc напрямую.
  • Когда файл python (somefile.py) выполняется напрямую ( ./somefile.py или python somefile.py ), файл .pyc не создается, а код выполняется, что указывает на интерпретируемое поведение.

Это предполагает, что код Python компилируется каждый раз, когда он импортируется в новый процесс для создания .pyc, в то время как он интерпретируется при непосредственном выполнении.

Итак, каким типом языка я должен считать его? Интерпретируется или компилируется? И как его эффективность сравнивается с интерпретируемыми и компилируемыми языками?

Согласно вики-странице Интерпретируемые языки, он указан как язык, скомпилированный в код виртуальной машины, что под этим подразумевается?

Стоит отметить, что языки не интерпретируются и не компилируются, а языковые реализации либо интерпретируют, либо компилируют код. Вы заметили, что Ruby — это «интерпретируемый язык», но вы можете скомпилировать Ruby а-ля MacRuby, так что это не всегда интерпретируемый язык.

Практически каждая реализация Python состоит из интерпретатора (а не компилятора). Файлы .pyc, которые вы видите, представляют собой байт-код для виртуальной машины Python (аналогично файлам .class Java). Они не совпадают с машинным кодом, сгенерированным компилятором C для собственной архитектуры машины. Однако некоторые реализации Python содержат компилятор «точно в срок», который компилирует байт-код Python в собственный машинный код.

(Я говорю «практически каждый», потому что я не знаю ни одного собственного машинного компилятора для Python, но я не хочу утверждать, что их нигде нет.)


LetsCodeIt, 28 мая 2023 г., 06:53