实际上,这个问题似乎有两个部分:
如何实现模式匹配?
如何实现发送和接收(即Actor模型)?
对于模式匹配部分,我一直在研究App和Prop等各种项目.这些看起来很不错,但无法让它们在g ++的最新版本(4.x)上运行.该菲利克斯语言也似乎支持模式匹配得很好,但不是真正的C++.
至于Actor模型,有现有的实现,如ACT ++和Theron,但我找不到任何东西,只有前者的论文,而后者只是单线程 [见答案].
就个人而言,我已经使用线程和线程安全的消息队列实现了actor.消息是类似哈希的结构,并与许多预处理器宏一起使用以实现简单的模式匹配.
现在,我可以使用以下代码发送消息:
(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
然而,这对我来说看起来有些苛刻,而且不是很强大.
你会怎么做?我错过了现有的工作吗?
至于Actor模型,有现有的实现,如ACT ++和Theron,但我找不到任何东西,只有前者的论文,而后者只是单线程.
作为Theron的作者,我很好奇为什么你认为它是单线程的?
就个人而言,我已经使用线程和线程安全的消息队列实现了actor
这就是Theron的实施方式.. :-)
灰