De Wikipedia, la enciclopedia libre
Saltar a navegación Saltar a búsqueda

PyPy ( / p p / ) es una implementación alternativa de la Python lenguaje de programación [2] a CPython (que es la implementación estándar). PyPy a menudo se ejecuta más rápido que CPython porque PyPy es un compilador justo a tiempo, mientras que CPython es un intérprete . [3] La mayoría del código de Python se ejecuta bien en PyPy, excepto el código que depende de las extensiones de CPython, que no funciona o genera una sobrecarga cuando se ejecuta en PyPy. Internamente, PyPy utiliza una técnica conocida como meta-seguimiento, que transforma a un intérprete en un compilador de seguimiento justo a tiempo.. Dado que los intérpretes suelen ser más fáciles de escribir que los compiladores, pero se ejecutan más lentamente, esta técnica puede facilitar la producción de implementaciones eficientes de lenguajes de programación. La cadena de herramientas de meta-rastreo de PyPy se llama RPython .

PyPy no tiene compatibilidad total con el ecosistema CPython (al menos sus versiones posteriores): solo afirma compatibilidad con la sintaxis de Python 2.7 y 3.6, y 3.7 (calidad beta, con "algunas" [4] características faltantes); pierde la sintaxis más nueva en Python 3.8, [5] 3.9 [6], etc., como las expresiones de asignación [7] y los parámetros de posición solamente; [8] y la próxima sintaxis de Python 3.10, como la coincidencia de patrones . [9]

Detalles y motivación [ editar ]

PyPy fue concebido para ser una implementación de Python escrita en un lenguaje de programación similar a Python. Esto facilita la identificación de áreas donde se puede mejorar y hace que PyPy sea más flexible y más fácil de experimentar que CPython . [ cita requerida ]

PyPy tiene como objetivo proporcionar un marco común de traducción y soporte para producir implementaciones de lenguajes dinámicos , enfatizando una separación clara entre la especificación del lenguaje y los aspectos de implementación. También tiene como objetivo proporcionar una implementación compatible, flexible y rápida del lenguaje de programación Python utilizando el marco anterior para habilitar nuevas funciones avanzadas sin tener que codificar detalles de bajo nivel en él. [10] [11]

RPython [ editar ]

El propio intérprete de PyPy está escrito en un subconjunto restringido de Python llamado RPython (Python restringido). [12] RPython impone algunas restricciones al lenguaje Python, de modo que el tipo de variable se puede inferir en tiempo de compilación. [13]

El proyecto PyPy ha desarrollado un conjunto de herramientas que analiza el código RPython y la traduce en una forma de código de bytes, que puede ser bajado en C . Solía ​​haber otros backends además de C: Java, CSharp y Javascript, pero los que sufrían de bitrot y se han eliminado. Por lo tanto, el logotipo recursivo de PyPy es una serpiente que se traga a sí misma, ya que un intérprete de Python traduce el RPython. El código también se puede ejecutar sin traducir para realizar pruebas y análisis, lo que proporciona un buen banco de pruebas para la investigación de lenguajes dinámicos.

Permite recolectores de basura conectables , así como también habilita opcionalmente las funciones de Stackless Python . Finalmente, incluye un generador justo a tiempo (JIT) que crea un compilador justo a tiempo en el intérprete, dadas algunas anotaciones en el código fuente del intérprete. El compilador JIT generado es un JIT de seguimiento . [14]

RPython ahora también se usa para escribir implementaciones de lenguaje que no son Python, como Pixie . [15]

Estado del proyecto [ editar ]

PyPy a partir de la versión 7.3.3 es compatible con tres versiones de CPython : 2.7.18, 3.6.12 y 3.7.9 (soporte de calidad beta para Python 3.7) [16] [4] La primera versión de PyPy compatible con CPython v3 es PyPy v2 .3.1 (2014). [17] El intérprete de PyPy compatible con CPython v3 también se conoce como PyPy3.

PyPy tiene soporte de compilación JIT en procesadores ARM de 32 bits / 64 bits x86 y 32 bits / 64 bits . [18] Se prueba todas las noches en Windows, Linux, OpenBSD y Mac OS X. PyPy puede ejecutar software Python puro que no depende de características específicas de implementación. [19]

Existe una capa de compatibilidad para las extensiones de la API de CPython C llamada CPyExt, pero es incompleta y experimental. La forma preferida de interactuar con las bibliotecas compartidas de C es a través de la interfaz de función externa C incorporada (CFFI) o las bibliotecas de ctypes .

Historia [ editar ]

