Haven't looked at elixir yet, but being an erlang fan and quickly hopping through the source it looks like elixir is doing for erlang essentially what coffeescript does to javascript. Something many non-erlangers have long lamented is the syntax so this looks quite interesting, also adding the running compiler is a nice idea for the macro support :)
Elixir is not really about the syntax, we have great tooling, our own standard library (with proper Unicode support, collections, unified API for dictionaries, etc) and our own approach to some constructs in OTP.
Feel free to ping here if you have any questions. I will make sure to check this thread again later.
On tooling: `Mix` is a great build tool which directly integrates `Hex`, a package manager similar to ruby gems. Additionally, ExUnit is a great built-in unit test library. These tools alone would be a good reason for an erlanger to check out Elixir.
I've been recommending Elixir as the language of choice to all my colleagues. I truly believe it will bring the advantages of OTP architecture to a wider audience of programmers.
Love the language, I've been using it (phoenix) to build a more real-time version of my current rails app. But I have a concern with Elixir core's Enum. In particular, the Enumerable protocol has us implementing Enum.reduce for our own data-types, but Enum.map is written as
is there any chance Elixir's enum core can take a page from Clojure's transducer idea and, instead of implementing map with reduce and [], implement it with transduce and some function that steps?
I've often had the need to map and filter over strings to achieve rails-like features such as #to_url, #classify, #underscore, and #humanize... but being forced to either rewrite Enum functions for strings or constantly peppering in String.split("") and Enum.join("") feels really bad.
It would be possible to have something like `Enum.map |> Enum.into`. You could also do `Stream.map |> Enum.into` if you don't want to traverse it multiple times (similar to Clojure's `into`). In fact:
The reasons we don't have first class support for this though are:
1. There are multiple ways you could traverse a string. By bytes, by codepoints or by graphemes. I don't think we should pick any of those as default. Ruby did that and to this day it is source of confusion (aggravated by the behavior change from 1.8 to 1.9)
2. Modifying strings like this would be horribly inefficient. Using split/join wouldn't be recommended also as you are generating a bunch of intermediate garbage to go from string -> string. The recommended way is to rely on pattern matching and Elixir's bit syntax as the compiler will be able to optimize most cases well.
The separate stdlib one of the easiest parts of Elixir to take for granted but is nonetheless a really nice part about the language. I find Elixir's stdlib to be small and yet it still covers a huge amount of your typical needs when writing Elixir.
Elixir's syntax also gains a wonderfully consistent AST, which enables all manner of meta-programming and macro writing. Sometimes there are practical benefits to syntactical choices beyond the pleasing aesthetics.
I've been reading about Elixir here-and-there for a while and decided to jump into it last week. I really like it. I'm a big fan of FP and, having increasingly found myself falling out with Python, can definitely see this becoming my dynamically typed language of choice.
Would you recommend Elixir for a first FP language? I am familiar with FP from using Python and JavaScript, but I have never used a completely functional language yet. Can I dive into Elixir or should I learn something more "traditional" first such as Haskell, Lisp, etc?
My current feeling [bearing in mind that it's been less than a week!] is that Elixir is to Haskell as Python is to C++. If you want to learn a dynamically typed FP language, then I think Elixir is a fine choice; especially from a JS/Python background, plus all the goodies that come with the Erlang VM. I've read it's also good for metaprogramming, so it ticks the same boxes as Lisp, without having to get used to S-expressions!... It's certainly something you can dive into :)
Then, if you find you're really in to the FP Kool-Aid, I would definitely give Haskell (or OCaml) a try as well. It's a completely different ball game, but even as just a beginner -- I kinda-sorta-understand monads -- I would say that it's already improved my general programming skills.
I would say it's an outstanding choice to learn functional programming. The book is written for someone who knows an imperative language and wants to learn about functional programming.
I personally didn't understand FP at all until I played around with Erlang (specifically, the "Learn You Some Erlang" book). I reckon Elixir would be similarly enlightening (if not more; I feel like Elixir's macros are easier to wield than most Erlang equivalents, for example).
The friendly, consistent syntax and the imperative-ish constructs in some places can work as a great stepping stone into the rest of the functional/declarative programming world.
I'm interested in more than just the use cases (although still curious to hear why someone chose Elixir, whether it be for the language, BEAM, or whatever.) I'm looking for stories of why it was chosen over another language and what the end results were.
Well neither will win any speed races, but if your problem requires soft-realtime functionality, concurrent execution, or incredible fault tolerance you'd do much worse than to choose Elixir/Erlang. And a simpler learning curve than many FP languages (in my experience, at least) sweetens the deal.
http://cvsweb.openbsd.org/cgi-bin/cvsweb/ports/lang/elixir/
So it'll be included in OpenBSD 5.8.