What feature would you like to recommend if you share Elixir to a newbie?
Process. Because they are cheap and easy to create. Also would tell them about Genserver, Supervisor and Application
I find the quality of the docs, the docs generator, the compiler, and ExUnit very compelling. Not sure if that counts as “features” of the language but for a newbie, those tools make programming easier so you can focus on the hard part: algorithms.
Then I would ask why them are interested in programming and check if there is a good library/framework to start to do that.
Error isolation. Failure in one process doesn’t cause exit of other processes. So in example of Phoenix where each request is separate process, you do not need to much worry about error handling, as exception in one will not interfere with other requests running at the same time.
I’d say the standard library. Elixir’s lib packs amazing amount of functionalities in a relatively small amount of functions. They are orthogonal, consistent named and have extensive documentation. Bang for the buck wise, there is no comparison.
To a lesser extent, hex.pm is much more usable than the corresponding infrastructure in ruby gems, python pip and npm. This is probably subjective though.
The culture of the community, specifically with regards to minimizing fragmentation. In some ecosystems there are a dozen different web-app frameworks, each with various tradeoffs in design. In Elixir almost all web-app implementation for a several years now refers to Phoenix. This may seem like a negative to those more academically minded and more interested in experimentation, but for getting started a knowledge base concentrated around a single canonical approach makes life much easier.
The first thing that drew me to Elixir was the transparent concurrency and parallelism which makes it very well-suited for data gathering and processing pipelines (basically what I was working on when I discovered Elixir).
All the other things the others enumerated just completely sealed the deal afterwards.
I’ll also point that tools like
mix (Elixir) and
cargo (Rust) are very rare in today’s dev ecosystem. They are both extremely consistent and do a lot. In general, both languages’ tooling is hard to match.
Not really. All new languages are trying to have something like that, Clojure (Leiningen), Scala (
sbt), Elixir, Rust. I think that (almost) everything that come out after Ruby’s Bundler. Zig doesn’t seem to have something like that yet, but I think it is matter of time. Go is the outlier there because it was language designed in Google for Google and all external developers were treated as “annoying issue makers” for a long time.
lol! Doesn’t surprise me.
Zig is pretty good. I love how dedicated the author is to make C/C++ (cross-)compilation easier for everybody else. If I wasn’t already neck-deep in Rust and loving it I’d likely become an expert in Zig.
I gave up on Ruby (and Rails) about 5 years ago now. Perhaps things have changed since 2016 but back then it wasn’t much better than Python’s ungodly abominations and virtualenvs.
Fair enough, I admit ignorance there. I am judging by what people complain about on the net which can also be half-representative about the issues of the tooling in an ecosystem. But I haven’t heard anything about Scala and Clojure so okay.
I was deep neck in Rust, but I came to Elixir anyway. Now I am trying to get back on Rust and at the same time start using Zig, because I think that these two complements each other as C++ (Rust) and C (Zig).
Well, you have no health conditions, I assume.
I only got so much joules per day to spend – but I am working on increasing them (doctors and therapists).
Actually the initial Mix implementation is inspired by Leiningen
Concurrency and fault tolerance.
Approachability is also remarkable.
Whether it is a feature request, or a bug fix, or something that could be improved. Sometimes it takes just hours for things to be fixed.
I would compare concurrency on Elixir with Akka
The other way around: Akka heavily borrows from Erlang’s OTP and both Akka and Orleans don’t have all the guarantees that OTP has.
It’s been a couple of years, but SBT felt way worse than mix for me. At least it’s definitely not a Simple Build Tool
Pattern matching in function signatures - i love it. Since i know this feature, every other language feels limited.
Key distinctive feature in Elixir/Erlang.