CPython является интерпретатором байт-кода?
-
10-07-2019 - |
Вопрос
Я не совсем понимаю понятие "интерпретатор байт-кода" в контексте CPython. Может ли кто-то пролить свет на всю картину?
Означает ли это, что CPython скомпилирует и выполнит pyc-файл (файл байт-кода?). Тогда что компилировать Py файл в PyC файл? И чем Jython отличается от CPython (за исключением того, что они реализованы на разных языках).
Я также где-то читал, что Python - это интерпретация C ++. Это правильно? И что это значит?
Я все еще очень плохо знаком с Python, так что прости меня, если я задаю глупые вопросы ... Большое вам спасибо!
Решение
CPython - это реализация Python на C. Это первая и до сих пор основная реализация, которую люди имеют в виду, когда говорят о Python. Он компилирует файлы .py в файлы .pyc. Файлы .pyc содержат байт-коды. Реализация CPython также интерпретирует эти байт-коды. CPython не написан на C ++, это C.
Компиляция из .py в .pyc происходит прозрачно по мере необходимости. Когда вы запустите файл .py, он сначала будет скомпилирован в файл .pyc, если необходимо, затем файл .pyc будет интерпретирован.
Jython отличается тем, что (помимо реализации в Java вместо C) он компилирует файлы .py в файлы .class, чтобы их можно было выполнять в JVM.
Другие советы
Во-первых: тот факт, что CPython является интерпретатором байт-кода, не должен иметь значения для вас, как для пользователя Python. Продолжайте писать код и не беспокойтесь о том, как он превращается в действие.
Итак, чтобы ответить на ваш вопрос и удовлетворить ваше любопытство, вот что происходит: CPython читает исходный код python и компилирует его в байт-код python, который хранится в файле .pyc. Затем он выполняет этот код, используя интерпретатор байт-кода. Этот дизайн отделяет синтаксический анализ python от исполнения, что упрощает обе части интерпретатора.
Jython - это только передняя часть - он читает исходный код Python и выводит байтовые коды Java, которые затем интерпретируются JVM. Это та же архитектура, что и у CPython, с двумя примечательными отличиями: во-первых, байт-код java стандартизирован и задокументирован, а байт-код CPython считается внутренним по отношению к python и может изменяться в любое время. Второе: JVM намного сложнее, чем интерпретатор CPython. JVM имеет один из самых продвинутых движков JIT в мире, а интерпретатор CPython довольно прост.
CPython является и компилятором байт-кода, и интерпретатором (виртуальной машиной).
Он автоматически обнаруживает, что существующего файла прекомпилятора (.pyc) не существует, компилирует код и сохраняет его.