Wanted to make a very slow Ruby on Rails reporting system faster. I already started learning Elixir some months ago and looked for an opportunity to utilize it in real business context. I eventually reduced those Ruby on Rails reports times from 3.5-4.0h to 5-8 minutes. It was a huge success!
Elixir did very naturally fit into such an ETL-like data processing pipeline. I respect it ever since.
C/C++, Java, Ruby, PHP, JS, Golang. Then Elixir and then Rust. I am only sticking to these two lately.
The language and the basic tooling themselves are absolutely excellent. There aren’t many drawbacks to find.
I believe the next phase for Elixir would be to commoditize parts of web dev in general – like having a tool actually analyzing and “understanding” your Phoenix code and allowing you to seamlessly move it around (which goes beyond simple refactorings). That might prove to be impossible however.
Erlang’s BEAM lends itself excellently to anything that needs to work in parallel. Even fantastic languages with dead-serious hardcore (and experienced!) fanbase like Rust still can’t catch up to OTP’s guarantees. They are inching closer, though!
If your project is NOT a CLI program or any sort of a server that needs every last bit of CPU power per watt – then it is very likely good fit for Elixir. We live in a world where CPU cores increase and CPU frequency hasn’t moved for a long time and likely will not anytime soon. Use technologies that utilize all CPU cores.
To me that’s Elixir’s strongest benefit. Its fantastic meta-programming is a close second.
Piping is both easy and makes code readable. Love it, always will.
Reducing compilation times has been a challenge. Analyzing dependency graphs has been getting easier (with Elixir 1.11) but I’d appreciate seeing a tool that can give you direct and immediate insights: “module X seems to depends on 100+ files, extracting this function to another module will help”. A note for future improvement.
Dialyzer and typespecs remain pain in the rear to this day. But I don’t think that will ever change. It’s more likely that Facebook will make statically typed Erlang, or languages like Caramel and Gleam will gain prominence (they are statically typed as well). I don’t think Erlang’s legacy tooling can be expected to change at this point.
More commoditization of, well, anything.
- CLI tools with which you can directly add / remove all needed bits of code for a new functionality in your REST / GraphQL app; you’ll only have to write 10-50 lines of business logic and all plumbing is handled for you.
- Mentioned above: insights about improving compile times.
compatpackage that makes sure that all Elixir projects can use upcoming API like e.g.
Enum.product(coming in Elixir 1.12) even if they are at Elixir 1.6 at the moment.
I am sure I am forgetting at least 5 more but hey, can’t keep them in my head all the time.
I could answer the other questions but this comment is too long already.