其實,這個問題似乎有兩個部分:你會如何在C++中實現類似Erlang的發送和接收?
- 如何實現模式匹配?
- 如何實現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
但是,這對我來說看起來有點不好,而且不夠健壯。
你會怎麼做?我錯過任何現有的工作嗎?
說實話,我不知道爲什麼我認爲Theron是單線程的。重新閱讀網站並不能給我那種印象。我爲這種困惑而道歉,我認爲如果我再給塞隆一次,這將是公平的! – 2008-11-03 17:03:02
在Matlab mex文件中使用Theron for Actors併發性獲得了愉快的體驗。 – Chinasaur 2011-09-03 00:36:16