CPython является интерпретатором байт-кода? - PullRequest
9 голосов
/ 29 октября 2009

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

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

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

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

Ответы [ 3 ]

14 голосов
/ 29 октября 2009

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

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

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

12 голосов
/ 26 июля 2011

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

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

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

8 голосов
/ 29 октября 2009

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

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

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