Últimamente he estado jugando con los resúmenes , principalmente del clásico artículo de Abramsky Retracing Some Paths in Process Algebra . Son bastante hábiles (básicamente soluciones a la ecuación de dominio ), y recuerdan mucho a las redes de Kahn.
Por supuesto, esta observación no es original para mí: forman una categoría monoidal rastreada, y Abramsky y Jagadeesan utilizaron este hecho para dar semántica a la lógica lineal. En cualquier caso, tenga en cuenta que si alimenta una reanudación una entrada de tipo I , obtiene una salida de tipo O y una reanudación actualizada r ' , que es lo que le permite modelar el hecho de que un nodo de flujo de datos puede cambiar a medida que ve entradas Adelante.
Como resultado, parece que podrían dar una buena API para construir transductores de E / S en un lenguaje de orden superior como ML o Haskell, pero parece que no puedo encontrar ningún documento que describa tal cosa. Pero han existido durante décadas, y Gordon Plotkin los inventó, por lo que no es que hayan languidecido en la oscuridad. Entonces me preguntaba si alguien los había visto ponerlos a tal uso.
fuente
Respuestas:
Esto se parece mucho a la API de E / S descrita por Felleisen et al en A Functional I / O System (o Fun for Freshman Kids) . Básicamente, usted escribe (en la configuración más simple, no distribuida), una serie de controladores de eventos, cada uno de los cuales acepta el estado actual y devuelve un estado actualizado. Finalmente, hay un
to-draw
controlador que produce la "salida" para cada estado.Si relanzamos esta API ligeramente, podemos empaquetar los controladores y el estado actual juntos, y cada vez que un controlador devuelve un nuevo estado y un nuevo conjunto de controladores. Podríamos llamar a este paquete de estado y operaciones un "objeto". :) Si luego hacemos que el resultado sea un par de este objeto, y la "salida", entonces tenemos exactamente el tipo de reanudación.
Curiosamente, en el documento, Felleisen et al hacen exactamente esto cuando se mueven a la configuración distribuida: cada operación devuelve un par de estado nuevo y "salida" en forma de mensajes para enviar a los otros participantes en el sistema.
fuente
Acabo de encontrar esta publicación.
Volvamos a principios de la década de 1980. Friedman et al @ Indiana inventaron el concepto de 'motores' en el contexto del Esquema 84 (no del Esquema 48). Un motor es más o menos un elemento de este tipo:
E = Unit x Nats -> E + O
También puede usar I en lugar de Unit y la parte x Nats es opcional. Puede pensar en esto como una forma de reanudación y, dependiendo del contexto, los motores son más prácticos que las reanudaciones.
fuente