4 ms·
I completely agree -- it blows my mind that the BEAM/OTP is not more widely used. It is such a phenomenally well-designed system and it suits modern use cases
by jononomo 3y ago
I completely agree -- it blows my mind that the BEAM/OTP is not more widely used. It is such a phenomenally well-designed system and it suits modern use cases perfectly.
- davidw 3y agoI've been using Erlang for nearly 20 years, on and off, and I think a reason it's not more popular is that it has always felt like a tool that is really good for some things, but maybe not so good for this or that random task. If you pick Python or Ruby or Java, you know you can probably do the thing in question, whatever it is, even if that language isn't the perfect fit for it. As well as the next thing and the thing after that. There's something in your toolbox for it. With Erlang, the toolbox didn't always have that depth. It's gotten better with Elixir on the scene, but there were times when I would wade in and fix upstream bits and pieces with Erlang libs. That very rarely happens to me with Ruby. That said, it is a fantastic system for some problems and I really miss working with it.
- arrowsmith 3y agoCan you elaborate on which problems you think Erlang is really good for, and which ones it's less good for?
- davidw 3y agoI think the closer you hew to the original Ericsson use, the more certain you are that it's going to be a great fit. We used it as the command and control language for these: https://www.icare-world.com/us/product/icare-eidon/ https://www.icare-world.com/us/product/icare-eidon/ * Semi-embedded system that's used as an appliance, not a computer. * Runs in an environment where people mostly don't want to mess with it. Might be days between reboots; might get turned off every night. * Has to be pretty deterministic in terms of memory usage, response times, and so on. * Recovers from something going wrong by going to a known-good state. We didn't actually use any of the distributed aspects of it, but it worked out great for the other stuff.
- masklinn 3y ago> which ones it's less good for? Scripting, string munging, any sort of small task, anything which runs locally (unless it’s changed significantly erlang’s distribution story is the worst).
- el_oni 3y agoIt's incredible for IO. It's not amazing at tight loop CPU intenstive tasks, but elixir and erlang do make it really easy to take something sequential and spread it across all cores (or across a cluster if you're so inclined). It does have good FFI, like rustler for the elixir is great. It makes sure rust panics unroll into elixir exceptions and that takes some of the scariness of writing them. That plus dirty schedulers means you don't have to be a good citizen and can write cpu intensive code in a faster language.
- nologic01 3y agoa platform that would make distributed computing less of challenge would be well placed today with all the data science / ML / DL / AI focus but its not clear if erlang has ever had any ambitions in this space. the main reference that shows up if you search for erlang + hpc is from 2008 https://www.researchgate.net/publication/221211398_High-performance_technical_computing_with_erlang https://www.researchgate.net/publication/221211398_High-perf...
- zambal 3y agoAs far as I know there are no Erlang projects with that ambition, but quite some interesting things are happening in the Elixir eco system: https://github.com/elixir-nx https://github.com/elixir-nx I'm a Elixir and Erlang developer who is just starting to explore ML, but these libraries seem solid and well designed.
- el_oni 3y agoI beleive there is currently a PhD project in collaboration with Jose Valim (Elixir's creator) which is looking at distributed machine learning. There is also the NX project (numerical elixir) which compiles tensors to GPU code making it much faster for those particular usecases. https://github.com/elixir-nx https://github.com/elixir-nx This has things like explorer which is elixir bindings to polars, livebook which is like jupyter notebooks (with enforced execution order thang god), aswell as some machine learning libraries in axon and scholar. There has also been some work with libraries like flow and broadway which allow pipelines to be constructed with the usual syntaxt `step1 |> step2 |> step3` but to be executed across cores (or cluster). I can imagine orgs using a combination of the above tools to do some interested distrubuted data pipelining and ML.