3 ms·
Exciting to see that heavy numerical computation might be available to a language running on BEAM. It has always seemed to me like an area that people would poi
by jeremy_k 6y ago
Exciting to see that heavy numerical computation might be available to a language running on BEAM. It has always seemed to me like an area that people would point to where Elixir couldn't stand up to Python.
I've always dreamt that someday you might be able to reach for Elixir and get everything you needed for an entire stack of a company and it seems to be getting closer and closer. The building blocks for a web app have been around with Phoenix and Ecto for quite some time. LiveView was introduced to make more user friendly frontends. GenStage, Flow, and Broadway introduced ways to run data processing pipelines. And now we're seeing the initial steps to potentially have ML capabilities.
- dimitrios1 6y agoI am almost convinced to go all in with the elixir ecosystem. Having been a victim of a similar type of thinking, however, I am not sure this is the best thing to do so I am skeptical. Remember, Java and the JVM essentially have this today: front end frameworks, back end frameworks, data pipelines, big data processing, entire databases, etc. In your opinion, what will make the Elixir flavor of this situation different?
- mgreenleaf 6y agoI think Elixir has the potential of being like the JVM but for functional distributed programming. The JVM is fantastic and I do most of my work on it, but having an entire environment of consistent actors, fault tolerance, hot reloading, etc is a tempting proposition. Especially with the easy interop of languages & functional aspects. I don't think it will surpass the JVM, but I think it has a lot of potential in its own sphere of influence. Especially if the library support & technical contributions keep coming.
- dragosmocrii 6y agoCode elegance and development joy, maybe? I know Java has a mature ecosystem, but I wouldn't touch it with a stick
- deleted 6y ago[deleted]
- dimitrios1 6y agoRight I get that elixir as a language is more enjoyable than Java. The question I wonder if it is wise to go all in on a single platform for the sake of being uniform.
- dragosmocrii 6y agoWhy would it not be wise? Python did it, Java did it, Elixir can do it too. Uniformity is good for productivity, as long as the ecosystem stays healthy & maintained.
- dimitrios1 6y agoWell for example imagine your stack is in Go and enjoy the speed and maintainability and expertise, but you want to use spAcy and all the great data science and ML libs in python. Or imagine you are all in on Java and want to use PyTorch. Or you are struggling finding an api-gateway like solution and want to utilize Zuul. Or you want to use Edge Lambdas on AWS but have to write them in node.js. etc.
- karmakaze 6y agoNot being statically typed could mean that there aren't long compile times for large projects. More importantly, the functional style used with Elixir will likely mean shallow usage patterns that are more composable than the deep layers upon layers of 'architecture' that plagues long lived class-based OO designs.
- jeremy_k 6y agoMy completely biased answer is I haven't written Java since I was a freshman in college (2009) and that was like a few months. I basically know nothing about the ecosystem. I've written Rails professionally for almost 10 years and have been following / playing with Elixir since 2016. While Ruby / Rails are amazing and the ecosystem is well suited getting a project off the ground extremely quickly, I'm just a big Elixir fan and hope to work with it professionally one day. I'll parrot reasoning from some of the sister comments. "having an entire environment of consistent actors, fault tolerance, hot reloading, etc is a tempting proposition." - Very tempting indeed! "Code elegance and development joy, maybe?" - Coming from Ruby / Rails, I agree 100% "Not being statically typed" - Again, I've worked mainly in dynamically typed languages. I've experienced typing in Javascript and wasn't the biggest fan. But don't get me wrong, Rails can be awful when trying to dig multiple objects deep to understand what the data structure of the return value is so its not completely off the hook.
- bcrosby95 6y agoIf you need a library for something in Java, it probably exists. There's several languages on the JVM these days that give you full Java interop - Clojure being my personal choice. I think Elixir's big selling point is getting the BEAM runtime wrapped in a more modern language with more modern tooling. Lots of the positives people list about Elixir are due to BEAM, which you can also get in Erlang.
- gurkendoktor 6y ago> I haven't written Java since I was a freshman in college (2009) and that was like a few months. I basically know nothing about the ecosystem. I was in love with Ruby and hated Java around 2009, but the latter has gotten so much better with IntelliJ IDEA, to the point where I have to admit that working with JavaFX from IntelliJ was likely my most serene programming job ever. To me, the whole ecosystem is only worthwhile because of JetBrains. Robust IDE support for Elixir is probably a must-have requirement for many nowadays. I am really tempted by the design of Elixir and find Java/Go/C++ aesthetically repulsive, but I'll happily forget about that if I can keep my refactoring muscle memory.
- davidw 6y agoI like Erlang and Elixir quite a bit. However, I do think a bit of caution is warranted. With languages like Java, Ruby or Python, you can probably do an ok job at any particular task. Maybe not a great job, but good enough to get something up and running. I think BEAM has some sweet spots where it really is the best, but they're not huge spaces, and it's good to be wary of people jumping into BEAM without solid reasons why. In terms of what it's good at, we very successfully employed Erlang as the command and control language for some semi-embedded system medical devices. The runtime is predictable in terms of performance and memory, and fast enough for a lot of things. Where it wasn't, it's easy enough to talk to C. All the fault-tolerant bits are nice for a system like that where you want it to take note of a failure and restart the subsystem that failed. Lots of good logging, introspection and diagnostic tools exist.
- dudul 6y agoFor what tasks is the BEAM not "good enough to get something up and running"? AFAIK, any modernish language is good enough to get something up and running regardless of the task.
- bcrosby95 6y agoIn my experience the difficulty of using BEAM is directly related to how well your problem fits into the actor+deep copy model of the environment. For certain problems BEAM will be a terrible solution because you're going to spend a lot of time working around this. I also think this is what makes it easily the best choice for other problems that fit this model well. In the middle you will probably have a large number of problems that it's ok-ish at. But not really sure on what the distribution is here.
- acoard 6y ago>For certain problems Can you give an examples? Respectfully, you were asked for tasks and instead gave a description of the category. I can only think of real-time, or real performance limited software (example: rocket guidance software, aviation, etc). With these every modicum of performance per millisecond matters; but these constraints only apply in a few (relatively) small fields of software development.