Thực ra, câu hỏi này dường như có hai phần:Làm cách nào bạn triển khai Erlang giống như gửi và nhận trong C++?
- Làm cách nào để thực hiện khớp mẫu?
- Cách triển khai send and receive (ví dụ: mô hình diễn viên)?
Đối với phần khớp mẫu, tôi đã xem xét các dự án khác nhau như App và Prop. Chúng trông khá đẹp, nhưng không thể khiến chúng hoạt động trên phiên bản gần đây (4.x) của g ++. Ngôn ngữ Felix cũng dường như hỗ trợ mẫu phù hợp khá tốt, nhưng không thực sự là C++.
Đối với Actor model, có hiện thực hiện như ACT ++ và Theron, nhưng tôi không thể tìm thấy bất cứ điều gì nhưng giấy tờ về cựu
, và sau này là đơn luồng chỉ
[xem câu trả lời].
Cá nhân, tôi đã triển khai các diễn viên sử dụng luồng và hàng đợi tin nhắn an toàn. Các thông báo là các cấu trúc giống như băm và sử dụng chúng cùng với một số macro tiền xử lý để thực hiện khớp mẫu đơn giản.
Ngay bây giờ, tôi có thể sử dụng đoạn mã sau để gửi một thông điệp:
(new Message(this))
->set("foo", "bar")
->set("baz", 123)
->send(recipient);
Và sau đây để làm mô hình đơn giản phù hợp với (qDebug
và qPrintable
là Qt cụ thể):
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
Tuy nhiên, điều này trông hơi khó hiểu với tôi, và không phải là rất mạnh mẽ.
Bạn sẽ làm như thế nào? Tôi đã bỏ lỡ bất kỳ công việc hiện có?
Thành thật mà nói, tôi không biết tại sao tôi đoán Theron là đơn luồng. Đọc lại trang web không cho tôi ấn tượng đó. Lời xin lỗi của tôi cho sự nhầm lẫn, và tôi nghĩ rằng nó sẽ là công bằng nếu tôi cho Theron một shot! –
Đã có một kinh nghiệm hạnh phúc khi sử dụng Theron cho Actors concurrency trong các tệp Matlab mex. – Chinasaur