Hacker News new | past | comments | ask | show | jobs | submit login

A few (rambling) thoughts, as a long-time Clojure dev who's recently been focusing on Elixir.

The thing I like most about Elixir is the low friction between it and it's host language, Erlang. Erlang is a functional language right from the start, and the BEAM is designed to run a functional language, which means you never hit the weird FP-OO barrier that comes up so commonly in Clojure.

I really think the impedence mismatch between Clojure and the underlying Java implementation is a big, painful problem which is going mostly unacknowledged by the inner-core of the Clojure community. And that makes sense, because they're all (or mostly) "Java Guys" who are already sold on the Java ecosystem and are fine with there being a layer of spindly OO horror in their projects. They don't mind the Java layer poking through in unpleasant ways.

When I bring this up in a congregation of Clojurists I just get "shrug, welp, Clojure is a hosted language", not even an acknowledgement that there may be a problem worth discussing.

For the rest of us, the FP enthusiasts who don't have an emotional or professional attachment to Java, this sucks, because you can't do much in Clojure without also touching Java. As I said at the start of this ramble, Elixir/Erlang don't suffer from this problem, it's FP all the way down. Erlang idioms fit in with Elixir, and vice versa. No friction, no bullshit.

One final point: I think the Elixir team visibly care about ergonomics and good design, much more than the Clojure team seem to. Look at `mix` and compare it to `leiningen`, honestly. Look at Plug and Phoenix and compare to something like Luminus in Clojure-land. The difference is night-and-day. Look at how fast the `iex` repl boots up, or how fast the stop-compile-start workflow is in a Phoenix app. Even look at the content of the languages respective homepages (http://elixir-lang.org and http://clojure.org)




> When I bring this up in a congregation of Clojurists I just get "shrug, welp, Clojure is a hosted language", not even an acknowledgement that there may be a problem worth discussing.

I'm not quite sure what you are expecting. It is a tradeoff they explicitly made.

I've yet to see another platform come close to rivalling the JVM ecosystem. It is a powerhouse.

I think it's a great tradeoff. From a team and organisational productivity point of view unless you are based on either the JVM, the CLR, or have fantastic c/c++ interop you are dead in the water.


According to these rankings JavaScript is the most popular language, and it's not based on the JVM/CLR, and it doesn't have great c/c++ interop. Other compile-to-JS languages like Typescript, Elm, and Idris are in the same boat.

Elixir made some solid gains this quarter, and it's based on the BEAM VM, so not JVM/CLR, and not great c/c++ interop. It has great concurrency support, and is widely regarded as being rock-solid.

Haskell fell one spot, but it's still in the top 20, and it's not based on the JVM/CLR, and doesn't have great c/c++ support. The library support is similar to the situation in Python 3, and I've written plenty of performance sensitive Haskell code that's within 2x the speed of c.

It's a big world out there, and there are so many great languages. The JVM/CLR definitely provide a nice head-start, but they're not the only way to build a good language.


Small correction : there is a good (not stellar but good) interop with C/Rust/c++ on the Beam.

NIFs work quite well even if htey have quirks and are limited. And with ports and Dirty Schedulers, you have other solutions for more complex and longer things.

Not perfect, but there is a good story here.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: