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