{"action":"created","issue":{"url":"https://api.github.com/repos/actor-framework/actor-framework/issues/380","labels_url":"https://api.github.com/repos/actor-framework/actor-framework/issues/380/labels{/name}","comments_url":"https://api.github.com/repos/actor-framework/actor-framework/issues/380/comments","events_url":"https://api.github.com/repos/actor-framework/actor-framework/issues/380/events","html_url":"https://github.com/actor-framework/actor-framework/issues/380","id":121477733,"number":380,"title":"Provide a \"dot operator\" for actor handles","user":{"login":"Neverlord","id":651128,"avatar_url":"https://avatars.githubusercontent.com/u/651128?v=3","gravatar_id":"","url":"https://api.github.com/users/Neverlord","html_url":"https://github.com/Neverlord","followers_url":"https://api.github.com/users/Neverlord/followers","following_url":"https://api.github.com/users/Neverlord/following{/other_user}","gists_url":"https://api.github.com/users/Neverlord/gists{/gist_id}","starred_url":"https://api.github.com/users/Neverlord/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Neverlord/subscriptions","organizations_url":"https://api.github.com/users/Neverlord/orgs","repos_url":"https://api.github.com/users/Neverlord/repos","events_url":"https://api.github.com/users/Neverlord/events{/privacy}","received_events_url":"https://api.github.com/users/Neverlord/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/actor-framework/actor-framework/labels/in%20progress","name":"in progress","color":"fbca04"},{"url":"https://api.github.com/repos/actor-framework/actor-framework/labels/task","name":"task","color":"0b02e1"}],"state":"open","locked":false,"assignee":{"login":"Neverlord","id":651128,"avatar_url":"https://avatars.githubusercontent.com/u/651128?v=3","gravatar_id":"","url":"https://api.github.com/users/Neverlord","html_url":"https://github.com/Neverlord","followers_url":"https://api.github.com/users/Neverlord/followers","following_url":"https://api.github.com/users/Neverlord/following{/other_user}","gists_url":"https://api.github.com/users/Neverlord/gists{/gist_id}","starred_url":"https://api.github.com/users/Neverlord/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Neverlord/subscriptions","organizations_url":"https://api.github.com/users/Neverlord/orgs","repos_url":"https://api.github.com/users/Neverlord/repos","events_url":"https://api.github.com/users/Neverlord/events{/privacy}","received_events_url":"https://api.github.com/users/Neverlord/received_events","type":"User","site_admin":false},"milestone":{"url":"https://api.github.com/repos/actor-framework/actor-framework/milestones/3","html_url":"https://github.com/actor-framework/actor-framework/milestones/Version%200.15","labels_url":"https://api.github.com/repos/actor-framework/actor-framework/milestones/3/labels","id":1383466,"number":3,"title":"Version 0.15","description":"This release will:\r\n\r\n- Replace \"implicit environment\" via singletons with a configurable `actor_system` class, see [mailing list discussion](https://groups.google.com/forum/#!topic/actor-framework/XjkOyHTa588)\r\n- Rename `sync_send` to `request` and streamline semantics and API, see [GitHub issue 367](https://github.com/actor-framework/actor-framework/issues/367)","creator":{"login":"Neverlord","id":651128,"avatar_url":"https://avatars.githubusercontent.com/u/651128?v=3","gravatar_id":"","url":"https://api.github.com/users/Neverlord","html_url":"https://github.com/Neverlord","followers_url":"https://api.github.com/users/Neverlord/followers","following_url":"https://api.github.com/users/Neverlord/following{/other_user}","gists_url":"https://api.github.com/users/Neverlord/gists{/gist_id}","starred_url":"https://api.github.com/users/Neverlord/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Neverlord/subscriptions","organizations_url":"https://api.github.com/users/Neverlord/orgs","repos_url":"https://api.github.com/users/Neverlord/repos","events_url":"https://api.github.com/users/Neverlord/events{/privacy}","received_events_url":"https://api.github.com/users/Neverlord/received_events","type":"User","site_admin":false},"open_issues":10,"closed_issues":1,"state":"open","created_at":"2015-10-29T13:51:48Z","updated_at":"2015-12-10T13:10:03Z","due_on":null,"closed_at":null},"comments":2,"created_at":"2015-12-10T12:58:30Z","updated_at":"2016-01-03T23:28:50Z","closed_at":null,"body":"Combining two actors handles using \"dot operator\" semantics is an important building block for building pipelines of actors. The current proposal is to use `operator*`, since `operator.` cannot be overloaded in C++ and `operator|` is reserved for UNIX-like pipelining in future CAF releases."},"comment":{"url":"https://api.github.com/repos/actor-framework/actor-framework/issues/comments/168554304","html_url":"https://github.com/actor-framework/actor-framework/issues/380#issuecomment-168554304","issue_url":"https://api.github.com/repos/actor-framework/actor-framework/issues/380","id":168554304,"user":{"login":"Neverlord","id":651128,"avatar_url":"https://avatars.githubusercontent.com/u/651128?v=3","gravatar_id":"","url":"https://api.github.com/users/Neverlord","html_url":"https://github.com/Neverlord","followers_url":"https://api.github.com/users/Neverlord/followers","following_url":"https://api.github.com/users/Neverlord/following{/other_user}","gists_url":"https://api.github.com/users/Neverlord/gists{/gist_id}","starred_url":"https://api.github.com/users/Neverlord/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Neverlord/subscriptions","organizations_url":"https://api.github.com/users/Neverlord/orgs","repos_url":"https://api.github.com/users/Neverlord/repos","events_url":"https://api.github.com/users/Neverlord/events{/privacy}","received_events_url":"https://api.github.com/users/Neverlord/received_events","type":"User","site_admin":false},"created_at":"2016-01-03T23:28:50Z","updated_at":"2016-01-03T23:28:50Z","body":"> Currently, a composed actor is impersonating the identify of its first constituent. I don't quite understand this design. Maybe, it's because composed_actor is intended to be an actor decorator. If so, then I don't think it should be intended as such. Impersonations like this could lead to confusions when the lifetime of a composed actor does not match that of the impersonated actor, i.e., the first constituent. Specifically, a composed actor exits when either constituent exits or it could be exited all alone, independent of its constituents. Because of this, it is appropriate to give a composed actor its own identify.\r\n\r\nIn the first draft of this feature, composed actors used to have their own identity. The reason I changed it to the current behavior is twofold. First, the composed actor really is a decorator for `g`. You send `g` a message that says the response goes to `f` (which in turn will respond to the original sender). The fact that `h`  is internally linked to both `f` and `g` is merely an optimization. Second, identical compositions should compare equal, i.e., `h = f*g ^ j = f*g => h = j`. I don't see a way to ensure that each composition gets the same actor ID assigned. Comparing actors should remain a lightweight operation that keeps a total order.\r\n\r\nI agree that `(f*g) != f && (f*g) == g` looks strange. Further, one couldn't store `h` and `g` in a map, even though sending a message to `h` clearly isn't the same as sending a message to `g`. Falling back to the last implementation on the other hand would mean that you could have `g`, `h` and `j` in the same map, whereas `h` and `j` definitely should be considered identical. The same applies to bound actors, btw.\r\n\r\nBy the way, the current implementation actually composes `(f*g) = g(f(x))`, as pointed out by @mavam in chat (on the todo list to be fixed).\r\n\r\n> Also, it seems possible to trim composed_actor by deriving from monitorable_actor instead of local_actor.\r\n\r\nA composed actor has a behavior for handling exit messages. A monitorable actor does not have the `do_become` member function and thus cannot have any behavior.\r\n\r\n> To summarize, we should have composed actors as independent light-weight actors with own identifies.\r\n\r\nHow would you guarantee that identically composed actors are compared equal without imposing a performance hit on the operators `==`, `!=`, `<`, etc. for `actor`? Making this change would also mean the same should apply to bound actors."}}