But since then, the developer experience has improved by leaps and bounds through all these improvements other than the core language. As a professional Elixir developer for the last 4 years, I'm loving it. A few improvements in the last few versions off the top of my head that have been really nice:
* Robust, timezone handling DateTime support in the standard library. I don't need Timex anymore!
* Finally a good approach for configuring applications ar run time (e.g. with ENV vars), that works for dev, test, prod and releases, via config/runtime.exs.
* Better compiler warnings verging on a little "light" type checking
* Mix.install in this release finally makes Elixir work well for one-off little scripts, since you can just throw a Mix.install([:jason, :mojito]) on top.
* LiveView is amazing, and I now keep open a LiveBook notebook for doodling in code, exploring an API, CSV, etc
* Not really Elixir, but I'm jazzed about Erlang/OTP 24 JIT support for better performance.
Basically, if you took a look at Elixir a few years ago and thought it wasn't ready, might be worth another peek now.
This is game changing for me (my life is boring). I totally didn't even know this was coming. It's like unexpected Christmas! For folks not in the know, it's been kind of a PITA to have packages loaded in an Elixir repl without a proper project. This should enable a lot more developer tooling to exist too; I'm stoked because I have one tool in particular that's going to be immediately be useful thanks to this change.
I always found I had to do that and found it quite annoying (working through adventofcode with elixir..)
That is like, item one on my list of things I need to be able to handle in a backend web application.
I'm really interested to see how the JIT effects our app. I've seen some reports suggesting that a 20% bump in speed isn't unreasonable to expect.
See this thread in elixirforum https://elixirforum.com/t/absinthe-graphql-performance-issue...
Another popular thread that comes to mind is the one about Discord scaling Elixir (https://news.ycombinator.com/item?id=14748028 and https://news.ycombinator.com/item?id=19238221)
I have also had good results with non-Elixir coders learning it with a bit of coaching, and recruiting is OK these days due to interest of developers for the language.
Having a balanced pros and cons are great for everyone. Not every thread should be praising Elixir else people won't be able to make an informed decision before selecting a language to build their business on.
I'm personally more interested in cons of a tool as opposed to the pros. This way I can assess whether the failure points are within the acceptable parameters or not.
Is there any place to read about this on a more or less basic level? I bet many people will just ask what benefits they may get from this instead of apps build using Go (for example) + rabbitmq
My impression is that some (not all) people had a bad experience partly because they may have reached for Elixir at a period where everything wasn't "settled" (a bit too young). The "first vague of hype" generated some libraries which are now unmaintained (e.g. oauth2), and some parts are still rough (XML, I look at you).
Having upgraded a number of old apps, though, I find that library quality has gone up, the overall developer (and maintainer) experience has improved, and there is a sense of stability which will have a real impact I believe.
There is a need to reach a larger critical mass I believe to really enjoy things in full, but as far as I am concerned, I would be perfectly confident to build my next SaaS on top of it.
I found it to be extremely performant (especially when compared to the built in xmerl) and I like using the SAX technique.
I have been doing elixir for the past ~1yr and from my experience it's the language itself is pretty good, but I really wish it had better tooling, static typing, and more mature libraries for interacting with common tools. Just my own opinion, but I would chose another language for future projects.
most insights there, in relation to leaving, are not about the language but in relation to the environment, e.g available packages, integration with external tools etc. as reasons for the aforementioned departures.
I'm, though, curious if other people have more insights about that, because it is truly impressive :-)
Erlang/the Beam also helps - there are only 112 open Erlang bugs.
For reference Golang has 6843 open GitHub issues. I am not sure what to make of this.
I started following phoenix and a few other important Elixir repos on github several months ago. I'm amazed how many times the community has taken the time to help someone debug why their specific scenario isn't a bug with the library and pointed them to the right solution.
I filed a bug that turned out to be an incorrect dialyzer spec on a library function. Jose fixed it and merged the fix to master within 40 minutes of me filing the bug. It was a small issue, and I had done a reasonable job at bug filing (small test case, pointers to source of problem) but to have that level of discipline and responsiveness on bug fixing is spectacular.
This will be fixed in an update of Erlang.
tap() and then() are fairly minor, but very nice quality-of-life additions.
The work on numerical, livebook, Mix.install etc are healthy steps to take.
Nice work.
But in absence of that this is a huge QoL improvement.
tap though... OMG yes!
Basically, in Elixir pipelines are not very friendly to simple destructuring: if a call at the beginning of the pipeline returns a tuple of `{:ok, result}`, you can't use either of shortcut syntaxes for lambdas (&Mod.fun/arity and &Mod.fun(&1)), you have to use `fn` and destructure in its head. pattern_tap solves this quite elegantly, but I was told that it's a "non-standard macro that people don't know, so it shouldn't be used"... So when I saw `tap` in Kernel, I though that maybe it's similar at least... unfortunately, it's not similar at all, and now the global identifier `tap` is taken, which made the situation even worse :(
Seems a bit weird though that they do not generate images for the same elixir version with different OTP versions.
Currently the latest is elixir v1.12.0-rc.1 and erlang 23.
Since the official Elixir versions aren't pinned to a version of Erlang, we had issues where either Erlang or the distro should change out from under us. But not with the hexpm ones.
edit: so far so good.
It moves kind of fast and you might need to rewatch a few parts, but it demonstrates some of the principals that make Elixir / Erlang so compelling.
If you watch this, imagine what you would need to do as a developer to make this work in your language of choice.
Is that still the case?
Also where does one host Elixir apps these days? Heroku, Vercel or Bare metal?
And I'm biased, but we are a pretty good place to run an Elixir app: https://fly.io/docs/getting-started/elixir/
It really depends on your reference point and what your web servers are doing. The Elixir website has a series of cases and perhaps you can find an example closer to what you are doing: https://elixir-lang.org/cases.html - there are also cases where companies reduced the number of nodes in production once they migrated to Elixir.
Regarding deployments, Heroku, Gigalixir, Fly.io, Droplets, K8s, etc are all viable options.
https://bignerdranch.com/blog/elixir-and-io-lists-part-2-io-...
Whenever I need to upgrade, I perform a rollout, new OTP application instances perform a takeover, once it's done previous pods are taken down.
I'm curious to know what you have heard with more precision, if possible.
I'm serving (https://domovik.app) for a few dozen people on a few dozens MB of RAM. Sure, it's not Google scale, but I really can't complain about memory usage.