stringtranslate.com

PyPy

PyPy ( / ˈ p p / ) es una implementación del lenguaje de programación Python . [2] PyPy a menudo se ejecuta más rápido que la implementación estándar CPython porque PyPy usa un compilador just-in-time . [3] La mayoría del código Python se ejecuta bien en PyPy excepto el código que depende de las extensiones CPython, que no funcionan o incurren en cierta sobrecarga cuando se ejecutan en PyPy.

PyPy se ha creado con una técnica conocida como meta-tracing, que es una transformación casi automática que toma un intérprete como entrada y produce un compilador de seguimiento justo a tiempo como salida. 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-tracing de PyPy se llama RPython.

PyPy no tiene compatibilidad total con las versiones más recientes del ecosistema CPython. Si bien afirma ser compatible con Python 2.7, 3.7, 3.8 y 3.9 ("un reemplazo directo para CPython"), carece de algunas de las características y sintaxis más nuevas de Python 3.10, como la sintaxis para la coincidencia de patrones . [4]

Detalles y motivación

PyPy tiene como objetivo proporcionar un marco de trabajo común de traducción y soporte para producir implementaciones de lenguajes dinámicos , haciendo hincapié en una clara separación 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 mencionado anteriormente para habilitar nuevas funciones avanzadas sin tener que codificar detalles de bajo nivel en él. [5] [6]

RPython

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

