On 18.05.2013, at 23:54, Vicente J. Botet Escriba <vicente.botet@wanadoo.fr> wrote:
This is really a lot of good and interesting work on your library.
Moving all the library to the Boost standards would be quite a lot of work however. Replacing some classes by the corresponding Boost ones.
I would see already several Boost libraries in your libcppa library: * Atoms * CowTuples * Dynamically Typed Tuples - type erased tuples * Tuples Pattern matching * Actors
I gave this some thoughts. cow_tuple and any_tuple use the same data representation underneath. In this way, there is no 'conversion' from one to the other. Assigning a cow_tuple to an any_tuple is trivial. To restore the type information, tuple_cast can be used. This cast also allows for wildcards: auto t0 = make_cow_tuple(1, 2, 3, 4); any_tuple t1 = t0; auto opt = tuple_cast<anything, int, int>(t1); if (opt) { auto t2 = *opt; cout << get<0>(t2) // will print 3 << get<1>(t2) // will print 4 << endl; } any_tuple provides the same copy-on-write behavior: auto t0 = make_cow_tuple(1, "hello", "world"); // const char* is implicitly converted to std::string any_tuple t1 = t0; any_tuple t2 = t0; assert(&t1.get_as<int>(0) == &t2.get_as<int>(0)); // same address assert(&get<0>(t0) == &t1.get_as<int>(0)); // same address t1.get_as_mutable<std::string>(2) = "libcppa"; assert(&t1.get_as<int>(0) != &t2.get_as<int>(0)); // no longer the same address assert(&get<0>(t0) != &t1.get_as<int>(0)); // no longer the same address Long story short: cow_tuple and any_tuple are closely related. any_tuple *is* a typed erased cow_tuple. Would it be beneficial to split them into two libraries? Any thoughts on that? Currently, I'm reviewing the tuple classes and evaluate whether boost.serialization/boost::extended_type_info fit the needs of libcppa. On 05.06.2013, at 15:48, Hartmut Kaiser <hartmut.kaiser@gmail.com> wrote:
Just to reiterate, HPX (https://github.com/STEllAR-GROUP/hpx/) is a very similar library exposing actor oriented paradigms to the programmer (amongst other things), just wrapped up into a C++11 compliant interface (future, async, thread, bind, function, tuple, etc.). It's usable with C++03 compliant compilers (I have not tried msvc-9.0, though). While not part of Boost, it strongly adheres to Boost coding guidelines and style and it is maintained by long standing Boost authors.
Hartmut, I can understand that you want to advertise your work, but hpx has nothing to do with actor programming. I saw your presentation at the C++Now conference. hpx offers a future-based API and you are proposing C#'s syntax for async/await (cf. N3564 [1]). [1] http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2013/n3564.pdf Best regards, Dominik