2009-10-29 20 views
9

Realmente no entiendo el concepto de "bytecode interpreter" en el contexto de CPython. ¿Alguien puede arrojar algo de luz sobre la imagen completa?CPython es un intérprete de bytecode?

¿Significa que CPython compilará y ejecutará el archivo pyc (archivo de código de bytes?). Entonces, ¿qué compilar el archivo py en el archivo pyc? Y ¿cómo es Jython diferente de CPython (excepto que están implementados en diferentes idiomas).

También leí en alguna parte que Python es la interpretación de C++. ¿Es esto correcto? ¿Y qué significa eso?

Todavía soy muy nuevo en Python, así que discúlpeme si le hago las preguntas tontas ... ¡Muchas gracias!

Respuesta

12

CPython es la implementación de Python en C. Es la primera implementación, y sigue siendo la principal a la que se refieren las personas cuando hablan sobre Python. Compila archivos .py en archivos .pyc. Los archivos .pyc contienen bytecodes. La implementación de CPython también interpreta esos bytecodes. CPython no está escrito en C++, es C.

La compilación de .py a .pyc se realiza de forma transparente según sea necesario. Cuando ejecuta un archivo .py, primero se compilará en un archivo .pyc si es necesario, y luego se interpretará el archivo .pyc.

Jython es diferente porque (además de implementarse en Java en lugar de C) compila archivos .py en archivos .class para que se puedan ejecutar en la JVM.

+0

¿Jython convierte el código de Python en Java y luego lo compila en bytecode de Jave? – Nope

+0

No sé si produce Java como una forma intermedia. –

+3

AFAIK Jython puede producir Java como una forma intermedia si así lo solicita, pero generalmente solo genera bytecode de Java. – MAK

7

CPython es tanto el compilador de bytecode como el intérprete (máquina virtual).

Detecta automáticamente si no existe ningún archivo precompilador existente (.pyc), compila el código y lo guarda.

10

Primero: El hecho de que CPython sea un intérprete de bytecode no debería importarle como usuario de python. Continúa y escribe el código, y no te preocupes por cómo se convierte en acción.

Por lo tanto, para responder a su pregunta y satisfacer su curiosidad, esto es lo que sucede: CPython lee el código fuente de Python y lo compila en código de byte de python, que se almacena en el archivo .pyc. A continuación, ejecuta ese código utilizando un intérprete de bytecode. Este diseño separa el análisis sintáctico de python de la ejecución, lo que permite que ambas partes del intérprete sean más simples.

Jython es solo la mitad frontal: lee la fuente Python y emite códigos byte de Java, que luego son interpretados por la JVM. Es la misma arquitectura que CPython, con dos diferencias notables: Uno: el bytecode java está estandarizado y documentado, mientras que el bytecode CPython se considera interno a python, y puede cambiar en cualquier momento. Dos: la JVM es mucho más complicada que el intérprete CPython. La JVM tiene uno de los motores JIT más avanzados del mundo, mientras que el intérprete CPython es bastante simple.

+1

Aunque tarde, pero esta es una explicación muy detallada. ¡Gracias! – huy