Hacker News new | ask | show | jobs
by josevalim 5132 days ago
Thanks for the feedback and for following Elixir all this time! I also enjoy Clojure a lot and it really gave me some great ideas that were imported into Elixir. While we have Lisp based implementations on top of the Erlang VM, I don't think clojure-beam can easily see the daylight unless it contains significant departures from Clojure. Unfortunately, extending the Erlang VM is nowhere close to extending the Java VM. :(

The problem with the OO approach is that OO didn't suit well an immutable language. The Erlang VM forces us to keep Erlang's semantics and it has been this way before and after the redesign. There is no way around, believe me, I tried. :)

I agree its current version is a stronger departure from Ruby, but also simpler and more powerful than before (now we have all of Erlang in our hands!). We are exchanging the OO familiarity by a better/tighter integration with Erlang runtime, which will, hopefully, be a good reason for people to try it out. I also believe there are plenty of reasons for Erlang developers to try it out, it is more familiar (which actually helps) and addresses many of Erlang shortcomings (it provides protocols, dynamic records, dynamic function generation via macros, etc). During the next weeks, I will write a document more specific to Erlang developers on how Elixir addresses these shortcomings.

When you give Elixir a try, join us at #elixir-lang, I would love to chat more!

2 comments

> Thanks for the feedback and for following Elixir all this time!

I've been closely following Elixir since it was announced and I should've made it clear that I still think Elixir is a fantastic project

At first I though it would be my doorway into Erlang programming (or Reia, at the time), with the familiar syntax and all, but eventually I learned Erlang and wound up actually enjoying it. Then, an opportunity arose to use Elixir but, because of its early stage (this was right between 0.3 and 0.4), I couldn't deploy it in a production environment, so I ended up choosing Clojure.

So now, between Erlang and Clojure, I can't see where I could justify using Elixir. It's just my personal experience, of course.

> Unfortunately, extending the Erlang VM is nowhere close to extending the Java VM. :(

No need to; one could just adapt ClojureScript to spit out Erlang. It would depend on the JVM and wouldn't support native macros, but it would work ok, I guess.

> The problem with the OO approach is that OO didn't suit well an immutable language.

I think you made a very wise choice when you ditched OO. I'm all for functional & immutable.

> We are exchanging the OO familiarity by a better/tighter integration with Erlang runtime, which will, hopefully, be a good reason for people to try it out.

I understand it might be premature, but I would love to know what kind of projects/developers is Elixir attracting?

> Then, an opportunity arose to use Elixir but, because of its early stage (this was right between 0.3 and 0.4), I couldn't deploy it in a production environment, so I ended up choosing Clojure.

At the time (and still today) I would probably have done the same. We still need a couple more months before we can stamp "Production Ready" in it.

> No need to; one could just adapt ClojureScript to spit out Erlang. It would depend on the JVM and wouldn't support native macros, but it would work ok, I guess.

I guess I can eventually take a look at this as well for fun. :)

> I understand it might be premature, but I would love to know what kind of projects/developers is Elixir attracting?

My background is web development, so expect something in this area in the future. It always amazes me how people like the What's App guys can get 2 million TCP connections in a single Erlang node (source: http://blog.whatsapp.com/index.php/2012/01/1-million-is-so-2...). With web sockets and native clients becoming more and more common, having powerful abstractions around TCP connections seems like a good idea.

I think departing from OOP is good, but I would like to have CLU-style ADT (Abstract Data Types) which is a good fit for Erlang's FP side.
I'm not very familiar with CLU, but isn't that what Elixir's protocols are for (separate the interface from the representation)?