PyPy es una continuación del proyecto Psyco , un compilador especializado justo a tiempo para Python, desarrollado por Armin Rigo entre 2002 y 2010. El objetivo de PyPy es tener un compilador especializado justo a tiempo con alcance, que no estaba disponible para Psyco. [ aclaración necesaria ] Inicialmente, el RPython también se podía compilar en código de bytes de Java , CIL y JavaScript , pero estos backends se eliminaron por falta de interés.

PyPy fue inicialmente un proyecto orientado a la investigación y el desarrollo. Al alcanzar un estado de desarrollo maduro y una versión 1.0 oficial a mediados de 2007, su siguiente enfoque fue lanzar una versión lista para producción con más compatibilidad con CPython. Muchos de los cambios de PyPy se han realizado durante los sprints de codificación .

  • En agosto de 2008, PyPy pudo ejecutar algunas bibliotecas populares de Python como Pylons , [20] Pyglet , [21] Nevow [22] y Django . [23]
  • El 12 de marzo de 2010, se lanzó PyPy 1.2, centrándose en la velocidad. Incluía un compilador justo a tiempo que funcionaba, aunque todavía no era estable. [24]
  • El 30 de abril de 2011, se lanzó la versión 1.5 de PyPy, que alcanzó la compatibilidad con CPython 2.7. [25]
  • El 9 de mayo de 2013, se lanzó PyPy 2.0, que introdujo soporte de calidad alfa para la compilación JIT en ARMv6 y ARMv7 JIT, e incluyó CFFI en la biblioteca estándar. [26] [27]
  • El 20 de junio de 2014, PyPy3 fue declarado estable [17] e introdujo compatibilidad con Python 3. Se lanzó junto con PyPy 2.3.1 y tiene el mismo número de versión.
  • El 21 de marzo de 2017, el proyecto PyPy lanzó la versión 5.7 tanto de PyPy como de PyPy3, y esta última presentó soporte de calidad beta para Python 3.5. [28]
  • El 26 de abril de 2018, se lanzó la versión 6.0, con soporte para Python 2.7 y 3.5 (todavía en calidad beta en Windows). [29]
  • El 11 de febrero de 2019, se lanzó la versión 7.0, con soporte para Python 2.7 y 3.5. [30]
  • El 14 de octubre de 2019, se lanzó la versión 7.2, con soporte para Python 3.6.9. [31]
  • El 24 de diciembre de 2019, se lanzó la versión 7.3, con soporte para Python 3.6.9. [32]

Financiamiento [ editar ]

PyPy fue financiado por la Unión Europea como un proyecto de investigación específico [33] entre diciembre de 2004 y marzo de 2007. En junio de 2008, PyPy anunció que la financiación formaba parte de los programas de código abierto de Google y acordó centrarse en hacer que PyPy sea más compatible con CPython . En 2009 Eurostars, una agencia de financiación de la Unión Europea especialmente centrada en las PYME , [34] aceptó una propuesta de los miembros del proyecto PyPy titulada "PYJIT: un conjunto de herramientas rápido y flexible para lenguajes de programación dinámicos basados ​​en PyPy". La financiación de Eurostars duró hasta agosto de 2011. [35] En PyCon US 2011, la Python Software Foundationproporcionó una subvención de $ 10,000 para que PyPy continúe trabajando en el rendimiento y la compatibilidad con las versiones más recientes del lenguaje. [36] El puerto a la arquitectura ARM fue patrocinado en parte por la Fundación Raspberry Pi . [26]

El proyecto PyPy también acepta donaciones a través de sus páginas de blog de estado. [37] A partir de 2013, una variedad de subproyectos tenían financiación: compatibilidad con la versión Python 3, soporte NumPy optimizado integrado para cálculos numéricos y soporte de memoria transaccional de software para permitir un mejor paralelismo. [26]

Ver también [ editar ]

  • Bootstrapping (compiladores)
  • Cython
  • GraalVM
  • Evaluación parcial
  • Psico
  • Autohospedaje
  • Auto-intérprete
  • Golondrina sin carga

