Это просто вопрос, который возник у меня, когда я читал об интерпретируемых и компилируемых языках.
Ruby, без сомнения, является интерпретируемым языком, поскольку исходный код обрабатывается интерпретатором в момент выполнения. Напротив, C является компилируемым языком, так как сначала нужно скомпилировать исходный код в соответствии с машиной, а затем выполнить. Это приводит к гораздо более быстрому выполнению.
Теперь переходим к Python:
Это предполагает, что код Python компилируется каждый раз, когда он импортируется в новый процесс для создания .pyc, в то время как он интерпретируется при непосредственном выполнении.
Итак, каким типом языка я должен считать его? Интерпретируется или компилируется? И как его эффективность сравнивается с интерпретируемыми и компилируемыми языками?
Согласно вики-странице Интерпретируемые языки, он указан как язык, скомпилированный в код виртуальной машины, что под этим подразумевается?
Стоит отметить, что языки не интерпретируются и не компилируются, а языковые реализации либо интерпретируют, либо компилируют код. Вы заметили, что Ruby — это «интерпретируемый язык», но вы можете скомпилировать Ruby а-ля MacRuby, так что это не всегда интерпретируемый язык.
Практически каждая реализация Python состоит из интерпретатора (а не компилятора). Файлы .pyc
, которые вы видите, представляют собой байт-код для виртуальной машины Python (аналогично файлам .class
Java). Они не совпадают с машинным кодом, сгенерированным компилятором C для собственной архитектуры машины. Однако некоторые реализации Python содержат компилятор «точно в срок», который компилирует байт-код Python в собственный машинный код.
(Я говорю «практически каждый», потому что я не знаю ни одного собственного машинного компилятора для Python, но я не хочу утверждать, что их нигде нет.)