实际上,这个问题似乎有两个部分:
- 如何实现模式匹配?
- 如何实现发送和接收(即Actor模型)?
对于模式匹配部分,我一直在研究各种项目,例如App和Prop。这些看起来很不错,但无法让它们在 g++ 的最新版本 (4.x) 上工作。Felix语言似乎也很好地支持模式匹配,但并不是真正的 C++ 。
至于Actor 模型,有 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
但是,这对我来说看起来有点骇人听闻,而且不是很健壮。
你会怎么做?我错过了任何现有的工作吗?