Интерпретируется ли Python (например, Javascript или PHP)? - PullRequest
33 голосов
/ 14 апреля 2009

Правильно ли интерпретируется Python во время выполнения или он может использоваться для разработки программ, которые запускаются как фоновые приложения (например, приложения Java или C)?

Ответы [ 6 ]

80 голосов
/ 15 апреля 2009

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

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

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

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

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

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

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

48 голосов
/ 14 апреля 2009

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

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

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

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

4 голосов
/ 14 апреля 2009

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

2 голосов
/ 14 апреля 2009

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

2 голосов
/ 14 апреля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...