El proyecto PyPy ha desarrollado una cadena de herramientas que analiza el código RPython y lo traduce a una forma de código de bytes , que puede ser traducido a C. Solía ​​haber otros backends además de C ( Java , C# y Javascript ), pero estos sufrieron de bitrot y han sido eliminados. Por lo tanto, el logo recursivo de PyPy es una serpiente que se traga a sí misma ya que RPython es traducido por un intérprete de Python . El código también puede ejecutarse sin traducir para pruebas y análisis, lo que proporciona un buen banco de pruebas para la investigación de lenguajes dinámicos.

Permite la inclusión de recolectores de basura enchufables , así como la habilitación opcional de funciones de Stackless Python . Por último, incluye un generador Just-In-Time (JIT) que crea un compilador Just-In-Time en el intérprete, dadas algunas anotaciones en el código fuente del intérprete . El compilador JIT generado es un JIT de rastreo . [9]

RPython ahora también se utiliza para escribir implementaciones en lenguajes distintos de Python, como Pixie. [10]

Estado del proyecto

PyPy a partir de la versión 7.3.17 es compatible con dos versiones de CPython : 2.7 y 3.10. [11] [12] La primera versión de PyPy compatible con CPython v3 es PyPy v2.3.1 (2014). [13] El intérprete de PyPy compatible con CPython v3 también se conoce como PyPy3.

PyPy tiene soporte de compilación JIT en procesadores x86 de 32 bits/64 bits y ARM de 32 bits/64 bits . [14] 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 la implementación. [15]

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

Historia

PyPy es una continuación del proyecto Psyco , un compilador especializado just-in-time para Python, desarrollado por Armin Rigo entre 2002 y 2010. El objetivo de PyPy es tener un compilador especializado just-in-time con alcance, que no estaba disponible para Psyco. [ aclaración necesaria ] Inicialmente, RPython también podía compilarse en Java bytecode , CIL y JavaScript , pero estos backends se eliminaron debido a la falta de interés.

PyPy fue inicialmente un proyecto orientado a la investigación y el desarrollo. Alcanzó un estado maduro de desarrollo y una versión oficial 1.0 a mediados de 2007. Su siguiente objetivo fue lanzar una versión lista para producción con mayor compatibilidad con CPython. Muchos de los cambios de PyPy se realizaron durante los sprints de codificación .

Fondos

PyPy fue financiado por la Unión Europea como un Proyecto de Investigación Específico Dirigido [31] entre diciembre de 2004 y marzo de 2007. En junio de 2008, PyPy anunció la financiación como 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 , [32] aceptó una propuesta de los miembros del proyecto PyPy titulada "PYJIT: un kit 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. [33] En PyCon US 2011, la Python Software Foundation proporcionó una subvención de $10,000 para que PyPy continuara trabajando en el rendimiento y la compatibilidad con versiones más nuevas del lenguaje. [34] El puerto a la arquitectura ARM fue patrocinado en parte por la Raspberry Pi Foundation . [22]

El proyecto PyPy también acepta donaciones a través de sus páginas de blog de estado. [35] 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. [22]

Véase también

Notas

  1. ^ "Lanzamiento de PyPy v7.3.17" . Consultado el 20 de septiembre de 2024 .
  2. ^ "Entrevista a Maciej Fijalkowski PyPy". 29 de noviembre de 2015.
  3. ^ "Velocidad de PyPy". speed.pypy.org . Consultado el 1 de diciembre de 2019 .
  4. ^ "PEP 634 - Coincidencia de patrones estructurales: especificación". Python.org . Consultado el 15 de febrero de 2021 .
  5. ^ Samuele Pedroni (marzo de 2007). "PyPy: descripción general de los objetivos y la arquitectura". Archivado desde el original el 14 de junio de 2012.
  6. ^ "PyPy – Objetivos y descripción general de la arquitectura – Declaración de misión" . Consultado el 11 de octubre de 2013 .
  7. ^ Nuestro intérprete de tiempo de ejecución es “RPython”, Guía de codificación – Documentación de PyPy
  8. ^ "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.
  9. ^ Bolz, Carl; Cuni, Antonio; Fijalkowski, Maciej; Rigo, Armin. Rastreo del metanivel: compilador JIT de rastreo de PyPy . ICOOOLPS '09. doi :10.1145/1565824.1565827.
  10. ^ Entrevista a Timothy Balridge.
  11. ^ "Compatibilidad entre PyPy y Python". pypy.org . 28 de diciembre de 2019 . Consultado el 15 de diciembre de 2020 .
  12. ^ "PyPy v7.3.7: versión con corrección de errores de 3.7 y 3.8". pypy.org . 25 de octubre de 2021 . Consultado el 10 de noviembre de 2021 .
  13. ^ ab el equipo PyPy (20 de junio de 2014). "PyPy3 2.3.1 - Punto de apoyo". Blog de PyPy.
  14. ^ "PyPy v7.2.0: lanzamiento de 2.7 y 3.6". pypy.org . 16 de octubre de 2019.
  15. ^ "Compatibilidad entre PyPy y Python". 28 de diciembre de 2019.
  16. ^ "Pilones en funcionamiento sobre PyPy". 10 de junio de 2008.
  17. ^ "Ejecutar Pyglet sobre PyPy". 20 de febrero de 2008.
  18. ^ "Ejecutar Nevow sobre PyPy". 20 de junio de 2008.
  19. ^ "PyPy ejecuta la versión beta de Django 1.0 sin modificaciones". 19 de agosto de 2008.
  20. ^ "Presentamos la versión 1.2 de PyPy". 30 de abril de 2011.
  21. ^ "Lanzamiento de PyPy 1.5: poniéndonos al día". 12 de marzo de 2010.
  22. ^ abc Jake Edge (15 de mayo de 2013). "Un vistazo a la versión 2.0 de PyPy". LWN.net .
  23. ^ "PyPy 2.0 - Sándwich de Einstein". 9 de mayo de 2013.
  24. ^ "PyPy2.7 y PyPy3.5 v5.7: dos en una versión". 21 de marzo de 2017.
  25. ^ "Lanzamiento dual de PyPy2.7 y PyPy3.5 v6.0". 26 de abril de 2018.
  26. ^ Cuni, Antonio (11 de febrero de 2019). "Blog de estado de PyPy: PyPy v7.0.0: versión triple de 2.7, 3.5 y 3.6-alfa". Blog de estado de PyPy . Consultado el 17 de agosto de 2020 .
  27. ^ Mattip (14 de octubre de 2019). "Blog de estado de PyPy: lanzamiento de PyPy v7.2". Blog de estado de PyPy . Consultado el 17 de agosto de 2020 .
  28. ^ Mattip (24 de diciembre de 2019). "Blog de estado de PyPy: lanzamiento de PyPy v7.3.0". Blog de estado de PyPy .
  29. ^ "PyPy y CFFI se han mudado a Heptapod". 16 de febrero de 2020.
  30. ^ "PyPy se ha trasladado a Git, GitHub". 29 de diciembre de 2023.
  31. ^ "Entrada al Servicio de Información sobre Investigación y Desarrollo de la Comunidad de la UE".
  32. ^ "Eurostars – Apunta más alto".
  33. ^ "Página del proyecto en Eureka Network". Archivado desde el original el 3 de abril de 2012. Consultado el 17 de octubre de 2011 .
  34. ^ "Un agradecimiento al PSF". 22 de marzo de 2011.
  35. ^ "Blog sobre el estado de PyPy: Ah, y por cierto: PyPy obtiene financiación a través de "Eurostars"". 10 de diciembre de 2010.

Referencias

Enlaces externos