Pregunta

¿Cómo son las personas que utilizan continuaciones en una escala más grande y más pequeño en Scala?

¿Alguno partes de la biblioteca estándar Scala escrito en CPS?

¿Hay importantes reducciones del rendimiento en el uso de las continuaciones?

¿Fue útil?

Solución

Estoy usando esto a su vez funciones asíncronas de forma def func(...)(followup: Result => Unit): Unit de manera que en vez de escribir

foo(args){result1 => 
  bar(result1){result2 => 
     car(result2) {result3 =>
       //etc.
     }
  }
}

puede escribir

val result1 = foo(args)
val result2 = bar(result1)
val result3 = car(result2)

o

car(bar(foo(args)))

(nota: las funciones no se limitan a un argumento o simplemente el uso de los resultados anteriores como argumentos)

http://www.tikalk.com/java/blog/asynchronous- funciones-actores-y-cps

Otros consejos

Scala-ARM (Automatic en recursos gestión) utiliza delimitado continuaciones

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()
    }
  }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top