En realidad, esta cuestión parece tener dos partes:¿Cómo implementaría enviar y recibir como Erlang en C++?
- cómo implementar la coincidencia de patrones?
- Cómo implementar send and receive (es decir, el modelo Actor)?
Para la parte de coincidencia de patrón, he estado investigando varios proyectos como App y Prop. Estos se ven muy bien, pero no pudieron hacer que funcionaran en una versión reciente (4.x) de g ++. El lenguaje Felix también parece ser compatible con la coincidencia de patrones bastante bien, pero realmente no es C++.
En cuanto a la Actor model, existen implementaciones existentes como ACT ++ y Theron, pero no pudieron encontrar nada, pero los papeles en el anterior
, y el último es un único subproceso única
[ver respuestas].
Personalmente, he implementado actores que usan subprocesos y una cola de mensajes segura para subprocesos. Los mensajes son estructuras similares a hash y se utilizan junto con varias macros de preprocesador para la coincidencia de patrones simple implementada.
En este momento, se puede utilizar el siguiente código para enviar un mensaje:
(new Message(this))
->set("foo", "bar")
->set("baz", 123)
->send(recipient);
Y lo siguiente que hacer patrón simple juego (qDebug
y qPrintable
son Qt-específico):
receive_and_match(m)
match_key("foo") { qDebug("foo: %s", qPrintable(m->value("foo").toString())); }
or_match_key("baz") { qDebug("baz: %d", m->value("baz").toInt()); }
or_match_ignore
end_receive
Sin embargo, esto parece un poco hackish para mí, y no es muy robusto.
¿Cómo lo harías? ¿Extrañé algún trabajo existente?
Para ser sincero, no tengo ni idea de por qué pensé que Theron tenía un único hilo. Volver a leer el sitio web no me da esa impresión en absoluto. ¡Mis disculpas por la confusión, y creo que sería justo si le diera otra oportunidad a Theron! –
He tenido una experiencia feliz usando la concurrencia de Theron for Actors en los archivos mex de Matlab. – Chinasaur