Является ли Python интерпретированным (например, Javascript или PHP)?

Является ли Python строго интерпретированным во время выполнения или может ли он использоваться для разработки программ, выполняемых в качестве фоновых приложений (например, Java-приложения или C-программы)?

Здесь есть несколько вопросов:

  1. Нет, Python не интерпретируется. Стандартная реализация компилируется в байт-код, а затем выполняется на виртуальной машине. Многие современные движки JavaScript также делают это.
  2. Независимо от реализации (интерпретатор, VM, машинный код) все, что вы хотите, может работать в фоновом режиме. Если вы хотите, вы можете запускать сценарии оболочки в фоновом режиме.

Как вам скажут разнообразные ответы, линия между интерпретируемыми и скомпилированными уже не так понятна, как это было, когда такие термины были придуманы. На самом деле, также является ошибкой рассматривать языки как интерпретируемые или скомпилированные, так как различные реализации языков могут делать разные вещи. В эти дни вы можете найти как интерпретаторы C, так и компиляторы Javascript .

Даже если смотреть на реализацию, все еще не ясно. Есть слои интерпретации. Вот несколько градаций между интерпретированными и скомпилированными:

  1. Чистая интерпретация. В значительной степени то, что он говорит на олове. Прочтите строку источника и немедленно выполните то, что он говорит. На самом деле это не делается многими рабочими языками – в значительной степени это такие вещи, как shell-скрипты.

  2. Токенизация + интерпретация. Тривиальная оптимизация выше. Вместо того, чтобы интерпретировать каждую строку с нуля, она сначала символизируется (то есть вместо того, чтобы видеть строку типа «print 52 + x», она преобразуется в поток токенов (например, [PRINT_STATEMENT, INTEGER(52), PLUS_SIGN, IDENTIFIER('x')] ), чтобы избежать многократного выполнения этого состояния интерпретации. Многие версии базы работали таким образом.

  3. Компиляция байтокода . Это подход, используемый такими языками, как Java и C # (хотя см. Ниже). Код преобразуется в инструкции для «виртуальной машины». Эти инструкции затем интерпретируются. Это также подход, применяемый python (или, по крайней мере, cpython, наиболее распространенная реализация). Реализации Jython и Ironpython также используют этот подход, но реплицируют компиляцию в байт-код для виртуальных машин Java и C #.

  4. Bytecode + Just in Time . Как и выше, но вместо интерпретации байт-кодов, код, который будет выполняться, скомпилируется из байт-кода в момент выполнения, а затем запускается. В некоторых случаях это может фактически превзойти собственную компиляцию, поскольку она может свободно выполнять анализ времени выполнения кода и может использовать специфические функции текущего процессора (в то время как статическая компиляция может потребоваться для компиляции для самого низкого общего ЦМР). Более поздние версии Java и C # используют этот подход. Psyco выполняет это для python.

  5. Собственная компиляция машинного кода. Код компилируется в машинный код целевой системы. Вы можете подумать, что теперь мы полностью устранили интерпретацию, но даже здесь есть тонкости. Некоторые инструкции машинного кода фактически не реализованы непосредственно на оборудовании, но на самом деле реализованы с помощью микрокода – даже машинный код иногда интерпретируется!

Технически Python скомпилируется в байт-код, а затем интерпретируется на виртуальной машине . Если компилятор Python может записать байт-код в файл .pyc, он (обычно) сделает это.

С другой стороны, в Python нет явного этапа компиляции, поскольку есть с Java или C. С точки зрения разработчика, похоже, что Python просто интерпретирует файл .py напрямую. Кроме того, Python предлагает интерактивное приглашение, в котором вы можете вводить операторы Python и выполнять их немедленно. Таким образом, рабочий процесс в Python намного более похож на рабочий язык интерпретируемого языка, чем язык скомпилированного языка. Мне (и многим другим разработчикам, я полагаю), что отличие рабочего процесса более важно, чем промежуточный шаг байт-кода или нет.

Python – интерпретируемый язык, но это байт-код, который интерпретируется во время выполнения. Есть также множество инструментов, которые могут помочь вам сделать ваши программы запустимыми как демон службы Windows / UNIX.

Да, Python интерпретируется, но вы также можете запускать их как длительные приложения.

Да, это интерпретируется, его основная реализация сначала компилирует байт-код, а затем запускает его (например, если вы взяли источник java и JVM скомпилировали его перед запуском). Тем не менее, вы можете запустить приложение в фоновом режиме. На самом деле, вы можете запускать в основном что-нибудь в фоновом режиме.