2011-02-17 27 views
11

¿Hay algún interés en el desarrollo de la Rpython (Restricted Python)PyPy project como un lenguaje de programación de propósito general? Tal vez podría ser un tenedor del proyecto PyPy. ¿Existe tal proyecto? Dado que los programas están compilados, uno podría simplemente contribuir con módulos escritos en Rpython, y podría competir con otras implementaciones de Python, incluyendo CPython y PyPy.Rpython PyPy como un lenguaje de programación en general

Respuesta

2

Por lo que parece, las restricciones son bastante severas y, en general, es mucho menos programar, supongo. Eso es necesario para implementar PyPy, pero en general, si quiere un código rápido compilado que pueda interactuar con Python, usaría Cython (que está dirigido a las extensiones de CPython y es compatible con casi todo Python sin problemas) o escriba código en uno de los más comunes idiomas que pueden hacer esto. Y si solo quieres un código compilado rápido ... bueno, RPython puede ser más agradable que, por ejemplo, C, pero aun así, no veo una ventaja significativa aquí (al menos ninguna que justifique el esfuerzo de crear un lenguaje estable y utilizable).

2

¿Por qué querría escribir directamente en RPython?

Parece mucho más simple para el código Python y ejecuta PyPy.

¿Por qué querría escribir el código C?

Parece mucho más sencillo escribir Python y han PyPy ser implementado en C

¿Por qué querría escribir código ensamblador?

Parece mucho más simple escribir Python y tener PyPy implementado en C y C implementado en Assembler.

Supongo que realmente es tortugas hasta el final.

¿Por qué querría dejar de usar el idioma más conveniente y cambiar a un idioma menos conveniente?

¿Cuál es el valor de renunciar a un lenguaje agradable?

+0

Los programas compilados de RPython pueden ser mucho más rápidos que Python para ciertas clases de problemas (aquellos con bucles). – highBandWidth

+2

¿No PyPy con un controlador JIT eso para mí? –

+3

Ya no es cierto debido al JIT de PyPy. – fijal

17

No puedo hablar por todos los demás, pero personalmente estoy extremadamente interesado en usar RPython como un lenguaje de propósito general. Para responder las preguntas de otras personas:

¿Por qué? Debido a que Cython es un dolor para descubrir cómo usarlo. Si no hace muchas declaraciones de tipos complicados, no obtendrá ninguna aceleración. Con RPython, se ejecutará rápidamente o no se ejecutará en absoluto.

El uso de PyPy ofrece una buena aceleración, pero actualmente no es tanto como RPython.

RPython puede ser una buena forma de obtener un código superrápido y algo pitónico. Here's an example para ayudarlo a comenzar. No estoy al tanto de ningún gran proyecto para hacer esto, desafortunadamente.

+0

Conectando esto con lo que dicen @fijal y @SLott, sería bueno ver cómo funciona la última versión de pypy con JIT en el ejemplo de los factores. – highBandWidth

+0

Cuando a Cython le cuesta trabajo descifrarlo y le da un código que inexplicablemente no es rápido, RPython es difícil de descifrar y le proporciona un código que inexplicablemente no puede compilar con una excepción inescrutable desde las entrañas del marco de traducción. El código de RPython tampoco es para nada pitónico. Sin embargo, puedes usar Python como un lenguaje de meta-programación para hacer cómputos en tiempo de compilación, ¡lo cual es genial! – Ben

+0

@Ben: Te acostumbras a los horribles mensajes de error. Y, si realmente lees los documentos, no es realmente penoso descubrirlo. Es más una pena acostumbrarse. Solo tienes que cambiar tu cerebro. Ah, y los tipos no primitivos (es decir, las clases personalizadas) parecen poder almacenarse en el mismo contenedor que otro tipo no primitivo. Es esencialmente polimorfismo sin puntero. Ordenado. – refi64

11

Sí, ya hay un proyecto para utilizar la cadena de herramientas de traducción de PyPy para crear ejecutables independientes y bibliotecas utilizando RPython. Se llama RPythonic.

4

Un RPython de propósito general no sería un competidor para CPython y PyPy. Ni siquiera sería un competidor para cosas como Cython.

¿Por qué? Porque RPython no es Python !!RPython es simplemente un lenguaje que comparte cierta sintaxis con Python; suficiente como para que un intérprete de Python pueda ejecutar el código de RPython, , pero no puede tomar el código de Python y compilarlo como RPython.

Las restricciones en Python que se agregan para permitir que RPython se tipifique y compile estáticamente (de hecho, para tener inferencia de tipo estático) son tan severas que cambian por completo el idioma. Si desea escribir un programa RPython, debe decidir hacerlo por adelantado y escribirlo en RPython. No puedes escribir un programa en Python y luego decidir compilarlo como RPython, y ni siquiera puedes modificar un programa de Python realista para convertirlo en RPython. El código de Python normal no se parece en nada al código RPython normal; escribir RPython es más similar a escribir Java o C#.

Así que si quiere escribir programas generales en Python pero quiere que sean más rápidos, RPython tiene muy poco que ofrecerle. Ese es el nicho que el intérprete Python de PyPy está tratando de llenar.

Si desea escribir programas generales en un lenguaje compilado de nivel inferior porque necesita que su programa se ejecute más rápido que Python, existen bibliotecas y lenguajes muy maduros para eso, como Java o C#.

La razón para codificar en RPython sería hacer algo que RPython mejora especialmente. ¡Como escribir intérpretes a los que puedes agregar colectores de basura y compiladores JIT sin tener que escribirlos a mano! Aquí RPython brilla, y sí, estaría muy interesado en un entorno de escritura de intérpretes RPython más pulido y utilizable. Pero como un lenguaje de programación de propósito general para escribir programas que no se benefician particularmente de las especialidades de RPython, simplemente sería una cantidad monstruosa de trabajo llegar al punto en el que podría competir con los idiomas existentes que ya cumplen ese rol mejor. Apenas tiene una biblioteca estándar ahora (porque casi ninguna biblioteca extensiva estándar de Python se puede usar en RPython), por ejemplo.

Cuestiones relacionadas