Notas [ editar ]

  1. ^ "Blog de estado de PyPy" . Consultado el 23 de noviembre de 2020 .
  2. ^ "Entrevista a Maciej Fijalkowski PyPy" .
  3. ^ "Velocidad de PyPy" . speed.pypy.org . Consultado el 1 de diciembre de 2019 .
  4. ^ a b "Versión triple de PyPy 7.3.3: python 3.7, 3.6 y 2.7" . pypy.org . Consultado el 15 de diciembre de 2020 .
  5. ^ "Novedades de Python 3.8 - Documentación de Python 3.9.1" . docs.python.org . Consultado el 15 de febrero de 2021 .
  6. ^ "Novedades de Python 3.8 - Documentación de Python 3.9.1" . docs.python.org . Consultado el 15 de febrero de 2021 .
  7. ^ "PEP 572 - Expresiones de asignación" . Python.org . Consultado el 15 de febrero de 2021 .
  8. ^ "PEP 570 - Parámetros posicionales de Python" . Python.org . Consultado el 15 de febrero de 2021 .
  9. ^ "PEP 634 - Coincidencia de patrones estructurales: especificación" . Python.org . Consultado el 15 de febrero de 2021 .
  10. ^ Samuele Pedroni (marzo de 2007). "PyPy - Visión general de los objetivos y la arquitectura" . Archivado desde el original el 30 de junio de 2012.
  11. ^ "PyPy - Resumen de objetivos y arquitectura - Declaración de misión" . Consultado el 11 de octubre de 2013 .
  12. ^ Nuestro intérprete de tiempo de ejecución es "RPython" , Guía de codificación - Documentación de PyPy
  13. ^ "Es un subconjunto adecuado de Python, restringido de una manera que permite un análisis fácil y una generación de código eficiente", Ancona et al., 2007.
  14. ^ Bolz, Carl; Cuni, Antonio; Fijalkowski, Maciej; Rigo, Armin. Seguimiento del metanivel: compilador JIT de seguimiento de PyPy . ICOOOLPS '09. doi : 10.1145 / 1565824.1565827 .
  15. ^ Entrevista de Timothy Balridge .
  16. ^ "PyPy - Compatibilidad con Python" . pypy.org . Consultado el 15 de diciembre de 2020 .
  17. ^ a b el equipo de PyPy (20 de junio de 2014). "PyPy3 2.3.1 - Fulcro" . Blog de PyPy.
  18. ^ "PyPy v7.2.0: lanzamiento de 2.7 y 3.6" . pypy.org . 16 de octubre de 2019.
  19. ^ "PyPy - Compatibilidad con Python" .
  20. ^ "Ejecución de pilones encima de PyPy" .
  21. ^ "Ejecutando Pyglet encima de PyPy" .
  22. ^ "Ejecutando Nevow encima de PyPy" .
  23. ^ "PyPy ejecuta django 1.0 beta sin modificar" .
  24. ^ "Presentamos la versión PyPy 1.2" .
  25. ^ "Lanzamiento de PyPy 1.5: ponerse al día" .
  26. ↑ a b c Jake Edge (15 de mayo de 2013). "Una mirada a la versión de PyPy 2.0" . LWN.net .
  27. ^ "PyPy 2.0 - Sándwich de Einstein" .
  28. ^ "PyPy2.7 y PyPy3.5 v5.7 - dos en una versión" .
  29. ^ "PyPy2.7 y PyPy3.5 v6.0 versión dual" .
  30. Cuni, Antonio (11 de febrero de 2019). "Blog de estado de PyPy: PyPy v7.0.0: lanzamiento triple de 2.7, 3.5 y 3.6-alpha" . Blog de estado de PyPy . Consultado el 17 de agosto de 2020 .
  31. Mattip (14 de octubre de 2019). "Blog de estado de PyPy: PyPy v7.2 lanzado" . Blog de estado de PyPy . Consultado el 17 de agosto de 2020 .
  32. Mattip (24 de diciembre de 2019). "Blog de estado de PyPy: PyPy v7.3.0 lanzado" . Blog de estado de PyPy .
  33. ^ "Entrada del servicio de información de investigación y desarrollo de la comunidad de la UE" .
  34. ^ "Eurostars - Apunte más alto" .
  35. ^ "Página del proyecto en la red Eureka" .
  36. ^ "Un agradecimiento a la PSF" .
  37. ^ "Blog de estado de PyPy: Ah, y por cierto: PyPy obtiene financiación a través de" Eurostars " " .

Referencias [ editar ]

  • Davide Ancona, Massimo Ancona, Antonio Cuni, Nicholas D. Matsakis, 2007. RPython: un paso hacia la reconciliación de lenguajes OO tipificados de forma dinámica y estática [ enlace muerto permanente ] . En Proc. Simposio de Lenguaje Dinámico (DLS), 2007. ACM Press.
  • Carl Friedrich Bolz, Antonio Cuni, Maciej Fijalkowski, 2009. Seguimiento del meta-nivel: Compilador JIT de seguimiento de PyPy . En Proc. ICOOOLPS, 2009. ACM Press.
  • Corbet, Jonathan (11 de mayo de 2011). "Un breve experimento con PyPy" . LWN.net .
  • von Eitzen, Chris (21 de noviembre de 2011). "PyPy 1.7 amplía el rendimiento 'punto dulce ' " . El H . Heinz Heise .
  • Rose, John (2 de diciembre de 2011). "Un día con PyPy" . Blog de desarrolladores de Oracle .
  • "Entrevista a Maciej Fijalkowski pypy" . Blog de Decisionstats.

Enlaces externos [ editar ]

  • Página web oficial