{"id":13572852,"url":"https://github.com/basiliscos/cpp-rotor","last_synced_at":"2025-04-06T02:10:42.541Z","repository":{"id":36018324,"uuid":"195520752","full_name":"basiliscos/cpp-rotor","owner":"basiliscos","description":"Event loop friendly C++ actor micro-framework, supervisable","archived":false,"fork":false,"pushed_at":"2024-04-22T11:39:19.000Z","size":2335,"stargazers_count":324,"open_issues_count":1,"forks_count":32,"subscribers_count":19,"default_branch":"master","last_synced_at":"2024-04-22T12:54:42.895Z","etag":null,"topics":["actor","actor-framework","asio","boost","cpp17","event-loops"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/basiliscos.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-07-06T09:17:24.000Z","updated_at":"2024-05-01T23:55:06.653Z","dependencies_parsed_at":"2024-01-20T17:47:23.897Z","dependency_job_id":"b1ee2383-18f7-4516-bf7c-636d40d3b82d","html_url":"https://github.com/basiliscos/cpp-rotor","commit_stats":null,"previous_names":[],"tags_count":31,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/basiliscos%2Fcpp-rotor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/basiliscos%2Fcpp-rotor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/basiliscos%2Fcpp-rotor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/basiliscos%2Fcpp-rotor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/basiliscos","download_url":"https://codeload.github.com/basiliscos/cpp-rotor/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247423515,"owners_count":20936626,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["actor","actor-framework","asio","boost","cpp17","event-loops"],"created_at":"2024-08-01T15:00:22.124Z","updated_at":"2025-04-06T02:10:42.517Z","avatar_url":"https://github.com/basiliscos.png","language":"C++","readme":"# Rotor\n\n[reactive]: https://www.reactivemanifesto.org/ \"The Reactive Manifesto\"\n[sobjectizer]: https://github.com/Stiffstream/sobjectizer\n[blog-cpp-supervisors]: https://basiliscos.github.io/blog/2019/08/19/cpp-supervisors/ \"Trees of Supervisors in C++\"\n[reliable]: https://en.wikipedia.org/wiki/Reliability_(computer_networking) \"reliable\"\n[request-response]: https://en.wikipedia.org/wiki/Request%E2%80%93response\n[blog-cpp-req_res]: https://basiliscos.github.io/blog/2019/10/05/request-response-message-exchange-pattern/\n\n`rotor` is event loop friendly C++ actor micro framework,\n    [github](https://github.com/basiliscos/cpp-rotor)\n    [abf](https://abf.io/basiliscos/cpp-rotor)\n    [gitee](https://gitee.com/basiliscos/cpp-rotor)\n\n[telegram](https://t.me/cpp_rotor)\n[![Conan Center](https://img.shields.io/conan/v/rotor)](https://conan.io/center/recipes/rotor)\n[![license](https://img.shields.io/github/license/basiliscos/cpp-rotor.svg)](https://github.com/basiliscos/cpp-rotor/blob/master/LICENSE)\n[![appveyor](https://ci.appveyor.com/api/projects/status/f3a5tnpser7ryj43/branch/master?svg=true)](https://ci.appveyor.com/project/basiliscos/cpp-rotor)\n[![CircleCI](https://circleci.com/gh/basiliscos/cpp-rotor.svg?style=svg)](https://circleci.com/gh/basiliscos/cpp-rotor)\n[![codecov](https://codecov.io/gh/basiliscos/cpp-rotor/branch/master/graph/badge.svg)](https://codecov.io/gh/basiliscos/cpp-rotor)\n[![Codacy Badge](https://app.codacy.com/project/badge/Grade/b9fc6a0fd738473f8fa9084227cd7265)](https://www.codacy.com/manual/basiliscos/cpp-rotor?utm_source=github.com\u0026amp;utm_medium=referral\u0026amp;utm_content=basiliscos/cpp-rotor\u0026amp;utm_campaign=Badge_Grade)\n\n## features\n\n- minimalistic loop agnostic core\n- [erlang-like](https://en.wikipedia.org/wiki/Erlang_(programming_language)#Supervisor_trees) hierarchical supervisors,\nsee [this](https://basiliscos.github.io/blog/2022/02/20/supervising-in-c-how-to-make-your-programs-reliable)\nand [this](https://basiliscos.github.io/blog/2019/08/19/cpp-supervisors/)\n- various event loops supported (wx, boost-asio, ev) or planned (uv, gtk, etc.)\n- asynchronous message passing interface\n- [request-response](https://en.wikipedia.org/wiki/Request%E2%80%93response) messaging with cancellation capabilities,\n[see](https://basiliscos.github.io/blog/2019/10/05/request-response-message-exchange-pattern/)\n- MPMC (multiple producers multiple consumers) messaging, aka pub-sub\n- cross-platform (windows, macosx, linux)\n- inspired by [The Reactive Manifesto](reactive) and [sobjectizer]\n\n## messaging performance\n\n|      inter-thread (1)   | cross-thread (2)       | single thread (3)\n|:-----------------------:|:----------------------:|:---------------------:\n|  ~23.6M messages/second | ~ 2.5M messages/second | ~34.6М messages/second\n\nSetup: Intel Core i7-8550U, Void Linux 5.15.\n\n(1) Backend-independent; Can be measured with `examples/boost-asio/ping-pong-single-simple`, `examples/ev/ping-pong-ev`.\n\n(2) Does not apply to wx-backend; can be measured with  `examples/thread/ping-pong-thread`, \n`examples/boost-asio/ping-pong-2-threads`, `examples/ev/ping-pong-ev-2-threads`.\n\n(3) Backend-independent inter-thread messaging when build with `ROTOR_BUILD_THREAD_UNSAFE=True`. `rotor` objects (messages\nand actors) cannot be accessed from different threads, cross-thread message sending facility cannot be used. This\noption is mainly targeted for single-threaded apps.\n\n## license\n\nMIT\n\n## documentation\n\nPlease read tutorial, design principles and manual [here](https://basiliscos.github.io/cpp-rotor-docs/index.html)\n\n## embedded\n\nLooking for something actor-flavored, but suitable for embedded applications?\nTake a look into my [rotor-light](https://notabug.org/basiliscos/cpp-rotor-light)\nproject.\n\n## Changelog\n\n### 0.34 (25-Mar-2025)\n - [feature] improve c++20 support\n - [workaround, fltk] more realiable message delivery for fltk backend. Fltk\nmight \"forget\" to invoke scheduled `awakes` after shutdown process, which leads\nto minor memory leaks\n - [cmake, breaking] use `CMAKE_CURRENT_SOURCE_DIR` instead of `CMAKE_SOURCE_DIR`\n - [cmake, breaking] configure option renamed `BUILD_BOOST_ASIO` =\u003e `ROTOR_BUILD_ASIO`\n - [cmake, breaking] configure option renamed `BUILD_WX` =\u003e `ROTOR_BUILD_WX`\n - [cmake, breaking] configure option renamed `BUILD_EV` =\u003e `ROTOR_BUILD_EV`\n - [cmake, breaking] configure option renamed `BUILD_FLTK` =\u003e `ROTOR_BUILD_FLTK`\n - [cmake, breaking] configure option renamed `BUILD_THREAD` =\u003e `ROTOR_BUILD_THREAD`\n - [cmake, breaking] configure option renamed `BUILD_DOC` =\u003e `ROTOR_BUILD_DOC`\n - [cmake, breaking] configure option renamed `BUILD_THREAD_UNSAFE` =\u003e `ROTOR_BUILD_THREAD_UNSAFE`\n - [cmake, new] configure option added `ROTOR_BUILD_TESTS` (instead of `ENABLE_TESTING`)\n\n### 0.33 (26-Jan-2025)\n - [cmake, bugfix, win32] add `ws2_32` lib for `rotor_asio` win32 build\n\n### 0.32 (18-Dec-2024)\n- [feature] added `make_routed_message()` free function.\n  The function is used for \"synchronized\" message post-processing, i.e. once a\n  message has been delivered  and processed by all recipients (can be zero),\n  then it is routed to the specifed address to do cleanup.\n\nExample:\n1. an db-actor and opens transaction and reads data (i.e. as `std::string_view`s, owned by db)\n2. actors sends broadcast message to all interesting parties to deserialized data\n3. **after** the step 2 is finished the db-actor closes transaction and releases acquired resources.\n\nThe `make_routed_message` is needed to perform recipient-agnostic 3rd step.\n\nThe alternative is to create a copy (snapshot) of data (i.e. `std::string`\ninstead of `std::string_view`), but that  seems redundant.\n\n - [improvement, breaking] add `void*` parameter to `message_visitor_t`\n\n### 0.31 (18-Oct-2024)\n - [bugfix, fltk] more realiable message delivery for fltk backend\n\n### 0.30 (23-Apr-2024)\n - [feature] added [fltk](https://www.fltk.org/)-backend\n - [feature, conan] `enable_fltk` option which add fltk-support\n - [example] added `/examples/ping-pong-fltk.cpp` and\n`examples/ping-pong-fltk_and_thread.cpp`\n - [bugfix] [wx-backend](https://wxwidgets.org/) building and testing\n - [improvement, breaking] output directories are set to `bin` for cmake\n - [improvement, breaking] `actor_base_t::make_error()` is marked as const\n\n### 0.29 (24-Feb-2024)\n - [bugfix] fix segfault in delivery plugin in debugging mode\n(try to set env `ROTOR_INSPECT_DELIVERY=99` to see)\n\n### 0.28 (22-Jan-2024)\n - [cmake, bugfix] add missing header into installation\n\n### 0.27 (21-Jan-2024)\n - [feature] new interface `message_visitor_t`\n - [feature] new interface `message_stringifier_t` and the default implementation\n`default_stringifier_t` which allows to dump messages. It is not a production but\na diagnostic/debug tool, due to performance restrictions.\n - [feature] `system_context_t` provides a reference to default `message_stringifier_t`;\nit is possible to have a custom one\n - [feature, breaking] `extended_error_t` holds a reference to a request message,\nwhich caused an error\n - [examples, tests, win32] fix `ev` examples and tests\n - [example] modernize `examples/thread/sha512.cpp` to use recent `openssl` version\n - [breaking] cmake requirements are lowered to `3.15`\n - [breaking] fix minor compilation warnings\n\n### 0.26 (08-Jan-2024)\n - [feature] `start_timer` callback not only method, but any invocable\n - [feature, conan] `enable_ev` option which add `libev`\n - [breaking, conan] `boost` minimum version `1.83.0`\n - [testing, conan] remove `catch2` from sources and make it dependencies\n - [bugfix, breaking] make plugins more dll-friendly\n - [breaking] `cmake` minimum version `3.23`\n - [breaking] rename ```registry_t::revese_map_t revese_map``` -\u003e ```registry_t::reverse_map_t reverse_map```\n - [breaking] rename struct ```cancelation_t``` -\u003e ```cancellation_t```\n - [doc] fix multiple typos\n\n### 0.25 (26-Dec-2022)\n - [bugfix] avoid response messages loose their order relative to regular message\n - [bugfix, example] add missing header\n\n### 0.24 (04-Jun-2022)\n - [feature] improve inter-thread messaging performance up to 15% by using `boost::unordered_map`\ninstead of `std::unordered_map`\n - [bugfix, breaking] avoid introducing unnecessary event loops latency by intensive polling of\nrotor queues; affects `asio` and `ev` loops\n - [bugfix] `registry_plugin_t`, allow to discover aliased services (#46)\n\n### 0.23 (23-Apr-2022)\n - [bugfix] fix compilation issues of `messages.cpp` on some platforms\n - [bugfix, msvc] fix compilation issues of `registry` plugin for `shared` library\non msvc-16+\n\n### 0.22 (21-Apr-2022)\n - [feature] possibly to install via [conan center](https://conan.io/center/rotor)\n - [feature, breaking] possibility to build `rotor` as shared library\n - [feature] add shutdown flag checker (see [my blog](https://basiliscos.github.io/blog/2022/04/09/rotor-v022-and-thread-unsafety/))\n - [bugfix] requests do not outlive actors (i.e. they are cancelled on `shutdown_finish`)\n - [example] there is my another open-source project [syncspirit](https://github.com/basiliscos/syncspirit),\nwhich uses `rotor` under hood. I recommend to look at it, if the shipped examples are too-trivial, and\ndon't give you an architectural insight of using `rotor`.\n\n### 0.21 (25-Mar-2022)\n - [improvement] preliminary support of [conan](https://conan.io) package manager\n - [bugfix] fix compilation warnings on Windows/MSVC\n - [bugfix] add missing header for `rotor::thread` installation\n\n### 0.20 (20-Feb-2022)\n - [improvement] superviser can create `spawner`, which has a policy to auto-spawns\nnew actor instance if previous instance has been shutdown. This is similar to\nescalate_failure [supervising in erlang](https://www.erlang.org/doc/design_principles/sup_princ.html),\nsee [dedicated article](https://basiliscos.github.io/blog/2022/02/20/supervising-in-c-how-to-make-your-programs-reliable)\n - [improvement] actor can now `autoshutdown_supervisor()`, when it shutdown\n - [improvement] actor can now `escalate_failure()`, i.e. trigger shutdown own supervisor\nwhen it finished with failure\n - [improvement] messages delivery order is persevered per-locality (see issue #41)\n - [example] `examples/thread/ping-pong-spawner` (new)\n - [example] `examples/autoshutdown` (new)\n - [example] `examples/escalate-failure` (new)\n - [documentation] updated `Design principles`\n - [documentation] updated `Examples`\n - [documentation] updated `Introduction`\n\n### 0.19 (31-Dec-2021)\n - [improvement] performance improvement in inter-thread (+20%) and cross-thread messaging\n - [bugfix] supervisor does not shut self down in rare conditions, when it fails to initialize self\n - [bugfix] link_server plugin should ignore unlink_notifications\n - [bugfix] avoid cycle (i.e. memleak) in rare cases when supervisor is shutdown, but an external\nmessage arrives for processing\n\n### 0.18 (03-Dec-2021)\n- [improvement] add `static_assert` for `noexcept` check of a hanler signature\n- [improvement] add [gitee](https://gitee.com/basiliscos/cpp-rotor) mirror\n- [bugfix] fix potential use-after-free in `ev` backend\n\n\n### 0.17 (23-Oct-2021)\n- [bugfix] fix installation issues with cmake (thanks to @melpon)\n- [bugfix] fix missing header (thanks to @melpon)\n- [ci] drop travis-ci in the sake of circle-ci\n\n\n### 0.16 (22-Aug-2021)\n- [improvement] significant message throughtput increase for `std::thread`, `boost-asio`\nand `ev` backends (upto 5x times)\n- [improvement] `extended_error` can now access to root reason\n- [improvement] delivery plugin in debug mode dumps discovery requests and responses\n- [improvement/breaking] more details on fatal error (`system_context`)\n- [example] `examples/thread/ping-pong-thread.cpp` (new)\n- [example] `examples/ev/ping-pong-ev-2-threads` (new)\n\n### 0.15 (02-Apr-2021)\n - [bugfix] `lifetime_plugin_t` do not unsubscribe from foreign to me subscriptions\n - [bugfix] `foreigners_support_plugin_t` more safely deliver a message for a foreign\nsubscriber (actor)\n\n### 0.14 (20-Feb-2021)\n- the dedicated article with highlights: [en](https://habr.com/en/post/543364/) and\n[ru](https://habr.com/ru/post/543362/)\n - [improvement] actor identity has been introduced. It can be configured or generated via\n`address_maker` plugin\n - [improvement] `actor::do_shutdown()` - optionally takes shutdown reason\n - [improvement/breaking] instead of using `std::error_code` the `extended_error` class\nis used. It wraps `std::error_code`, provides string context and pointer to the next\n`extended_error` cause. This greatly simplifies error tracking of errors. Every response\nnow contains `ee` field instead of `ec`.\n - [improvement] `actor` has shutdown reason (in form of `extended_error` pointer)\n - [improvement] delivery plugin in debug mode it dumps shutdown reason in shutdown trigger\n messages\n - [improvement] actor identity has `on_unlink` method to get it know, when it has been\nunlinked from server actor\n - [improvement] add `resources` plugin for supervisor\n - [breaking] all responses now have `extended_error` pointer instead of `std::error_code`\n - [breaking] `shutdown_request_t` and `shutdown_trigger_t` messages how have\nshutdown reason (in form of `extended_error` pointer)\n - [bugfix] `link_client_plugin_t` do not invoke custom callback, before erasing request\nin case of failure\n - [bugfix] `child_manager_plugin_t` reactivate self if a child was created from other\nplugin.\n - [bugfix] `registry actor` incorrectly resolves postponed requests to wrong addresses\n\n### 0.13 (26-Dec-2020)\n - [improvement] delivery plugin in debug mode dumps discarded messages\n - [breaking] `state_response_t` has been removed\n - [bugfix] allow to acquire \u0026 release resources in via `resources_plugin_t`, during\nother plugin configuration\n - [bugfix] foreigners_support_plugin_t did not deactivated self properly, caused\nassertion fail on supervisor shutdown, when there was foreign subscriptions\n - [bugfix] link_client_plugin_t did not notified linked server-actors, if its actor is\ngoing to shutdown; now server-actors are requested to unlink\n - [bugfix] starter_plugin_t sometimes crashed when subscription confirmation message\narrives when actor is in non-initializing phase (i.e. shutting down)\n - [bugfix] root supervisor is not shutdown properly when it is linked as \"server\"\n\n### 0.12 (08-Dec-2020)\n- [improvement] added `std::thread` backend (supervisor)\n- [bugfix] active timers, if any, are cancelled upon actor shutdown finish\n- [bugfix] supervisor shutdown message is lost in rare cases right after\nchild actor start\n- [example] `examples/thread/sha512.cpp` (new)\n- [documentation] updated `Event loops \u0026 platforms`\n- [documentation] updated `Patterns` with `Blocking I/O multiplexing`\n- [deprecated] state_response_t, state_request_t will be removed in v0.13\n\n\n### 0.11 (20-Nov-2020)\n- [improvement] when supervisor shuts self down due to child init failure,\nthe supervisor init error code is \"failure escalation\"\n- [documentation] updated `Advanced examples`,\n- [bugfix] when actor shuts self down all its timers are properly\ncancelled\n- [bugfix] in rare case supervisor starts, event if child failed to init\n- [bugfix] asio: more correct timers cancellation implementation\n- [bugfix] ev: more correct shutdown (avoid memory leaks in rare cases)\n\n### 0.10 (09-Nov-2020)\n- [improvement/breaking] Generic timers interface\n- [improvement] Request cancellation support\n- [improvement] added `make_response` methods when message should be created, but\nsend later delayed\n- [improvement] more debug information in message delivery plugin\n- [documentation] Integration with event loops\n- [documentation] Requests cancellation and timers are demonstrated in the\n[Advanced Examples](docs/Examples.md) section\n- [example] `examples/boost-asio/ping-pong-timer.cpp` (new)\n- [example] `examples/boost-asio/beast-scrapper.cpp` (updated)\n- [bugfix] avoid double configuration of a plugin in certain cases when interacting\nwith resources plugin\n- [bugfix] more correct cmake installation (thanks to Jorge López Tello, @LtdJorge)\n\n### 0.09 (03-Oct-2020)\n- the dedicated article with highlights: [en](https://habr.com/ru/company/crazypanda/blog/522588/) and\n[ru](https://habr.com/ru/company/crazypanda/blog/522892/)\n- [improvement] rewritten whole documentation\n- [improvement/breaking] plugin system where introduced for actors instead of\nbehaviors\n- [improvement] `actor_config_t` was introduced, which now holds pointer to\nsupervisor, init and shutdown timeouts\n- [improvement] `builder` pattern was introduced to simplify actors construction\n- [breaking] `supervisor_config_t` was changed (inherited from `actor_config_t`)\n- [breaking] `actor_base_t` and `supervisor_t` constructors has changed - now\nappropriate config is taken as single parameter. All descendant classes should\nbe changed\n- [breaking] if a custom config type is used for actors/supervisors, they\nshould define `config_t` inside the class, and templated `config_builder_t`.\n- [breaking] supervisor in actor is now accessible via pointer instead of\nreference\n- [bugfix] `supervisor_ev_t` not always correctly released EV-resources, which\nlead to leak\n- [bugfix] `actor_base_t` can be shutted down properly even if it did not\nstarted yet\n\n\n### 0.08 (12-Apr-2020)\n\n- [bugfix] message's arguments are more correctly forwarded\n- [bugfix] actor's arguments are more correctly forwarded in actor's\ncreation in`rotor::supervisor_t` and `rotor::asio::supervisor_asio_t`\n- [bugfix] `rotor::asio::forwarder_t` now more correctly dispatches\n`boost::asio` events to actor methods; e.g. it works correctly now with\n`async_accept` method of `socket_acceptor`\n\n\n### 0.07 (02-Apr-2020)\n\n- [improvement] more modern cmake usage\n\n\n### 0.06 (09-Nov-2019)\n\n- [improvement] registry actor was added to allow via name/address runtime\nmatching do services discovery\n- [improvement, breaking] minor changes in supervisor behavior: now it\nis considered initialized when all its children confirmed initialization\n- [improvement] `supervisor_policy_t` was introduced to control supervisor\nbehavior on a child-actor startup failure\n- [example] `examples/ev/pong-registry.cpp` how to use registry\n- [doc] patterns/Registry was added\n\n### 0.05 (22-Sep-2019)\n\n- [improvement] response can be inherited from `rotor::arc_base`, to allow\nforwarding requests without copying it (i.e. just intrusive pointer is created)\n- [example] `examples/boost-asio/beast-scrapper.cpp` has been added; it\ndemonstrates an app with pool of actor workers with request-response forwarding\n\n### 0.04 (14-Sep-2019)\n\n- [improvement] the [request-response] approach is integrated to support basic\n[reliable] messaging: response notification failure will be delivered,\nif the expected response will not arrive in-time\n- [improvement] lambda subscribers are supported\n- [improvement] actor behavior has been introduced to offload actor's\ninterface\n- [breaking] supervisor is constructed with help of `supervisor_config_t`,\nwhich contains shutdown timeout value\n- [breaking] supervisor does not spawns timeout timer for overall shutdown\nprocedure, instead per-child timers are spawned. The root supervisor\nthe same way monitors child-supervisor shut down\n- [breaking] supervisor `create_actor` method now takes child max\ninit time value. If it does not confirm, the child actor will be asked\nfor shut down.\n- [breaking] shutdown request sent to an child actor now timeout-tracked\nby supervisor. The message type has changed to `message::shutdown_request_t`\n- [breaking] init request sent to an child actor now timeout-tracked\nby supervisor. The message type has changed to `message::init_request_t`\n- [breaking] actor's state request message type now `message::state_request_t`,\nwhich follows the generic request/response pattern. The response type\nis now `message::state_response_t`.\n- [breaking] {asio, ev, ws} supervisor configs are renamed to have\ncorresponding suffix.\n\n### 0.03 (25-Aug-2019)\n\n - [improvement] locality notion was introduced, which led to possibility\nto build supervising trees, see [blog-cpp-supervisors]\n - [breaking] the `outbound` field in `rotor::supervisor_t` was renamed just to `queue`\n - [breaking] `rotor::address_t` now contains `const void*` locality\n - [breaking] `rotor::asio::supervisor_config_t` now contains\n`std::shared_ptr` to `strand`, instead of creating private strand\nfor each supervisor\n - [bugfix] redundant `do_start()` method in `rotor::supervisor_t` was\nremoved, since supervisor now is able to start self after completing\ninitialization.\n - [bugfix] `rotor::supervisor_t` sends `initialize_actor_t` to self\nto advance own state to `INITIALIZED` via common actor mechanism,\ninstead of changing state directly on early initialization phase\n(`do_initialize`)\n - [bugfix] `rotor::asio::forwarder_t` now more correctly dispatches\nboost::asio events to actor methods\n - [bugfix] `rotor::ev::supervisor_ev_t` properly handles refcounter\n\n### 0.02 (04-Aug-2019)\n\n - Added libev support\n\n### 0.01 (24-Jul-2019)\n\n - Initial version\n","funding_links":[],"categories":["Concurrency","C++","Frameworks, Libraries and Tools"],"sub_categories":["Application Frameworks"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbasiliscos%2Fcpp-rotor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbasiliscos%2Fcpp-rotor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbasiliscos%2Fcpp-rotor/lists"}