Это просто удивление, которое я испытал, читая о интерпретируемых и компилируемых языках.
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, в то время как он интерпретируется при непосредственном выполнении.
Так какой тип языка мне следует рассматривать? Интерпретируется или компилируется? И как его эффективность сравнивается с интерпретируемыми и скомпилированными языками?
Согласно странице вики в переводе с языков , он указан как язык, скомпилированный с кодом виртуальной машины. Что это значит?
RUN
. Это было, как если бы у вас был компилятор, который выполнил шаг лексирования, а затем вывел поток токенов, которые нужно было повторно анализировать при каждом запуске программы. Совсем не похоже на современную компиляцию байт-кода, как это делается, скажем javac
, с использованием лексирования, анализа и оптимизации.