{"action":"created","issue":{"url":"https://api.github.com/repos/ReactiveX/RxPY/issues/89","repository_url":"https://api.github.com/repos/ReactiveX/RxPY","labels_url":"https://api.github.com/repos/ReactiveX/RxPY/issues/89/labels{/name}","comments_url":"https://api.github.com/repos/ReactiveX/RxPY/issues/89/comments","events_url":"https://api.github.com/repos/ReactiveX/RxPY/issues/89/events","html_url":"https://github.com/ReactiveX/RxPY/pull/89","id":150970948,"number":89,"title":"Rename Subject to Stream","user":{"login":"dbrattli","id":849479,"avatar_url":"https://avatars.githubusercontent.com/u/849479?v=3","gravatar_id":"","url":"https://api.github.com/users/dbrattli","html_url":"https://github.com/dbrattli","followers_url":"https://api.github.com/users/dbrattli/followers","following_url":"https://api.github.com/users/dbrattli/following{/other_user}","gists_url":"https://api.github.com/users/dbrattli/gists{/gist_id}","starred_url":"https://api.github.com/users/dbrattli/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dbrattli/subscriptions","organizations_url":"https://api.github.com/users/dbrattli/orgs","repos_url":"https://api.github.com/users/dbrattli/repos","events_url":"https://api.github.com/users/dbrattli/events{/privacy}","received_events_url":"https://api.github.com/users/dbrattli/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/ReactiveX/RxPY/labels/enhancement","name":"enhancement","color":"84b6eb"}],"state":"open","locked":false,"assignee":null,"milestone":{"url":"https://api.github.com/repos/ReactiveX/RxPY/milestones/2","html_url":"https://github.com/ReactiveX/RxPY/milestones/v2.0","labels_url":"https://api.github.com/repos/ReactiveX/RxPY/milestones/2/labels","id":916147,"number":2,"title":"v2.0","description":"","creator":{"login":"dbrattli","id":849479,"avatar_url":"https://avatars.githubusercontent.com/u/849479?v=3","gravatar_id":"","url":"https://api.github.com/users/dbrattli","html_url":"https://github.com/dbrattli","followers_url":"https://api.github.com/users/dbrattli/followers","following_url":"https://api.github.com/users/dbrattli/following{/other_user}","gists_url":"https://api.github.com/users/dbrattli/gists{/gist_id}","starred_url":"https://api.github.com/users/dbrattli/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dbrattli/subscriptions","organizations_url":"https://api.github.com/users/dbrattli/orgs","repos_url":"https://api.github.com/users/dbrattli/repos","events_url":"https://api.github.com/users/dbrattli/events{/privacy}","received_events_url":"https://api.github.com/users/dbrattli/received_events","type":"User","site_admin":false},"open_issues":2,"closed_issues":0,"state":"open","created_at":"2014-12-28T15:34:55Z","updated_at":"2016-04-25T20:52:57Z","due_on":"2016-11-23T23:00:00Z","closed_at":null},"comments":1,"created_at":"2016-04-25T20:23:54Z","updated_at":"2016-04-27T08:38:18Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/ReactiveX/RxPY/pulls/89","html_url":"https://github.com/ReactiveX/RxPY/pull/89","diff_url":"https://github.com/ReactiveX/RxPY/pull/89.diff","patch_url":"https://github.com/ReactiveX/RxPY/pull/89.patch"},"body":"Subjects are confusing for most developers. But they are really just both an observer and an observable. An Observable is a stream producer, and an observer is a stream consumer. A Subject is both a consumer of events and a producer of events, so why don't we call it a Stream? \r\n\r\nMain Rx documentation use the word \"stream\" without telling what it really is:\r\n- Easily create event streams or data streams.\r\n- Compose and transform streams with query-like operators.\r\n- Subscribe to any observable stream to perform side effects.\r\n\r\nBut there are no Stream artifacts in Rx. Streams are just some abstract concept. If we renamed Subject to a Stream, then that would make the on-boarding a lot easier for new developers using Rx.\r\n\r\nThat one should be careful with the use of Subjects is a completely different story. But Python is an imperative programming language, and we do not usually warn developers against using Lists even if they are mutable. Why should we then warn against the use of Subjects?\r\n\r\nLet's call the stream for a Stream!"},"comment":{"url":"https://api.github.com/repos/ReactiveX/RxPY/issues/comments/215011915","html_url":"https://github.com/ReactiveX/RxPY/pull/89#issuecomment-215011915","issue_url":"https://api.github.com/repos/ReactiveX/RxPY/issues/89","id":215011915,"user":{"login":"frederikaalund","id":545423,"avatar_url":"https://avatars.githubusercontent.com/u/545423?v=3","gravatar_id":"","url":"https://api.github.com/users/frederikaalund","html_url":"https://github.com/frederikaalund","followers_url":"https://api.github.com/users/frederikaalund/followers","following_url":"https://api.github.com/users/frederikaalund/following{/other_user}","gists_url":"https://api.github.com/users/frederikaalund/gists{/gist_id}","starred_url":"https://api.github.com/users/frederikaalund/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/frederikaalund/subscriptions","organizations_url":"https://api.github.com/users/frederikaalund/orgs","repos_url":"https://api.github.com/users/frederikaalund/repos","events_url":"https://api.github.com/users/frederikaalund/events{/privacy}","received_events_url":"https://api.github.com/users/frederikaalund/received_events","type":"User","site_admin":false},"created_at":"2016-04-27T08:38:18Z","updated_at":"2016-04-27T08:38:18Z","body":"Indeed, Stream is a more intuitive name than Subject. I completely agree that it is strange that streams are merely concepts and not artifacts in Rx.\r\n\r\nHowever, I do not think renaming Subject to Stream is a good idea. The biggest con is that this change would deviate from the ReactiveX \"specification\" (I know that there is no official spec). Still, the name Subject has become a de-facto standard in all Rx implementations.\r\n\r\nOne of the greatest benefits of Rx is that it is cross-platform. Personally, I use both RxJS and RxPY and I love the fact that the code is almost identical. It makes it easy to port ideas from one language to the other. I know that `bufferWithCount` becomes `buffer_with_count` and vice versa, but that is simple mapping. The same does not go for `Subject` and `Stream` People would at first be confused of this strange new `Stream` artifact. Let's avoid that confusion.\r\n\r\nCase in point: `on_error_resume_next`. This function has a somewhat misleading name. Still, the name sticks because it has become a de-facto standard. The [official Rx documentation](http://reactivex.io/documentation/operators/catch.html) even points this out!\r\n\r\n> This implementation borrows the confusing nomenclature from Rx.NET, in which `onErrorResumeNext` switches to a back-up Observable both on an error *and* on a normal, error-free termination of the source Observable.\r\n\r\nRenaming Subject to Stream is a good idea for a Rx 2.0 \"specification\". Let [them](https://github.com/orgs/ReactiveX/people) know! However, let's keep things standard for the current iteration of Rx.\r\n\r\nCurrently, RxPY is already deviating from the de-facto nomenclature with `catch_exception` which is more commonly known as `catch_error`. If anything, an effort should be made to fix such deviations in milestone 2.0.\r\n\r\nThis is just my personal opinion. Thanks for all your great work on RxPY!"}}