¿Por qué Python no tiene estos?
No estoy seguro de por qué crees que no hay implementaciones de Python que se preocupen por el rendimiento. PyPy , IronPython y Jython son implementaciones de Python de potencia industrial listas para producción que se preocupan por el rendimiento. Pyston es una implementación en desarrollo que se creó específicamente para el rendimiento. Unladen Swallow y Psyco también fueron proyectos para mejorar el rendimiento de Python.
Sin embargo, el hecho de que los usuarios de CPython superen en gran medida la base total de usuarios combinados de todas las otras implementaciones, que Unladen Swallow fue rechazado por la comunidad, que la mayoría de estos proyectos están muertos o tienen dificultades para atraer desarrolladores, debería decirle algo sobre cómo Python La comunidad valora el desempeño.
Esta respuesta es un buen ejemplo de la mentalidad típica de la comunidad Python: en lugar de solucionar los problemas de rendimiento, simplemente preferirían escribir su código no en Python.
He estado mirando PyPy y IronPython, que reclaman ganancias de velocidad. PyPy No entiendo cómo una implementación de Python escrita en Python, un lenguaje interpretado, será más rápida que la implementación de referencia en C.
En primer lugar: no importa en qué idioma esté escrito el compilador. Después de todo, el compilador solo se ejecuta una vez , por lo que incluso si fuera lento, eso no importa: el rendimiento del compilador es irrelevante, lo que es relevante es el rendimiento de la salida del compilador.
En segundo lugar, ya que sólo importa la rapidez con la salida del compilador es, y el compilador está escrito en Python, es decir, el lenguaje que compila, en realidad puede hacer que en sí rápido mediante la compilación de sí mismo.
En tercer lugar, no existe un "lenguaje interpretado". Un lenguaje es un conjunto de reglas y restricciones matemáticas. Es una especificación. Un pedazo de papel. Un idioma no se compila ni se interpreta. Un idioma simplemente es . La compilación y la interpretación son rasgos de una implementación de lenguaje , más precisamente, un compilador o intérprete (¡duh!), No el lenguaje. Cada lenguaje puede ser implementado por un compilador. Cada idioma puede ser implementado por un intérprete. Puede generar mecánicamente un compilador a partir de un intérprete y un intérprete a partir de un compilador.
Pero todo esto realmente no importa, porque PyPy en realidad no está escrito en Python. Está escrito en RPython . RPython consta de dos partes, el lenguaje de programación RPython y el marco RPython.
El lenguaje de programación RPython no es Python. Es un lenguaje de programación diferente. RPython es un lenguaje de programación de tipo estático, aproximadamente en el mismo nivel de abstracción que Java, con aproximadamente el mismo rendimiento que C. RPython es un subconjunto sintáctico y semántico de Python, lo que significa que cada programa RPython es un programa Python válido y puede ser ejecutado por una implementación de Python (aunque generalmente varios órdenes de magnitud más lento, pero esto sigue siendo útil para la depuración porque obtienes acceso a todas las herramientas de Python, y la interpretación comienza de inmediato, mientras que compilar la implementación del lenguaje generalmente demora entre 5 y 10 minutos ), Pero la conversación no es verdadera.
El marco RPython es un marco para escribir implementaciones de lenguaje dinámico de alto rendimiento en el lenguaje de programación RPython. Incluye un recolector de basura, espacio de objetos, protocolo de metaobjetos, objetos, tipos y operaciones predefinidos, etc. Pero la joya de la corona es su capacidad de generar automáticamente un compilador JIT a partir de un intérprete: si implementa un lenguaje en el marco de RPython, solo tiene que escribir un intérprete, el marco de RPython se encarga del JIT.
Hay muchas implementaciones de lenguaje en la plataforma RPython , no solo PyPy.
IronPython, la misma idea pero no veo cómo .NET Framework aumentará la velocidad.
La mayoría de las implementaciones de la CLI ISO, como las diversas variantes .NET de Microsoft o Mono, contienen sofisticados recolectores de basura, optimizadores y compiladores. Lo mismo es cierto para las implementaciones de Jython y Java.
IronPython es un compilador, compila el código fuente de Python en árboles DLR (DLR es Dynamic Language Runtime), que luego se compila en código de bytes CIL, que luego se vuelve a compilar en código máquina nativo.