After releasing the post ReactiveCocoa vs RxSwift, some people (which I deeply respect) were/are quite unhappy with me. More specially with the tone I used to talk about RxSwift and my bias towards ReactiveCocoa.
I will try to clarify my position regarding this subject, in this post.
Before that, a disclaimer:
- I am currently a core member of the ReactiveCocoa Org.
- I have been using it since mid 2013.
- RAC introduced me to FRP (even when I was in objective-c).
- I tried as much as I could to write a neutral article, but I confess that some sentences, out of the context, can be seen as a bias (and I promptly admit that).
- RAC will always have a special place in my heart. It made me question the way I was working and wonder if there wasn't a better way of doing things.
Now that we got this out of the way, let's begin:
- This is the sort of article, that will always make the author look bad, because it touches one's passion. With this, I am not trying to excuse myself, but things are as they are and one can only wish for the best.
- In the article I mention the parameterized Error in the
SignalProducerin RAC as something good, but I could as well see it as something bad, because it adds complexity. One could argue that I could just say that RAC offers a parameterized Error in the
SignalProducerand leave it like that, but then the usefulness of the article would be small, because one could just check the repository and come to a conclusion (if either it's good or not). The problem is that most people, don't have time for this sort of explorations, so they try to learn as much as they can from the resources they consume. In that specific point and others, I gave my opinion, while trying my best to be fair.
- RxSwift is wonderful and I really mean it. It has done something that for example RAC wasn't able to do: create a vast and rich community around it in such a short time. It doesn't matter how good a 3rd party dependency is: without people using it, it's worth nothing. As ReactiveCocoa member, I have realized this and I am trying my best to get some of that community back to ReactiveCocoa. I am positive about my endeavor, but RxSwift is the one that is pushing it and the one to look at. Of course, one thing is to write it, but another thing is to actually do it. So you can see it here #2795 and here #2833. That work is based on what RxSwift is doing, it didn't come out of my imagination. And I want to fully credit them.
- There was a factual mistake I made in the post (regarding RxSwift), which will be rectified. That mistake, in my opinion, doesn't really change what a person would think about RxSwift, or make him/her choose ReactiveCocoa over it. There might be others, hopefully won't make RxSwift look bad.
- The message/idea I tried to pass at the end of the post, which was really the conclusion of everything I wrote, seemed to be completely disregarded: "it doesn't really matter which one you choose, they are both great!".
Constructive criticism I received:
- When I say to use RAC if you "Want a battle tested framework".
- When I say to use RxSwift if "You are new to FRP and might need some hand-holding.".
- When I say "RxSwift is a one man show".
- When I mix "RxSwift with RxCocoa".
- When I say that with ReactiveCocoa you are able to"better describe your system”.
- Inaccurate dates/version, regarding ReactiveCocoa v3.0 development.
So I will address one by one:
- ReactiveCocoa has been around for more than 3 years, it has +13k stars, 6610 commits, 1499 issues closed, 1221 PR merged and 146 contributors. It's not because ReactiveCocoa is, that RxSwift isn't, this is not a mutually exclusive attribute.
- This is actually a complement, since their Slack group is amazing. I remember when I started playing with it and I had a question, I would immediately get help. Not only by strangers, but by the main contributor as well.
- The reality is that Krunoslav is responsible for 43% of the commits in the RxSwift. Not only that, he is responsible for
141,688 ++ / 110,765 --while the second person is at
5,899 ++ / 2,076 --.. The same could be said about RAC some time ago, but not so much now.
- This is was an honest mistake, but a mistake nevertheless, since RxCocoa is inside the same repo as RxSwift. I should have been careful.
- From the moment you can fix your error type and at a type level differentiate between a Cold from a Hot signal, I think yes: you are able to better describe your system.
- Even tho I was accused of being biased, and now after re-reading the article I admit I could have been in some bits, two people told me they have decided to use RxSwift.
To conclude, I will eventually give RxSwift another spin, not because of the current "social pressure", but because I think Krunoslav Zaher's work at RxSwift is amazing (I love the amb operator!). Not only that, but the community itself is quite active and growing every day.
As for the people that got disappointed/unhappy/angry with/at me, I think they should stop for a second and realize we are talking about: code. We actually have the opportunity and the privilege to "play" with all these things and share with others what we have learned. Instead, we decide to be pissed off at each other, because we don't share the same vision. In my opinion, there are more important things in life than getting angry with another human being for so little.
++ for additions and -- for deletions. ↩︎