Me gustaría iniciar un nuevo proyecto de servidor de red en un lenguaje que admita la concurrencia a través de fibras aka coroutines también conocidas como subprocesos de modo de usuario. Determinar cuáles son exactamente mis opciones ha sido extremadamente difícil ya que el término "coroutine" parece usarse de manera bastante vaga para significar una variedad de cosas, y "fiber" se usa casi exclusivamente en referencia a la API de Win32.Lenguajes de script que admiten fibras/coroutines?
Para los fines de esta pregunta, corrutinas/fibras:
- métodos de apoyo que detener la ejecución por produciendo un resultado de la función de llamada desde dentro de una función anidada (es decir arbitrariamente de profundidad en la pila de llamadas desde donde el corrutina/fibra se invoca)
- apoyo transferir el control a otro corrutina arbitraria en su punto de ejecución actual (es decir, el rendimiento a un co-rutina que no llame a su corrutina)
¿Cuáles son mi opción de idioma s? Sé que Ruby 1.9 y Perl (Coro) ambos tienen apoyo, ¿qué más? Cualquier cosa con una invocación madura de un método gc y dinámico es suficiente.
Quiero evaluar todas mis opciones antes de elegir un idioma. No elijo inmediatamente ruby porque el GC puede ser bastante lento con montones grandes y no elijo inmediatamente Perl por su sintaxis relativamente fea. Dicho esto, Perl es el favorito actual. –
Además, ¿sabes si PEP 342 hace que Python regular sea adecuado? send() parece un paso en la dirección correcta, pero no puedo decir si es posible ceder desde lo más profundo de la pila de llamadas. –
@Logan, un generador Python solo puede ceder a quien llama, no a otro lugar arbitrario: para construir un sistema coroutine de todos modos, uno usa una disposición de "trampolín", como se ejemplifica en el Ejemplo 3 en PEP 342. –