Una especie de pregunta de novato de programación funcional aquí:
He estado leyendo las transcripciones de algunas de las charlas de Rich Hickey, y en varias de sus más conocidas, recomienda usar colas como una alternativa a que las funciones se llamen entre sí. (Por ejemplo, en diseño, composición y rendimiento y en Simple Made Easy ).
No entiendo esto, en varios aspectos:
¿Está hablando de poner datos en una cola y luego hacer que cada función los use? Entonces, en lugar de que la función A llame a la función B para llevar a cabo su propio cálculo, solo tenemos que la función B abofetea su salida en una cola y luego la función A la toma. O, alternativamente, ¿estamos hablando de poner funciones en una cola y luego aplicarlas sucesivamente a los datos (seguramente no, porque eso implicaría una mutación masiva, ¿verdad? ¿Y también la multiplicación de colas para funciones de arias múltiples, o como árboles o algo así? )
¿Cómo hace eso para simplificar las cosas? Mi intuición sería que esta estrategia crearía más complejidad, porque la cola sería una especie de estado, y luego debe preocuparse "¿y si alguna otra función se coló y puso algunos datos encima de la cola?"
Una respuesta a una pregunta de implementación sobre SO sugiere que la idea es crear un montón de colas diferentes. Entonces cada función pone su salida en su propia cola (??). Pero eso también me confunde, porque si está ejecutando una función una vez, entonces ¿por qué necesita una cola para su salida cuando podría tomar esa salida y darle un nombre como (var, átomo, entrada en una gran tabla hash, lo que sea). Por el contrario, si una función se ejecuta varias veces y pega su salida en una cola, entonces se ha infligido nuevamente el estado y debe preocuparse por el orden en que se llama todo, las funciones posteriores se vuelven menos puras, etc.
Claramente no entiendo el punto aquí. ¿Alguien puede explicar un poco?
Jobobjeto genérico , lo inserta en una cola y hace que uno o más subprocesos de trabajo trabajen en esa cola. El Jobentonces despacha más Jobs en la cola al finalizar. Los valores de retorno se reemplazan por devoluciones de llamada en ese concepto. Es una pesadilla depurar y verificar, ya que carece de una pila de llamadas, y eficiente y flexible por la misma razón.