Собственно, этот вопрос состоит из двух частей:
- Как реализовать сопоставление шаблонов?
- Как реализовать отправить и получить (т.е. модель Актера)?
Для части соответствия шаблону я изучал различные проекты, такие как App и Prop. Они выглядят довольно красиво, но не могли заставить их работать с последней версией (4.x) g++. Язык Felix также, похоже, хорошо поддерживает сопоставление с образцом, но на самом деле это не С++.
Что касается модели актера, существуют существующие реализации, такие как ACT ++ и Theron, но я не мог найти ничего, кроме документов о предыдущей <забастовке > , а последний только однопоточный [см. ответы].
Лично я реализовал актеров, использующих потоки и потокобезопасную очередь сообщений. Сообщения являются хэш-подобными структурами и используют их вместе с несколькими макросами препроцессора для реализации простого сопоставления шаблонов.
Сейчас я могу использовать следующий код для отправки сообщения:
(new Message(this))
->set("foo", "bar")
->set("baz", 123)
->send(recipient);
И для простого сопоставления шаблонов (qDebug
и qPrintable
) подходят Qt):
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
Однако это выглядит немного хакерским для меня и не очень надежным.
Как бы вы это сделали? Я пропустил любую существующую работу?