Skriptsprachen, die Fasern / Korotinen unterstützen?

8

Ich möchte ein neues Netzwerk-Server-Projekt in einer Sprache starten, die Nebenläufigkeit durch Fasern aka Koroutinen aka Benutzermodus-Threads unterstützt. Das Bestimmen, was genau meine Optionen sind, war außerordentlich schwierig, da der Begriff "Coroutine" ziemlich locker verwendet wird, um eine Vielzahl von Dingen zu bedeuten, und "Faser" wird fast ausschließlich in Bezug auf die Win32-API verwendet.

Für die Zwecke dieser Frage, Koroutinen / Fasern:

  • Unterstützungsmethoden, die die Ausführung pausieren, indem sie der aufrufenden Funktion aus einer verschachtelten Funktion ein Ergebnis liefern (d. h. beliebig tief in dem Aufrufstapel, von dem aus die Coroutine / Faser aufgerufen wurde)
  • unterstützt die Übertragung der Kontrolle an eine andere beliebige Coroutine an ihrem aktuellen Ausführungspunkt (d. h. an eine Coroutine, die Ihre Coroutine nicht aufgerufen hat)

Was sind meine Sprachoptionen? Ich weiß, Ruby 1.9 und Perl (Coro) haben beide Unterstützung, was noch? Alles mit einem ausgereiften GC und dynamischen Methodenaufruf ist ausreichend.

    
Logan Bowers 24.12.2009, 02:55
quelle

5 Antworten

6

greenlet Erweiterung erfüllt Ihre Anforderungen in Python (reguläre, nicht Stackless).

Die Greenlet-API ist etwas low-level, daher empfehle ich die Verwendung von gevent , die Ihnen eine für eine Anwendung geeignete API bietet. (Disclaimer: Ich schrieb gevent)

    
Denis Bilenko 02.01.2010 06:25
quelle
4

Lua unterstützt Koroutinen, siehe Ссылка , probiere es aus!

    
Kknd 24.12.2009 03:04
quelle
2

Tcl 8.6 , derzeit in der Beta-Version, wird Coroutinen unterstützen. Für weitere Informationen siehe die Tcl Wiki Coroutinenseite

    
Colin Macleod 03.09.2010 14:38
quelle
1

Stackless Python ist eine weitere Option, die Ihren Anforderungen entspricht. Wenn Python, Ruby und Perl für Ihre Zwecke ungeeignet sind (obwohl Sie alle Ihre Anforderungen erfüllen), haben Sie vermutlich andere unausgesprochene Anforderungen oder Vorlieben - kümmern Sie sich darum, sie zu formulieren? -)

    
Alex Martelli 24.12.2009 02:58
quelle
1

Scheme hat call-with-current-continuation , was ein Baustein ist, auf dem alle Arten von Flusskontrolle aufgebaut werden können. Es kann definitiv die zwei Anwendungen unterstützen, die Sie erwähnt haben.

Es gibt viele robuste, weit verbreitete Implementierungen von Schemes wie PLT Scheme und Chicken Scheme .

    
Greg Hewgill 24.12.2009 03:02
quelle