Elixir v1.4.0 released
github.com
github.com
An example: A large part of the Erlang standard library is not translated in Elixir. Instead, you call Erlang methods with a seamless interop. José & co. understand that there's no need to reinvent the wheel and no benefit in another abstraction. I like that.
My least favorite part about Elixir is that it has become a "trendy" language among the web crowd. While the community is overall great, there's always a loud minority of "beginner experts" both claiming it's the best thing ever and deriding those for using other tools. I've seen a lot of random, unwarranted Rails bashing and Elixir shilling (never from a team member or community leader though!).
I think zealotism has a fine line, but I don't think it's all bad. It's almost like protestors that believe in something strongly. Sometimes they cross the line, but them protesting gains visibility which results in change.
I remember laughing to myself thinking how much more productive I would be than my classmates.
Boy was THAT a rude awakening.
It's incredible how much dhh got right from the start, and I believe the opinionated nature taught a generation of developers how to structure a project. It's unfortunate that ruby stagnated.
I also agree with you regarding Ruby/Rails. Ruby and Rails are both elegant technologies, and have had a significant influence on how we write web applications today. You cannot take those contributions away, regardless of how many "better" languages come out. I think both Ruby and Elixir have their strengths and weaknesses, but that doesn't mean either is bad. Saying so would be like trashing a screwdriver because it isn't very good at driving nails.
But I do like the language and the environment.
If you want to add processes, that could be very hard.
If you also want the supervisors, that's difficult but probably not has much as adding Erlang style processes.
On the off-chance you pulled that name out of a hat, or for the benefit of anyone else who might not realize you are referencing a real project:
While yes the language is nice, I think using something like Opal would provide most of the syntactic pleasantries while being easier to understand when it comes to tuning and debugging.
If what I'm saying is nonsense, I'm missing the point, or short sighted please learn me! :)
Regarding your performance point, I'm skeptical. Is it really so easy to reason about the performance of even plain JS code? Maybe you're more familiar with the deep dark crevices of v8 and spidermonkey than I am, but I find v8 to largely be a black box in terms of fine tuning performance. Of course, the big picture optimization is simple enough, but that wouldn't change whether you are using plain JS, Opal, PureScript, or any other language.
Yes, a BEAM elixir program can run parallel threads and ElixirScript won't be able to do that because in JS, there are no threads. That doesn't make plain JS faster, just means Elixir will be brought down to the same level as plain JS.
I've used what I view to be equally foreign compile to JS languages (ClojureScript, Elm). They of course came with challenges, but fine tuning performance doesn't even make the top 10.
One could imagine a compiler that inserts a yield around the calculation done in each Elixir AST node, and/or one which allows first-class representation of React components as Elixir processes, complete with JSX-like syntax. Very interesting to think about.
[0] https://github.com/acdlite/react-fiber-architecture
EDIT: Should also add that the shared-nothing messaging model translates very well to the requirements for Web Worker interop, so you actually could get multithreading.
Great idea, having to track down a merge conflict that may have been committed can be a drag.
I'd say the compiler or interpreter should tell you within no time where it encountered invalid tokens?
I'm not talking about concurrency, etc. Just raw computational speed.
Add in the supervision tree structure and you end up trading "super fast" for "very fast, consistent and runs forever"
[1] http://www.erlang-factory.com/static/upload/media/1402914329...
Of course, if you want to sponsorise the work...
It's not only about raw computational speed. Being good at concurrency means that you can handle more work, unless you consume too much CPU.
however, if you're using elixir/erlang for something cpu bound you're probably doing something very wrong so this isn't a real world concern for most users
A plus for BEAM is that each process (aka Goroutine) has it's own, independent garbage collector that doesn't interfere with anything else.
The point is, though, you don't use the BEAM for it's raw speed, but for it's great concurrency and fault tolerance. Go has decent concurrency, but it's not all roses and butterflies. Also all data is immutable in Erlang/Elixir which makes concurrency a lot easier.
Just lost interest. I thought Elixir was supposed to learn from Ruby.
Edit: Not a shallow dig, but I had lots of fun using a 3rd party library that had locked down a lot of methods which prevented some sales driven features...
Professionally I've never seen a private function/method that had a purpose or benefit from being private.
As far as benefit of something being private, an API does not have to be maintained if it is private. Once it's out there, you're locked into doing that for the duration of your deprecation window.
What's the largest number of people you've workwe with on a codebase? I would assume the benefits aren't really all that much for small codebases / teams.
In a statically typed language like Java, etc., it also gives you the benefit that when you are auto-completing or discovering methods, you see only the exposed methods you are meant to call as an API user instead of poring over every two-line helper method in the class.
The comparison with Ruby here doesn't make much sense because private means different things in both languages and Elixir does not have inheritance.