- embedded systems (network switches, control systems)
- middleware (databases, message brokers)
- generic web services
Why I would use it:
- it has a lot of operational support tools to remotely monitor and debug a running production application built into the runtime.
- it's not necessarily the fastest language, but it's pretty fast for many things. The thing is, if you program in idiomatic erlang from the start, your application will naturally scale well without having to do anything, and will even handle overload gracefully.
- Erlang and Elixir are both well designed and expressive languages with few flaws and intelligently made tradeoffs. It's an enjoyable experience.
- Ecto (data mapping) is fantastic, really glad they separated the SQL part - Oban is fantastic (job processing) - Liveview is really good. (frontend framework that uses websockets to build realtime apps that doesn't require writing JS (uses JS under the hood though)).
Are Elixir and Erlang very similar? Do they belong to the same family?
Clojure : Java :: LFE : Erlang
Knowing Erlang + Scheme and CL, LFE like exactly what I expected, with a strong Erlang vibe. Knowing Java + Scheme and CL, Clojure felt nothing like Java except that it could access Java classes and objects.
I love the opinionated, constrained nature of Erlang and the BEAM, vs the kitchen sink approach of Java and the JVM.
- Web -> Phoenix ( https://www.phoenixframework.org/ )
- Parallel data processing (like scrapers, ETLs, etc...) -> GenStage / Flow / Broadway ( https://hexdocs.pm/gen_stage/GenStage.html )
- IOT -> Nerves ( https://www.nerves-project.org/ )
Soon:
Mobile Apps -> Elixir Desktop ( https://github.com/elixir-desktop/desktop )
ML -> NX ( https://github.com/elixir-nx )
As a huge Erlang fan, I’m not certain I’d say “general purpose computing” is a strength of it though.
From the following:
https://www.erlang.org/faq/introduction.html
1 What is Erlang
1.1 In a nutshell, what is Erlang?
Erlang is a general-purpose programming language and runtime environment.
Erlang has built-in support for concurrency, distribution and fault tolerance.