sirve - Coroutines o continuaciones para programación web en Python y Ruby. Por qué no?
python ruby o php (3)
La pregunta es: ¿por qué las continuaciones (en Ruby) y las coroutinas (en Python) no se utilizan más para la programación web?
La programación web del lado del servidor se ve dificultada por el problema de preservar el estado entre las solicitudes. Dos soluciones elegantes y relacionadas con esto son continuaciones (como se encuentran en Scheme, Ruby y Smalltalk) y coroutines (como se encuentran en Python and Go).
Bruce Tate en su Beyond Java (O''Reilly, 2005) habló sobre Ruby on Rails y Seaside como nuevos desarrollos emocionantes en la programación web. Para mí, Seaside fue el verdadero avance: al usar continuaciones de Smalltalk, Seaside hizo que la programación de secuencias complejas de solicitud / respuesta fuera muy fácil.
Sé que Python coroutines se usa en Tornado y Twisted para reducir las devoluciones de llamadas, pero eso es algo de bajo nivel, en comparación con escribir una vista / controlador en una sola coroutine para manejar una secuencia de solicitudes HTTP para completar una compra en línea, por ejemplo.
Me pregunto por qué estas ideas que se ven tan bien en el papel no se implementan más ampliamente en Python y Ruby. ¿Es solo un asunto cultural? ¿Limitaciones en las instalaciones implementadas en estos idiomas? ¿O hay una falla fundamental en estos enfoques en el contexto del desarrollo web?
He utilizado Seaside y las continuaciones son un hermoso modelo para desarrollar aplicaciones web de servidor cliente. Simplificaron las aplicaciones cliente / servidor tradicionales, por lo que no podía creer por qué ningún otro idioma lo estaba haciendo.
Pero desafortunadamente las aplicaciones web no son lo que solían ser. En lugar de solicitar solo una página, ahora con ajax hay múltiples solicitudes en diferentes momentos. Es por eso que las continuaciones no son tan útiles como solían ser.
Incluso Avi Bryant (el autor original de Seaside) ha dicho que, bajo ajax, facilitar las devoluciones de llamadas (programación dirigida por eventos) es más importante que las continuaciones.
Eche un vistazo a esta discusión de quora para obtener más información: http://www.quora.com/Whats-the-best-continuation-based-web-framework
Principalmente por razones no técnicas. La cantidad de personas que saben Seaside o incluso Smalltalk es pequeña, por lo que no hay un gran número de programadores baratos que puedan ser contratados. Debido a esto, el número de proveedores de servicios que saben cómo instalar y mantener un sistema Seaside también es bajo.
Su aplicación debe estar escrita en el marco de continuación / corroutines, así como también en las bibliotecas de soporte. No es un modelo trivial para entender por principiantes. También hay marcos mucho más fáciles como gevent, que ofrece las mismas posibilidades para hacer hilos verdes y más fácil de usar debido a los parches de los monos.