Articulo de referencia

PyPy

PyPy ( / ˈ p aɪ p aɪ / ) es una implementación del lenguaje de programación Python . [ 2 ] PyPy suele ser mucho más rápido que la implementación estándar CPython porque PyPy uti...

PyPy ( / ˈ p p / ) es una implementación del lenguaje de programación Python . [ 2 ] PyPy suele ser mucho más rápido que la implementación estándar CPython porque PyPy utiliza un compilador justo a tiempo . [ 3 ] La mayoría del código Python se ejecuta bien en PyPy, excepto el código que depende de extensiones de CPython, que no funciona o genera cierta sobrecarga al ejecutarse en PyPy.

PyPy se basa en una técnica conocida como metatrazado , una transformación mayormente automática que toma un intérprete como entrada y produce un compilador de trazado 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 facilita la creación de implementaciones eficientes de lenguajes de programación. La cadena de herramientas de metatrazado de PyPy se llama RPython .

PyPy admite oficialmente Python 2.7 y 3.11 [ 4 ] y tiene algunas diferencias en las implementaciones en comparación con CPython. [ 5 ]

Detalles y motivación

PyPy tiene como objetivo proporcionar un marco común de traducción y soporte para la creación de 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 busca proporcionar una implementación compatible, flexible y rápida del lenguaje de programación Python utilizando dicho marco para habilitar nuevas características avanzadas sin necesidad de codificar detalles de bajo nivel. [ 6 ] [ 7 ]

RPython

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

