In the first part of this article, we have discussed the need for concurrency in today's software and how the Erlang VM not only provides the proper tooling and abstractions for writing concurrent software but also for building distributed, fault-tolerant applications. In this second part, we will explore what Elixir brings to the table and its main goals.
We have all been there. Organizing a whole party on your own can be a lot of work. Organizing a party in a group is much more fun but without coordination it becomes a recipe for disaster, as we'd find out on the day of the party that nobody sent the invites because everyone assumed someone else has done so. The tools we use for coordination also affect directly the fun while organizing and the success of the party. Multi-core programming is not much different. Concurrency can be a lot of fun, as long as we have the proper tools available to us. The issue is that, historically, those proper tools were not available in mainstream languages.