Flow: lenguaje de programación con concurrencia basada en actores para C++11

Fuentes: Flow

Flow es el lenguaje de programación creado por el equipo de FoundationDB para introducir concurrencia basada en actores en C++11, dentro de los retos de ingeniería que afronta el proyecto: alto rendimiento por nodo, escalabilidad y tolerancia a fallos mediante simulación extensiva. Está implementado como un compilador que analiza funciones asíncronas etiquetadas con la palabra clave ACTOR y las reescribe como objetos con múltiples sub-funciones basadas en callbacks, evitando bloqueos. Su salida es código C++11 estándar que se compila con las herramientas habituales, y además alimenta a la herramienta de simulación determinista de FoundationDB.

Los actores se comunican mediante los tipos Promise y Future, que pueden atravesar la red entre máquinas distintas. Cuando un actor necesita el valor, ejecuta wait() y queda pausado sin bloquear a otros actores. Las variables declaradas con state sobreviven a sucesivas llamadas a wait(), mientras que las locales no. Para flujos de mensajes asíncronos existen PromiseStream y FutureStream, con operaciones como waitNext(), y la construcción choose…when permite esperar varios futuros de forma ordenada.

El artículo incluye un ejemplo de servidor que mantiene un contador mediante peticiones add, subtract y get. Reescribir esta lógica directamente en C++ requeriría un sistema manual de callbacks con gestión de excepciones; Flow la reduce a un código mucho más legible sin perder rendimiento. Para la compatibilidad con IDEs, Flow dispone de un encabezado actorcompiler.h y de un modo especial de CMake (-DOPEN_FOR_IDE=ON) que permite editar el código como C++ normal, aunque los programadores deben respetar reglas distintas a las del C++ estándar.