Vorrei avviare un nuovo progetto server di rete in un linguaggio che supporti la concorrenza attraverso le fibre coroutine, ovvero i thread in modalità utente. Determinare quali sono esattamente le mie opzioni è stato estremamente difficile in quanto il termine "coroutine" sembra essere usato abbastanza genericamente per indicare una varietà di cose, e "fiber" è usato quasi esclusivamente in riferimento all'API Win32.Linguaggi di scripting che supportano fibre/coroutine?
Ai fini della presente domanda, coroutine/fibre:
- metodi di supporto che interrompono l'esecuzione cedendo seguito alla funzione di chiamata all'interno di una funzione nidificata (cioè arbitrariamente profondità nello stack di chiamate da dove la coroutine/fiber stato richiamato)
- supporto trasferire il controllo a un'altra coroutine arbitraria nel suo punto corrente di esecuzione (cioè resa a un coroutine che non chiamare il coroutine)
quali sono le opzioni lingua S? So che Ruby 1.9 e Perl (Coro) hanno entrambi supporto, cos'altro? Qualche cosa con una gc matura e un'invocazione di metodo dinamica è sufficiente.
Voglio valutare tutte le mie opzioni prima di scegliere una lingua. Non scelgo subito il ruby perché il GC può essere piuttosto lento con grandi heap e non scelgo immediatamente Perl a causa della sua sintassi relativamente sgradevole. Detto questo, Perl è l'attuale capofila. –
Inoltre, sai se PEP 342 rende adatto Python regolare? send() sembra un passo nella giusta direzione, ma non riesco a capire se è possibile cedere dal deep stack di chiamate. –
@Logan, un generatore Python può cedere solo al suo chiamante, non a nessun altro punto arbitrario - per costruire comunque un sistema di coroutine, si usa un arrangiamento "trampolino", come esemplificato nell'Esempio 3 in PEP 342. –