El proyecto PyPy ha desarrollado un conjunto de herramientas que analiza el código RPython y lo traduce a código de bytes , que a su vez puede traducirse a C. Anteriormente existían otros backends además de C ( Java , C# y JavaScript ), pero estos sufrieron problemas de compatibilidad y fueron eliminados. Por lo tanto, el logotipo recursivo de PyPy es una serpiente que se devora a sí misma, ya que el código RPython se traduce mediante un intérprete de Python . El código también puede ejecutarse sin traducir para realizar pruebas y análisis, lo que proporciona un excelente entorno de pruebas para la investigación de lenguajes dinámicos.

Permite el uso de recolectores de basura conectables , así como la habilitación opcional de las características de Stackless Python . Finalmente, incluye un generador de compilación justo a tiempo (JIT) que integra un compilador JIT en el intérprete, a partir de algunas anotaciones en el código fuente del intérprete . El compilador JIT generado es un JIT de rastreo . [ 10 ]

RPython ahora también se utiliza para escribir implementaciones de lenguajes que no son Python, como Pixie . [ 11 ]

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. [ 12 ] [ 13 ] La primera versión de PyPy compatible con CPython v3 es PyPy v2.3.1 (2014). [ 14 ] El intérprete de PyPy compatible con CPython v3 también se conoce como PyPy3.

PyPy admite la compilación JIT en procesadores x86 de 32 y 64 bits , así como en procesadores ARM de 32 y 64 bits . [ 15 ] Se prueba diariamente 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. [ 16 ]

Existe una capa de compatibilidad para las extensiones de la API de C de CPython 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 funciones externas de C (CFFI) integrada o las bibliotecas ctypes .

Historia

PyPy es una continuación del proyecto Psyco , un compilador especializado de compilación justo a tiempo para Python, desarrollado por Armin Rigo entre 2002 y 2010. El objetivo de PyPy es ofrecer un compilador especializado de compilación justo a tiempo con ámbito, algo que no estaba disponible en Psyco. Inicialmente, RPython también podía compilarse a bytecode 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. Tras alcanzar un estado de desarrollo maduro y lanzar oficialmente la versión 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 han realizado durante ciclos de desarrollo intensivo .

  • En agosto de 2008, PyPy pudo ejecutar algunas bibliotecas populares de Python como Pylons , [ 17 ] Pyglet , [ 18 ] Nevow [ 19 ] y Django . [ 20 ]
  • El 12 de marzo de 2010 se lanzó PyPy 1.2, centrado en la velocidad. Incluía un compilador justo a tiempo que funcionaba, aunque aún no era estable. [ 21 ]
  • El 30 de abril de 2011 se lanzó PyPy versión 1.5, que alcanzó compatibilidad con CPython 2.7. [ 22 ]
  • 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. [ 23 ] [ 24 ]
  • El 20 de junio de 2014, PyPy3 fue declarado estable [ 14 ] e introdujo compatibilidad con la versión más moderna de Python 3. Fue lanzado 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, introduciendo este último soporte de calidad beta para Python 3.5. [ 25 ]
  • El 26 de abril de 2018 se lanzó la versión 6.0, con soporte para Python 2.7 y 3.5 (aún en fase beta en Windows). [ 26 ]
  • El 11 de febrero de 2019 se lanzó la versión 7.0, con soporte para Python 2.7 y 3.5. [ 27 ]
  • El 14 de octubre de 2019 se lanzó la versión 7.2, con soporte para Python 3.6.9. [ 28 ]
  • El 24 de diciembre de 2019 se lanzó la versión 7.3, con soporte para Python 3.6.9. [ 29 ]
  • El 16 de febrero de 2020, el equipo de PyPy anunció el traslado del alojamiento del código fuente de Bitbucket a heptapod.net, junto con los repositorios del proyecto CFFI (C Foreign Function Interface ). También se publicaron un nuevo logotipo y un nuevo diseño de sitio web. Sin embargo, se desconocen el autor y la licencia del nuevo logotipo. [ 30 ]
  • El 29 de diciembre de 2023, PyPy anunció que el alojamiento se ha trasladado a GitHub y que el desarrollo ahora se rastreará con git . [ 31 ]

Fondos

PyPy fue financiado por la Unión Europea como un Proyecto de Investigación Específico Dirigido [ 32 ] entre diciembre de 2004 y marzo de 2007. En junio de 2008, PyPy anunció 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 , [ 33 ] 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. [ 34 ] En PyCon US 2011, la Python Software Foundation proporcionó una subvención de 10.000 dólares para que PyPy continuara trabajando en el rendimiento y la compatibilidad con versiones más recientes del lenguaje. [ 35 ] La adaptación a la arquitectura ARM fue patrocinada en parte por la Raspberry Pi Foundation . [ 23 ]

El proyecto PyPy también acepta donaciones a través de las páginas de su blog de estado. [ 36 ] A partir de 2013, varios subproyectos contaban con financiación: compatibilidad con la versión Python 3, soporte integrado optimizado para NumPy para cálculos numéricos y soporte para memoria transaccional de software para permitir un mejor paralelismo. [ 23 ]

Véase también

Notas

  1. "Lanzamiento de PyPy v7.3.23" .
  2. «Entrevista Maciej Fijalkowski PyPy» . 29 de noviembre de 2015.
  3. "Velocidad de PyPy" . speed.pypy.org . Consultado el 1 de diciembre de 2019 .
  4. «PyPy» . 30 de diciembre de 2024.
  5. «Diferencias entre PyPy y CPython — Documentación de PyPy» . 30 de diciembre de 2024.
  6. Samuele Pedroni (marzo de 2007). "PyPy: descripción general de objetivos y arquitectura" . Archivado del original el 14 de junio de 2012.
  7. "PyPy – Objetivos y descripción general de la arquitectura – Declaración de misión" . Consultado el 11 de octubre de 2013 .
  8. Nuestro intérprete de tiempo de ejecución es "RPython" , Guía de codificación – Documentación de PyPy
  9. "Es un subconjunto propio de Python, restringido de una manera que permite un análisis sencillo y una generación de código eficiente", Ancona et al., 2007.
  10. Bolz, Carl; Cuni, Antonio; Fijalkowski, Maciej; Rigo, Armin. Rastreo del nivel meta: compilador JIT de rastreo de PyPy . ICOOOLPS '09. doi : 10.1145/1565824.1565827 .
  11. Entrevista a Timothy Balridge .
  12. "PyPy – Compatibilidad con Python" . pypy.org . 28 de diciembre de 2019. Consultado el 15 de diciembre de 2020 .
  13. "PyPy v7.3.7: versión de corrección de errores de 3.7, 3.8" . pypy.org . 25 de octubre de 2021. Consultado el 10 de noviembre de 2021 .
  14. ^ el equipo PyPy (20 de junio de 2014) . "PyPy3 2.3.1 – Punto de apoyo" . Blog de PyPy.
  15. "PyPy v7.2.0: lanzamiento de las versiones 2.7 y 3.6" . pypy.org . 16 de octubre de 2019.
  16. "PyPy – Compatibilidad con Python" . 28 de diciembre de 2019.
  17. "Ejecutando pilones sobre PyPy" . 10 de junio de 2008.
  18. "Ejecutando Pyglet sobre PyPy" . 20 de febrero de 2008.
  19. "Ejecutando Nevow sobre PyPy" . 20 de junio de 2008.
  20. "PyPy ejecuta Django 1.0 beta sin modificar" . 19 de agosto de 2008.
  21. "Presentación de la versión 1.2 de PyPy" . 30 de abril de 2011.
  22. "PyPy 1.5 lanzado: poniéndose al día" . 12 de marzo de 2010.
  23. 1 2 3 Jake Edge (15 de mayo de 2013). "Una mirada al lanzamiento de PyPy 2.0" . LWN.net .
  24. «PyPy 2.0 – Sándwich Einstein» . 9 de mayo de 2013.
  25. "PyPy2.7 y PyPy3.5 v5.7: dos en una sola versión" . 21 de marzo de 2017.
  26. "Lanzamiento simultáneo de PyPy2.7 y PyPy3.5 v6.0" . 26 de abril de 2018.
  27. 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 .
  28. 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 .
  29. Mattip (24 de diciembre de 2019). "Blog de estado de PyPy: lanzamiento de PyPy v7.3.0" . Blog de estado de PyPy .
  30. "PyPy y CFFI se han trasladado a Heptapod" . 16 de febrero de 2020.
  31. "PyPy se ha trasladado a Git, GitHub" . 29 de diciembre de 2023.
  32. "Entrada al Servicio de Información sobre Investigación y Desarrollo de la Comunidad Europea" .
  33. "Eurostars – Apunta más alto" .
  34. "Página del proyecto en Eureka Network" . Archivado del original el 3 de abril de 2012. Consultado el 17 de octubre de 2011 .
  35. "Un agradecimiento a la PSF" . 22 de marzo de 2011.
  36. "Blog de estado de PyPy: Ah, y por cierto: PyPy recibe financiación a través de "Eurostars"" . 10 de diciembre de 2010.

Referencias

  • Davide Ancona, Massimo Ancona, Antonio Cuni, Nicholas D. Matsakis, 2007. RPython: un paso hacia la conciliación de lenguajes orientados a objetos con tipado dinámico y estático . En Actas del Simposio de Lenguajes Dinámicos (DLS), 2007. ACM Press.
  • Carl Friedrich Bolz, Antonio Cuni, Maciej Fijalkowski, 2009. Rastreo del metanivel: el compilador JIT de rastreo de PyPy . En Actas de 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 "punto óptimo" de rendimiento"" . 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 estadísticas de decisiones. 29 de noviembre de 2015.
  • Sitio web oficialEdita esto en Wikidata