tutorial - Python vs Cpython
python 3 (10)
¿Qué es todo este alboroto sobre Python y CPython (Jython, IronPython) , no lo entiendo?
python.org menciona que CPython es:
La implementación "tradicional" de Python (apodado CPython)
otra pregunta de Stack Overflow menciona que:
CPython es el intérprete de códigos de bytes predeterminado de Python, que está escrito en C.
Honestamente, no entiendo lo que ambas explicaciones significan en la práctica, pero lo que pensé fue que, si uso CPython, significa que cuando ejecuto un código de ejemplo de Python, lo compila en lenguaje C y luego lo ejecuta como si fuera C código
Entonces, ¿qué es exactamente CPython y en qué se diferencia cuando se compara con python y debería probablemente usar CPython sobre Python y, de ser así, cuáles son sus ventajas?
Entonces, ¿qué es CPython?
CPython es la implementación original de Python. Es la implementación que descarga de Python.org. La gente lo llama CPython para distinguirlo de otras implementaciones de Python posteriores, y para distinguir la implementación del motor de lenguaje del propio lenguaje de programación Python.
La última parte es de donde viene tu confusión; necesitas mantener Python-the-language separado de lo que ejecuta el código de Python.
Sucede que CPython se implementa en C. Eso es solo un detalle de implementación, en realidad CPython compila su código de Python en un código de bytes (de forma transparente) e interpreta ese código de bytes en un ciclo de evaluación.
CPython también es el primero en implementar nuevas características; El desarrollo de Python-the-language utiliza CPython como base; Siguen otras implementaciones.
¿Qué hay de Jython, etc.?
Jython , IronPython y PyPy son las "otras" implementaciones actuales del lenguaje de programación Python; estos se implementan en Java, C # y RPython (un subconjunto de Python), respectivamente. Jython compila su código de Python a código de bytes de Java , de modo que su código de Python puede ejecutarse en la JVM. IronPython te permite ejecutar Python en el CLR de Microsoft . Y PyPy, al estar implementado en (un subconjunto de) Python, te permite ejecutar el código de Python más rápido que CPython, que con razón debería volar tu mente. :-)
En realidad compilando a C
Así que CPython no traduce tu código Python a C por sí mismo. En su lugar, se ejecuta un bucle de intérprete. Hay un proyecto que traduce el código de Python-ish a C, y se llama Cython . Cython agrega algunas extensiones al lenguaje Python, y le permite compilar su código en extensiones C, código que se conecta al intérprete CPython.
Debe saber que CPython no admite realmente el subprocesamiento múltiple debido al bloqueo global de intérprete . Tampoco tiene mecanismos de optimización para la recursión, y tiene muchas otras limitaciones que otras implementaciones y bibliotecas intentan llenar.
Debes echar un vistazo a esta página en la wiki de python.
Mire los fragmentos de código en this página, le dará una buena idea de lo que es un intérprete.
Este article explica a fondo la diferencia entre diferentes implementaciones de Python. Como el artículo lo pone:
Lo primero que hay que darse cuenta es que ''Python'' es una interfaz. Hay una especificación de qué debe hacer Python y cómo debe comportarse (como con cualquier interfaz). Y hay múltiples implementaciones (como con cualquier interfaz).
La segunda cosa a tener en cuenta es que ''interpretado'' y ''compilado'' son propiedades de una implementación, no una interfaz.
Incluso tuve el mismo problema de entender cómo CPython, JPython, IronPython, PyPy son diferentes entre sí.
Entonces, estoy dispuesto a aclarar tres cosas antes de comenzar a explicar:
- Python : es un lenguaje, solo indica / describe cómo transmitir / expresarse al intérprete (el programa que acepta su código de Python).
- Implementación : se trata de cómo se escribió el intérprete, específicamente, en qué idioma y qué termina haciendo .
- Bytecode : es el código que procesa un programa, generalmente denominado máquina virtual, en lugar de la máquina de computadora "real", el procesador de hardware.
CPython es la implementación, que fue escrita en lenguaje C. Termina produciendo un bytecode (conjunto de instrucciones basado en la máquina de la pila) que es específico de Python y luego lo ejecuta. La razón para convertir el código Python en un código de bytes es porque es más fácil implementar un intérprete si se parece a las instrucciones de la máquina. Pero, no es necesario producir algunos códigos de bytes antes de la ejecución del código de Python (pero CPython sí produce).
Si quieres mirar el código de bytes de CPython, puedes hacerlo. Así es como puedes:
>>> def f(x, y): # line 1
... print("Hello") # line 2
... if x: # line 3
... y += x # line 4
... print(x, y) # line 5
... return x+y # line 6
... # line 7
>>> import dis # line 8
>>> dis.dis(f) # line 9
2 0 LOAD_GLOBAL 0 (print)
2 LOAD_CONST 1 (''Hello'')
4 CALL_FUNCTION 1
6 POP_TOP
3 8 LOAD_FAST 0 (x)
10 POP_JUMP_IF_FALSE 20
4 12 LOAD_FAST 1 (y)
14 LOAD_FAST 0 (x)
16 INPLACE_ADD
18 STORE_FAST 1 (y)
5 >> 20 LOAD_GLOBAL 0 (print)
22 LOAD_FAST 0 (x)
24 LOAD_FAST 1 (y)
26 CALL_FUNCTION 2
28 POP_TOP
6 30 LOAD_FAST 0 (x)
32 LOAD_FAST 1 (y)
34 BINARY_ADD
36 RETURN_VALUE
Ahora, echemos un vistazo al código anterior. Las líneas 1 a 6 son una definición de función. En la línea 8, importamos el módulo ''dis'' que puede usarse para ver el bytecode de Python intermedio (o puede decir, desensamblador para bytecode de Python) generado por CPython (intérprete).
NOTA : Obtuve el enlace a este código del canal IRC de #python: https://gist.github.com/nedbat/e89fa710db0edfb9057dc8d18d979f9c
Y luego, está Jython, que está escrito en Java y termina produciendo el código de bytes de Java. El código de bytes de Java se ejecuta en Java Runtime Environment, que es una implementación de Java Virtual Machine (JVM). Si esto es confuso, entonces sospecho que no tienes idea de cómo funciona Java. En términos sencillos, el compilador de Java toma el código de Java (el lenguaje, no el compilador) y genera un archivo (que es un código de byte de Java) que solo se puede ejecutar con un JRE. Esto se hace para que, una vez compilado el código de Java, se pueda portar a otras máquinas en formato de código de bytes de Java, que solo puede ejecutar JRE. Si esto sigue siendo confuso, puede que desee echar un vistazo a esta página web .
Aquí, puedes preguntar si el código de bytes del CPython es portátil como Jython, sospecho que no. El bytecode producido en la implementación de CPython fue específico de ese intérprete para facilitar la ejecución posterior del código (también sospecho que, tal producción de bytecode intermedio, solo por la facilidad de procesamiento en muchos otros intérpretes).
Entonces, en Jython, cuando compilas tu código de Python, terminas con el código de bytes de Java, que se puede ejecutar en una JVM.
De manera similar, IronPython (escrito en lenguaje C #) compila su código de Python a Common Language Runtime (CLR), que es una tecnología similar en comparación con JVM, desarrollada por Microsoft.
La implementación original y estándar de Python generalmente se denomina CPython
cuando se quiere contrastar con las otras opciones ( y simplemente, simplemente, “Python” de lo contrario ). Este nombre proviene del hecho de que está codificado en un ANSI C language code
portátil. Este es el Python que obtiene de python.org , obtiene con las distribuciones ActivePython y Enthought , y tiene automáticamente en la mayoría de las máquinas con Linux y Mac OS X. Si ha encontrado una versión preinstalada de Python en su máquina, es probable que sea CPython
, a menos que su compañía u organización esté usando Python de manera más especializada.
A menos que desee
Stackless
secuencias de comandos de aplicacionesJava
o.NET
con Python o encontrar los beneficios deStackless
oPyPy
convincentes, es probable que desee utilizar el sistemaCPython
estándar. Debido a que es la implementación de referencia del lenguaje, tiende a ejecutarse más rápido, a ser la más completa ya ser más actualizada y robusta que los sistemas alternativos.
Mis experiencias iniciales con ambos me han llevado tentativamente a la siguiente impresión. Me gustan las características de ambos.
Python vs C Lenguaje de programación:
C - Pobre en declaraciones de datos e inicializaciones. - El detalle en su forma estructurada hace que la lógica de sus funciones sea más fácil de seguir sin el embellecimiento de comentarios extraños o nombres excesivamente descriptivos.
Python --- Declaraciones e inicializaciones de datos fáciles y rápidas. --- La simplicidad de la estructura en las funciones llamadas complica la comprensión de sus aplicaciones y la dirección de la lógica en Python. Esto requiere una palabrería excesiva en el etiquetado de sus variables, así como sus rutinas. Python es mejor para la configuración y C es superior en seguimiento y aplicación.
Necesitas distinguir entre un lenguaje y una implementación. Python es un lenguaje,
Según Wikipedia , "Un lenguaje de programación es una notación para escribir programas, que son especificaciones de un cálculo o algoritmo". Esto significa que son simplemente las reglas y la sintaxis para escribir código. Por separado, tenemos una implementación de lenguaje de programación que, en la mayoría de los casos, es el intérprete o compilador real.
Python es un lenguaje. CPython es la implementación de Python en C. Jython es la implementación en Java, y así sucesivamente.
En resumen: ya está utilizando CPython (si descargó desde here ).
Python es un lenguaje: un conjunto de reglas que se pueden usar para escribir programas. Hay varias implementaciones de este lenguaje.
No importa la implementación que tome, hacen prácticamente lo mismo: toman el texto de su programa e interpretan, ejecutando sus instrucciones. Ninguno de ellos compila su código en C o en cualquier otro idioma.
CPython es la implementación original, escrita en C. (La parte "C" en "CPython" se refiere al lenguaje que se utilizó para escribir el intérprete de Python).
Jython es el mismo lenguaje (Python), pero implementado utilizando Java.
El intérprete de IronPython fue escrito en C #.
También hay PyPy, un intérprete de Python escrito en Python. Haz tu elección :)
Una implementación de lenguaje de programación es un sistema para ejecutar programas de computadora.
Hay dos enfoques generales para la implementación del lenguaje de programación:
- Interpretación : un intérprete toma como entrada un programa en algún idioma y realiza las acciones escritas en ese idioma en alguna máquina.
- Compilación : un compilador toma como entrada un programa en algún idioma y traduce ese programa a otro idioma, que puede servir como entrada para otro intérprete u otro compilador.
Python es un lenguaje de programación interpretado de alto nivel creado por Guido van Rossum en 1991.
CPython es una versión de referencia del lenguaje de computación Python, que está escrito en C creado por Guido van Rossum también.
implementation
significa qué lenguaje se usó para implementar Python y no cómo se implementaría el Código Python. La ventaja de usar CPython es la disponibilidad de tiempo de ejecución de C, así como una fácil integración con C / C ++.
Así que CPython fue implementado originalmente utilizando C
Había otras bifurcaciones en la implementación original que permitían a Python aprovechar Java (JYthon) o .NET Runtime (IronPython).
Según la implementación que use, la disponibilidad de la biblioteca puede variar, por ejemplo, Ctypes no está disponible en Jython , por lo que cualquier biblioteca que use ctypes no funcionará en Jython. Del mismo modo, si desea utilizar una clase Java, no puede hacerlo directamente desde CPython. Necesitas un pegamento (JEPP) o necesitas usar Jython (la implementación Java de Python)