The Erlang Ecosystem (2018) [video]
youtube.com
youtube.com
https://www.youtube.com/watch?v=JvBT4XBdoUE
discussed here: https://news.ycombinator.com/item?id=20942767
Also are there cases where one is well suited than the other?
The Erlang System is actually an "Application Operating System (AOS)" (Joe Armstrong's definition) and the "Erlang language" is its "native system language". An analogy is writing Python code running on Linux but making a kernel system call through the C language interface. Here Python is your Elixir, Linux is the Erlang AOS(ERTS+BEAM) and the C language interface is the Erlang language interface.
PS: I hope you have watched the two videos i have linked to in this thread, they are well worth your time and answer all your questions.
This is not right. It's more like Java -> Kotlin
> So whether you prefer Elixir or not you have to know Erlang.
Not really. You can get quite far in Elixir without knowing any Erlang.
Eventually you probably should learn to read Erlang docs (but not necessarily code) and maybe you might need to be able to read Erlang code, but this is truly rare.
> It's more like Java -> Kotlin
Not quite true either. If you want to do the analogy of a VM-based language the BEAM is not just a VM like the JVM. It plus the rest of the ERTS is an AOS.
> Not really. You can get quite far in Elixir without knowing any Erlang.
True. But eventually when you do want to go outside of the Elixir ecosystem you need Erlang to access the BEAM facilities.
The point was that Erlang is the "native language" of the "Erlang AOS" and is worth knowing whether you prefer Elixir/whatever on BEAM.
I greatly admire the principles, but in practice, the Erlang platform underdelivers in a modern context, because applications are usually not deployed by hot-swapping, but by rollout on Kubernetes. High availability is achieved by load balancing over horizontal scale-out of pods. Distributed systems today use external systems for state, like databases, keyvalue/caching stores, message queues, etc.
Elixir is a convenient language, like Python, with lots of convenience tools.
But for a long list of reasons, I wouldn't use it for anything other than prototyping/hobby projects.
> But for a long list of reasons, I wouldn't use it for anything other than prototyping/hobby projects.
My position is pragmatic, from a managerial economics perspective, of maximizing value and reducing risk. I suspect that Elixir attracts a fair amount of language enthusiasts, who are somewhat biased when they evaluated the business value of a language choice.
WhatsApp/Discord is a very specific use case, of needing a high number of concurrent users that expect real-time messages when to the same session (e.g. chat/chatroom, "Bob is typing..."). AFAIK, BEAM excels at immutability (lots of reads, like readers in a chatroom) and concurrency (vertical scalability). So those are not appropriate reference use cases for the typical user.
BEAM is notoriously slow, and has been bottom-ranking in Techempower benchmarks. Although that seems to have improved in recent years.
https://www.techempower.com/benchmarks/#hw=ph&test=json§...
I can believe that there are reasons to avoid BEAM in production, but "all the other ecosystems solve the same problems differently" isn't a good reason. One reason to choose the BEAM is because it offers solutions to all of these problems as part of a single coherent ecosystem. Yeah, you'll be confused if you try to take the BEAM and then roll it out on K8S, so maybe just... don't do that?
If you want to compare and contrast BEAM's solutions with the more typical modern suite, that would be more persuasive. Just saying "it's bad because it's different" isn't, because the differences are why people are interested in it.
If you want to design a bespoke solution from scratch, then it could make sense to use a single ecosystem, that avoids the complexity of Kubernetes et al. So it really depends on your use case. If you're designing independent software, like RabbitMQ, it might make sense.
It's not bad, it's just that other solutions are often better.
Apologies.