python - pypy tutorial
PyPy: ¿De qué se trata todo esto? (5)
Nota: el título es deliberadamente provocativo (para hacer que haga clic en él y quiera votar de cerca la pregunta) y no quiero parecer preocupado.
He estado leyendo y escuchando más y más sobre PyPy . Es como un gráfico lineal.
¿Por qué es tan especial PyPy? Por lo que sé, las implementaciones de lenguajes dinámicos escritos en los lenguajes en sí no son algo tan raro, ¿o no estoy obteniendo algo?
Algunas personas incluso llaman a PyPy "el futuro" [de python], o ven algún tipo de potencial profundo en esta implementación. ¿Cuál es exactamente el significado de esto?
Algo que debe tener en cuenta cuando se habla del proyecto PyPy es que pretende proporcionar dos entregables: el primero es el generador de compiladores JIT . Sí, generador, lo que significa que están implementando un marco para escribir implementaciones de lenguajes de programación altamente dinámicos, como Python. La segunda es la prueba real de este marco, y es la implementación del intérprete de PyPy Python .
Ahora, hay varias respuestas por las que PyPy es tan especial: el desarrollo del proyecto se ejecuta desde 2004, comenzó como un proyecto de investigación en lugar de una empresa, reimplementa Python en Python, implementa un compilador JIT en Python y puede traducir RPython con algunas limitaciones para que el marco pueda traducir ese código a C) a binario compilado.
La versión actual de PyPy es compatible en un 99% con CPython versión 2.5 , y puede ejecutar Django, Twisted y muchos otros programas de Python. Solía haber una limitación de no poder ejecutar las extensiones existentes de CPython C, pero eso también se está abordando con el módulo cpyext en PyPy. La compatibilidad con C API es posible y hasta cierto punto ya está implementada. JIT también es muy real, vea esta comparación de pystone.
Con CPython:
Python 2.5.5 (r255:77872, Apr 21 2010, 08:44:16)
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from test import pystone
>>> pystone.main(1000000)
Pystone(1.1) time for 1000000 passes = 12.28
This machine benchmarks at 81433.2 pystones/second
Con PyPy:
Python 2.5.2 (75632, Jun 28 2010, 14:03:25)
[PyPy 1.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
And now for something completely different: ``A radioactive cat has 18
half-lives.''''
>>>> from test import pystone
>>>> pystone.main(1000000)
Pystone(1.1) time for 1000000 passes = 1.50009
This machine benchmarks at 666625 pystones/second
¡Así que puedes obtener una aceleración de casi 10x simplemente usando PyPy en algunos cálculos !
Entonces, a medida que el proyecto PyPy está madurando lentamente y ofrece algunas ventajas, está atrayendo más interés de las personas que intentan abordar los problemas de velocidad en su código. Una alternativa a PyPy es Swallow Unladden (un proyecto de Google) que apunta a acelerar la implementación de CPython mediante el uso de las capacidades JIT de LLVM, pero el progreso en Swallow Unladden se ralentizó porque el desarrollador necesitaba lidiar con errores en LLVM.
Entonces, para resumir, creo que PyPy es considerado el futuro de Python porque está separando la especificación de lenguaje de la implementación de VM. Características introducidas en, por ejemplo. Python sin pila, podría implementarse en PyPy con muy poco esfuerzo adicional, ya que solo está modificando la especificación del idioma y mantienes el código compartido igual. Menos código, menos errores, menos fusión, menos esfuerzo.
Y al escribir, por ejemplo, una nueva implementación de shell bash en RPython, puede obtener un compilador JIT de forma gratuita y acelerar muchos scripts de shell de Linux sin tener que aprender mucho sobre JIT.
Como la mayoría de nosotros estamos de acuerdo en que es más fácil escribir Python que C, un intérprete de Python que está escrito en Python (bueno, técnicamente RPython) debería poder modificarse mucho más fácilmente y con menos errores que CPython.
Lo bueno de PyPy (además de ser rápido y escrito en RPython (un subconjunto del lenguaje Python), así que básicamente es bootstrapped, es que puede proporcionar un JIT (compilador justo a tiempo) creado automáticamente para cualquier programa que escriba en PyPy: esto lo hace ideal para implementar, rápidamente, su propio idioma y hacer que sea bastante rápido.
Lea más here
Sin mencionar que recientemente superaron la velocidad de CPython en algunos puntos de referencia. Ver su blog, creo. No puedo alcanzarlo desde aquí:
Vamos a verlo de esta manera ... Supongamos que desea implementar su propio lenguaje dinámico y desea hacerlo más rápido. Tienes dos opciones: la forma difícil y la pypy.
La manera difícil es escribir su intérprete en c, y luego implementar un jit a mano, también en c, mediante el uso de una combinación de técnicas muy complicadas como el método jit, threaded-jit, jit de rastreo, caches en línea polimórficos, movimiento invariante de bucle , etc, etc ... Pasé varios años ajustándolos y si perseveras mucho y no te rindes, puedes terminar con una rápida implementación de lenguaje dinámico.
O bien, puede utilizar el marco pypy. Eso significa, escribiendo su intérprete en python en lugar de c (en realidad, sería rpython, un subconjunto más limitado de python que se puede compilar en c). Una vez que escribiste a tu intérprete, pypy generará automáticamente un jit gratis. Y básicamente has terminado.
Suena bien, ¿eh?