Usi per continuazioni Scala
-
26-09-2019 - |
Domanda
Come sono persone che utilizzano continuazioni su una scala più grande e più piccolo in Scala?
sono delle parti della libreria standard di Scala scritta in CPS?
Ci sono importanti riduzioni di prestazioni nell'utilizzo continuazioni?
Soluzione
Sto usando questo per trasformare le funzioni asincrone della forma def func(...)(followup: Result => Unit): Unit
in modo che invece di scrivere
foo(args){result1 =>
bar(result1){result2 =>
car(result2) {result3 =>
//etc.
}
}
}
è possibile scrivere
val result1 = foo(args)
val result2 = bar(result1)
val result3 = car(result2)
o
car(bar(foo(args)))
(nota: le funzioni non sono limitati a un argomento o semplicemente l'uso dei risultati precedenti come argomenti)
http://www.tikalk.com/java/blog/asynchronous- funzioni-attori-e-cps
Altri suggerimenti
Scala-ARM (Automatic-profilo delle risorse Management) utilizza delimitata continuazioni
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()
}
}
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow