Scala-ARM (-gestion automatique-ressources) utilise délimité continuations
import java.io._
import util.continuations._
import resource._
def each_line_from(r : BufferedReader) : String @suspendable =
shift { k =>
var line = r.readLine
while(line != null) {
k(line)
line = r.readLine
}
}
reset {
val server = managed(new ServerSocket(8007)) !
while(true) {
// This reset is not needed, however the below denotes a "flow" of execution that can be deferred.
// One can envision an asynchronous execuction model that would support the exact same semantics as below.
reset {
val connection = managed(server.accept) !
val output = managed(connection.getOutputStream) !
val input = managed(connection.getInputStream) !
val writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(output)))
val reader = new BufferedReader(new InputStreamReader(input))
writer.println(each_line_from(reader))
writer.flush()
}
}
}
un nit: CPS (style passage de continuation) est quelque chose qui est possible dans une langue qui a ou peut simuler fonctions d'ordre supérieur. Par exemple, lorsque vous passez un objet de rappel à une méthode en Java, c'est en fait un exemple de CPS. Le plugin * des prolongations * de Scala permet d'écrire des structures de contrôle qui ressemblent de manière syntaxique au "style direct" mais qui sont transformées en CPS dans les coulisses. –