{"action":"created","issue":{"url":"https://api.github.com/repos/zenparsing/es-observable/issues/66","labels_url":"https://api.github.com/repos/zenparsing/es-observable/issues/66/labels{/name}","comments_url":"https://api.github.com/repos/zenparsing/es-observable/issues/66/comments","events_url":"https://api.github.com/repos/zenparsing/es-observable/issues/66/events","html_url":"https://github.com/zenparsing/es-observable/issues/66","id":114395215,"number":66,"title":"Discussion: Multicast vs. Unicast","user":{"login":"bripkens","id":596443,"avatar_url":"https://avatars.githubusercontent.com/u/596443?v=3","gravatar_id":"","url":"https://api.github.com/users/bripkens","html_url":"https://github.com/bripkens","followers_url":"https://api.github.com/users/bripkens/followers","following_url":"https://api.github.com/users/bripkens/following{/other_user}","gists_url":"https://api.github.com/users/bripkens/gists{/gist_id}","starred_url":"https://api.github.com/users/bripkens/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bripkens/subscriptions","organizations_url":"https://api.github.com/users/bripkens/orgs","repos_url":"https://api.github.com/users/bripkens/repos","events_url":"https://api.github.com/users/bripkens/events{/privacy}","received_events_url":"https://api.github.com/users/bripkens/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":71,"created_at":"2015-10-31T07:48:28Z","updated_at":"2015-11-05T15:53:17Z","closed_at":null,"body":"What is your stance on multicast vs. unicast for observables? Well known stream / observable implementations have varying opinions on this topic. RxJS is \"unicast\" by default [1] while Kefir [2] and Bacon [3] are multicast by default. From what I can tell based on the existing es-observable implementation, es-observable is aligned with RxJS and only provides a \"unicast\" option.\r\n\r\nNote that the RxJS' `multicast` operator does not result in the behavior of Kefir and Bacon. Kefir and Bacon retain automatic laziness and multicast enabled for all operators. The RxJS `multicast` operator only lifts the previous operator in the observable chain to a multicast one. Successive operators remain unicast.\r\n\r\nWe found multicast to be *extremely* valuable during the development of our application. We used it to model expensive operations that are executed lazily. Result are shared between all subscribers.\r\n\r\n```javascript\r\nexport const severityDistribution = allReportedIssues.map(issues => {\r\n  // do expensive work here\r\n  return severityDistribution;\r\n});\r\n```\r\n\r\n[1] http://jsbin.com/cidaheqoqa/edit?html,js,console\r\n[2] http://jsbin.com/wuqarebegi/edit?html,js,console\r\n[3] http://jsbin.com/maciradiya/edit?html,js,console\r\n"},"comment":{"url":"https://api.github.com/repos/zenparsing/es-observable/issues/comments/154100578","html_url":"https://github.com/zenparsing/es-observable/issues/66#issuecomment-154100578","issue_url":"https://api.github.com/repos/zenparsing/es-observable/issues/66","id":154100578,"user":{"login":"RangerMauve","id":911495,"avatar_url":"https://avatars.githubusercontent.com/u/911495?v=3","gravatar_id":"","url":"https://api.github.com/users/RangerMauve","html_url":"https://github.com/RangerMauve","followers_url":"https://api.github.com/users/RangerMauve/followers","following_url":"https://api.github.com/users/RangerMauve/following{/other_user}","gists_url":"https://api.github.com/users/RangerMauve/gists{/gist_id}","starred_url":"https://api.github.com/users/RangerMauve/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/RangerMauve/subscriptions","organizations_url":"https://api.github.com/users/RangerMauve/orgs","repos_url":"https://api.github.com/users/RangerMauve/repos","events_url":"https://api.github.com/users/RangerMauve/events{/privacy}","received_events_url":"https://api.github.com/users/RangerMauve/received_events","type":"User","site_admin":false},"created_at":"2015-11-05T15:53:17Z","updated_at":"2015-11-05T15:53:17Z","body":"@domenic \r\n\r\n@blesh Was pointing out that `thennables` and `iterables` are the Interfaces in the same way that `observables` are interfaces."}}