MapReduce in Erlang
weblambdazero.blogspot.com
weblambdazero.blogspot.com
If you're a software engineer who works below the UI layer and you don't know Erlang yet, odds are you're cheating yourself and doing a lot more work than you have to for the same distributed effects.
What's also very refreshing about learning Erlang is that it is already very mature and reliability is a feature built into the runtime over years of practical experience. Unlike switching to a language based around convenience or readability (e.g., Ruby and Python respectively), Erlang's implementation is so solid that you can give it the kind of trust you give–say–your C++ compiler (which is not absolute, but definitely higher than you'd assign to the ruby or python interpreters).
If we as software engineers are lucky, Erlang will become as common as C++ is now over the next 10 years.
According to wikipedia, it didn't support scaling to multiple physical CPU/cores until 2006. I'm sure it's reliable. I just think you might be overstating the case here.
But regardless, I fail to see how this implies it's not a reliable platform.
Still, what I was referring to is that the code is very mature and also the process is designed to give you more reliable results. The entire architecture of the libraries and the language itself are built around the notion of fault-tolerance by people who know what that salsa should taste like.
While that doesn't really take away from the article that much, it adds to the rushed feeling and my impression that this guy is not much of an authority on the topic.
There is a pdf released about it from Google here: http://labs.google.com/papers/mapreduce.html
This tells you that Erlang currently has a performance-gap of about 10 in speedup before it begins being viable. The next problem is that not all things are MapReducible. Note that the current problem is trivially parallelizable. Hence it gives you some of the best speedup you might expect in a program. In general, you won't be this lucky.
Erlang is mostly interesting because of its concurrent abilities, not for its abilities with parallel computation.
Speed is something we can work on, eventually everything can be natively and efficiently compiled if there is enough interest. What's more important is its ability to flexibly deploy to a variety of configurations. Your 8-thread piplelined dataflow in Erlang could easily be moved to a 8-machine EC2 deploy, with minimal code modifications. That's far more interesting than an order of magnitude in performance, which could easily be addressed.
ffib(0) -> [0];
ffib(1) -> [0, 1];
ffib(N) when N > 0 -> ffib([1, 1, 0], 2, N).
ffib(R, N, N) -> lists:reverse(R);
ffib([H1, H2 | _] = Prev, C, N) ->
ffib([H1+H2 | Prev], C+1, N).