Pregunta

He estado leyendo recientemente sobre Stackless Python y parece tener muchas ventajas en comparación con vainilla CPython. Tiene todas las características interesantes como recursión infinita, microhilos, continuaciones, etc., y al mismo tiempo es más rápido que CPython (alrededor de 10%, si el Python wiki es que se cree) y compatible con ella (al menos las versiones 2.5, 2.6 y 3.0).

Todas estas miradas casi demasiado bueno para ser verdad. Sin embargo, TANSTAAFL , no veo mucho entusiasmo por Stackless entre la comunidad Python, y PEP 219 nunca ha entrado en la realización. ¿Porqué es eso? ¿Cuáles son los inconvenientes de Stackless? Lo esqueletos se esconden en el armario sin apilado?

(sé Stackless no ofrece concurrencia real, sólo una manera más fácil de programar en la forma concurrente. En realidad, no me molesta.)

¿Fue útil?

Solución

No sé donde que "Stackless es 10% más rápido" en el Wiki viene, pero por otra parte nunca he probado para medir los números de rendimiento. No puedo pensar en lo que Stackless hace para hacer una diferencia tan grande.

Stackless es una excelente herramienta con varios problemas de organización / políticos.

La primera proviene de la historia. Cristiano Tismer empezó a hablar de lo que eventualmente se convirtió en Stackless hace unos 10 años. Él tenía una idea de lo que quería, pero tuvo dificultades para explicar lo que estaba haciendo y por qué la gente debe usarlo. Esto es en parte debido a que su fondo no tienen la formación CS respecto a ideas como co-rutinas y debido a sus presentaciones y discusión son muy orientado a la aplicación, lo cual es difícil para cualquier persona no está ya hip-profunda en las continuaciones de entender cómo usarlo como una solución a sus problemas.

Por esa razón, la documentación inicial era pobre. Hubo algunas descripciones de cómo usarlo, con lo mejor de terceros contribuyentes. En PyCon 2007 di una conferencia sobre "El uso de Stackless ", que se acercó bastante bien, de acuerdo con el PyCon números de la encuesta. Richard Tew ha hecho un gran trabajo recogida de éstos, actualizar stackless.com , y el mantenimiento de la distribución cuando las nuevas versiones de Python aparece. Él es un empleado de CCP Games , los desarrolladores de EVE Online, que utiliza sin apilado como una parte esencial de su sistema de juego.

Los juegos del PCC es también el mayor ejemplo del mundo real la gente usa cuando se habla de Stackless. El tutorial principal de Stackless es Grant Olson de " Introducción a la Programación Concurrente con Stackless Python " , que también se juego orientado. Creo que esto da a la gente una idea sesgada que Stackless se orienta juegos-, cuando es más que los juegos son más fácilmente orientado a continuación.

Otra dificultad ha sido el código fuente. En su forma original que requiere cambios en muchas partes de Python, lo que hizo Guido van Rossum, el plomo Python, cauteloso. Parte de la razón, creo, era su apoyo al llamado / cc que fue retirado más tarde por ser "demasiado parecido a un apoyo Goto cuando hay mejores formas de nivel más alto." No estoy seguro acerca de esta historia, por lo que acaba de leer este párrafo como "Stackless solía requerir demasiados cambios."

Las versiones posteriores no se requieren los cambios, y Tismer continuaron presionando para su inclusión en Python. Si bien hubo cierta consideración, la postura oficial (por lo que yo sé) es que CPython no es sólo una implementación de Python pero se entiende como una implementación de referencia, y no va a incluir la funcionalidad Stackless porque no puede ser implementado por Jython o ironpython.

No hay absolutamente ningún plan para " cambios significativos en la base de código ". Esa cita y referencia de hipervínculo de Arafangion de (ver el comentario) son de aproximadamente 2000/2001. Los cambios estructurales de largo se han hecho, y es lo que he mencionado anteriormente. Sin pérdida de velocidad, ya que es ahora es estable y maduro, con sólo pequeños ajustes a la base de código en los últimos años.

Una limitación final con Stackless - no hay una fuerte defensora de Stackless. Tismer está profundamente involucrado con PyPy , que es una implementación de Python para Python. Se ha implementado la funcionalidad Stackless en PyPy y considera que es muy superior a Stackless sí mismo, y siente que PyPy es el camino del futuro. Tew mantiene Stackless pero él no está interesado en la promoción. Consideré estar en ese papel, pero no podía ver cómo podría hacer un ingreso de ella.

Aunque si quieres formación en Stackless, no dude en contacto conmigo: !)

Otros consejos

tardaron bastante tiempo para encontrar esta discusión. A eso entonces yo no estaba en PyPy pero tenía una relación de 2 años con psyco, hasta que la salud se detuvo todo esto de forma abrupta. Ahora estoy activa de nuevo y el diseño de una enfoque alternativo -. presentará en EuroPython 2012

La mayoría de los estados Andrews son correctas. Algunos adiciones menores:

Stackless fue significativamente más rápido que CPython, hace 10 años, porque optimicé el bucle intérprete. En ese momento, Guido no estaba preparada para eso. Pocos años después, la gente hizo optimizaciones similares e incluso más y mejores, lo que hace que Stackless un poco más lento, como se esperaba.

En la inclusión: así, al principio yo era muy agresivo y convencido de que Stackless es el camino a seguir. Más tarde, cuando casi era posible conseguir ser incluido, he perdido interés en eso y prefirió dejar que se quede esta manera, en parte debido a la frustración, en parte para mantener el control de Stackless.

Los argumentos como "otras implementaciones no pueden hacerlo" sintió siempre cojo para mí, ya que hay otros ejemplos en los que también se podría utilizar este argumento. Pensé que era mejor olvidarse de eso y mantenerse en buena amistad con Guido, tener mi propia distro.

Mientras tanto, las cosas están cambiando de nuevo. Estoy trabajando en PyPy y sin apilado como una extensión a hablar de que a veces más tarde

Saludos - Chris

Si no recuerdo mal, sin apilado fue programado para su inclusión en el CPython oficial, pero el autor de sin apilado dijo a la gente CPython no hacerlo, debido a que pensaba hacer algunos cambios significativos en la base de código - presumeably que quería la integración hecho más tarde, cuando el proyecto era más maduro.

También estoy interesado en las respuestas aquí. He jugado un poco con Stackless y parece que sería una buena adición sólida a Python estándar.

PEP 219 menciona las posibles dificultades con llamar a código Python de código en C, Python, si quiere cambiar a una pila diferente. No tendría que haber maneras de detectar y prevenir esta (para evitar destrozar la pila C). Creo que esto es manejable sin embargo, así que también me pregunto por qué Stackless debe sostenerse por sí mismo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top