2009-10-29 5 views
9

Я действительно не понимаю понятие «интерпретатор байт-кода» в контексте CPython. Может кто-то пролить свет на всю картину?CPython - интерпретатор байт-кода?

Означает ли это, что CPython будет скомпилировать и выполнить pyc-файл (файл байт-кода?). Затем, что компилировать файл py в файл pyc? И как Jython отличается от CPython (за исключением того, что они реализованы на разных языках).

Я также где-то читал, что Python - это интерпретация C++. Это верно? И что это значит?

Я все еще очень новичок в Python, так что простите меня, если я попрошу немые вопросы ... Большое вам спасибо!

ответ

12

CPython - это реализация Python в C. Это первая реализация, и все еще главная, что люди имеют в виду, когда говорят о Python. Он компилирует файлы .py в файлы .pyc. .pyc содержат байт-коды. Реализация CPython также интерпретирует эти байт-коды. CPython не написан на C++, это C.

Компиляция с .py на .pyc выполняется прозрачно по мере необходимости. Когда вы выполняете файл .py, он сначала скомпилируется в .pyc-файл, если это необходимо, тогда файл .pyc будет интерпретироваться.

Jython отличается тем, что (в дополнение к реализации в Java вместо C) он компилирует файлы .py в файлы .class, чтобы их можно было запускать в JVM.

+0

Преобразует ли Jython код Python в Java и затем скомпилируется в байт-код Jave? – Nope

+0

Я не знаю, вырабатывает ли Java Java как промежуточную форму. –

+3

AFAIK Jython может производить Java как промежуточную форму, если запрашивается, но обычно он просто создает Java-байт-код. – MAK

7

CPython - это как компилятор байт-кода, так и интерпретатор (виртуальная машина).

Он автоматически определяет, существует ли существующий файл предварительного компилятора (.pyc), компилирует код и сохраняет его.

10

Первое: тот факт, что CPython является интерпретатором байт-кода, не должен иметь значения для вас как пользователя python. Продолжайте писать код и не беспокойтесь о том, как он превращается в действие.

Итак, чтобы ответить на ваш вопрос и удовлетворить ваше любопытство, вот что происходит: CPython читает исходный код python и компилирует его в байт-код python, который хранится в файле .pyc. Затем он выполняет этот код с использованием интерпретатора байт-кода. Этот проект отделяет разбор питона от исполнения, позволяя упростить обе части интерпретатора.

Jython - это только первая половина - он считывает исходный код Python и выводит байт-коды Java, которые затем интерпретируются JVM. Это та же архитектура, что и CPython, с двумя примечательными отличиями: одна: байт-код Java стандартизирован и документирован, а байт-код CPython считается внутренним для python и может меняться в любое время. Два: JVM намного сложнее, чем интерпретатор CPython. JVM имеет один из самых продвинутых двигателей JIT в мире, в то время как интерпретатор CPython довольно прост.

+1

Хотя поздно, но это очень подробное объяснение. Спасибо! – huy

Смежные вопросы