[erlang-questions] Go vs Erlang for distribution

Tristan Sloughter tristan.sloughter@REDACTED
Sun Jun 22 23:02:58 CEST 2014

I wrote a post about this recently because I found the idea of Go being
an alternative to be ludicrous, especially after working with Go:

Tristan Sloughter

On Sat, Jun 21, 2014, at 03:43 PM, Alexei Sholik wrote:


Let me say from the beginning that this is not meant as a flame post.
I'm genuinely interested in some issues related to Erlang's adoption
and how people outside of its community see its fitness for the domain
where the insiders know it shines – building distributed systems.

My questions have been prompted by the apparent appeal of Go as a
suitable tool for that exact domain. I have noticed the appeal being
expressed both outside and _inside_ Erlang community (will explain

The reason for my asking on this particular list is twofold:

  1. After discovering Erlang (not just the language, but in the wider
sense: Erlang VM, OTP, its founding principles) I see it as a great fit
for building distributed systems that can survive and auto-recover from
various kinds of failures. It has also been proven over the years of
being used in production. Erlang experts are the kind of people to go
to when looking for an advice in this area.

  2. In his recent talk at EUC Garrett Smith showed us an interesting
slide[1] where Go appears to be one of the primary alternatives to
Erlang, as chosen by _Erlang programmers themselves_. To me this
implies that Erlang programmers have found in Go some of the principles
Erlang builds upon, the fact I'm going to dispute below.

  [1]: [2]https://pbs.twimg.com/media/Bqr9xJJIgAIUewQ.png:large

So now comes the question: what do Erlang programmers think about Go
stealing some of the mindshare (and job-share) in the area of building
distributed systems? Why would if be a good option? Or not an option at
all? Just professional opinions based on your experience with Erlang

Let me explain what suggests Go might be a viable alternative:

  * the slide mentioned above
  * Go has been used for teaching distributed systems at the Carnegie
Mellon University since 2011. (Go 1 was release in early 2012) See this
blog from the teacher:
  * increased activity on projects such as libswarm[2], libchan[3],
there are more.

  [2]: [4]https://github.com/docker/libswarm
  [3]: [5]https://github.com/docker/libchan

If you haven't been keeping up with Go, here's a brief overview of its

  * imperative, statically typed, garbage collected, lower level than
scripting languages, but higher level than C
  * builtin concurrency with lightweight processes (called goroutines)
which are scheduled cooperatively
  * single address space for all goroutines (modifying shared data is
discouraged, but possible); hence no isolation
  * goroutines have no identity, communication between them is only
possible through channels; hence no ability to monitor or link to
goroutines, so no supervision
  * writing to a channel is always synchronous; it is possible to make
a buffered channel, but once the buffer is full, the next goroutine
trying to write to it will block
  * all errors must be handled explicitly; can be done at goroutine
level by setting up a catch-all handler. But crashing in the catch-call
handler will crash the goroutine. And crashing a goroutine crashes the
whole program. No Erlang-style "let it crash" or "let someone else
handle errors"

>From this short survey Go looks more like the ultimate antagonist to
Erlang, or at least its philosophy. What could justify its being chosen
as an _alternative_ to Erlang?

Sorry if it turned out a bit too long. Ultimately, I'm curious about
the reasons Go appears in a huge font on Garrett's slide. Also, finding
out why Go has seen a tremendous growth in just 2 years since initial
stable release and is already seen as a good fit for tasks Erlang is
considered the best tool in these circles might shed some light on
which steps Erlang community could take to increase the awareness about
its merits (especially in the light of a few recent threads on this

This ended up rather convoluted, I know. If it was the wrong place to
bring up this topic, I apologize. Feel free to ignore this thread in
that case.

Thanks for reading this far.

Best regards
Alexei Sholik


erlang-questions mailing list




1. http://blog.erlware.org/2014/04/27/some-thoughts-on-go-and-erlang/
2. https://pbs.twimg.com/media/Bqr9xJJIgAIUewQ.png:large
3. http://da-data.blogspot.co.uk/2013/02/teaching-distributed-systems-in-go.html
4. https://github.com/docker/libswarm
5. https://github.com/docker/libchan
6. mailto:erlang-questions@REDACTED
7. http://erlang.org/mailman/listinfo/erlang-questions
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20140622/913de945/attachment.htm>

More information about the erlang-questions mailing list